From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andres Rodriguez Subject: RE: [RFC] Mechanism for high priority scheduling in amdgpu Date: Sat, 17 Dec 2016 03:00:28 +0000 Message-ID: <544E607D03B20249AA404517E498FC4699EC70@exchange01.valvesoftware.com> References: <544E607D03B20249AA404517E498FC4699EBD3@exchange01.valvesoftware.com>, , <544E607D03B20249AA404517E498FC4699EC41@exchange01.valvesoftware.com>, Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "Sagalovitch, Serguei" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" SGV5IFNlcmd1ZWksCgo+IFtTZXJndWVpXSBOby4gSSBtZWFuIHBpcGUgOi0pICBhcyBNRUMgZGVm aW5lIGl0LiAgQXMgZmFyIGFzIEkgdW5kZXJzdGFuZCAoYnkgc2ltcGxpZnlpbmcpCj4gc29tZSBz Y2hlZHVsaW5nIGlzIHBlciBwaXBlLiAgSSBrbm93IGFib3V0IHRoZSBjdXJyZW50IGFsbG9jYXRp b24gc2NoZW1lIGJ1dCBJIGRvIG5vdCB0aGluawo+IHRoYXQgaXQgaXMgIGlkZWFsLiAgSSB3b3Vs ZCBhc3N1bWUgdGhhdCB3ZSBuZWVkICB0byBzd2l0Y2ggdG8gZHluYW1pY2FsIHBhcnRpdGlvbgo+ IG9mIHJlc291cmNlcyAgYmFzZWQgb24gdGhlIHdvcmtsb2FkIG90aGVyd2lzZSB3ZSB3aWxsIGhh dmUgcmVzb3VyY2UgY29uZmxpY3QKPiBiZXR3ZWVuIFZ1bGthbiBjb21wdXRlIGFuZCAgT3BlbkNM LgoKSSBhZ3JlZSB0aGUgcGFydGl0aW9uaW5nIGlzbid0IGlkZWFsLiBJJ20gaG9waW5nIHdlIGNh biBzdGFydCB3aXRoIGEgc29sdXRpb24gdGhhdCBhc3N1bWVzIHRoYXQKb25seSBwaXBlMCBoYXMg YW55IHdvcmsgYW5kIHRoZSBvdGhlciBwaXBlcyBhcmUgaWRsZSAobm8gSFNBL1JPQ20gcnVubmlu ZyBvbiB0aGUgc3lzdGVtKS4KClRoaXMgc2hvdWxkIGJlIG1vcmUgb3IgbGVzcyB0aGUgdXNlIGNh c2Ugd2UgZXhwZWN0IGZyb20gVlIgdXNlcnMuCgpJIGFncmVlIHRoZSBzcGxpdCBpcyBjdXJyZW50 bHkgbm90IGlkZWFsLCBidXQgSSdkIGxpa2UgdG8gY29uc2lkZXIgdGhhdCBhIHNlcGFyYXRlIHRh c2ssIGJlY2F1c2UKbWFraW5nIGl0IGR5bmFtaWMgaXMgbm90IHN0cmFpZ2h0IGZvcndhcmQgOlAK Cj4gW1Nlcmd1ZWldIFZ1bGthbiB3b3JrcyB2aWEgYW1kZ3B1IChrZXJuZWwgc3VibWlzc2lvbnMp IHNvIGFtZGtmZCB3aWxsIGJlIG5vdAo+IGludm9sdmVkLiAgSSB3b3VsZCBhc3N1bWUgdGhhdCBp biB0aGUgY2FzZSBvZiBWUiB3ZSB3aWxsIGhhdmUgb25lIG1haW4KPiBhcHBsaWNhdGlvbiAoImNv bnNvbGUiIG1vZGUoPykpIHNvIHdlIGNvdWxkIHRlbXBvcmFsbHkgImlnbm9yZSIKPiBPcGVuQ0wv Uk9DbSBuZWVkcyB3aGVuIFZSIGlzIHJ1bm5pbmcuCgpDb3JyZWN0LCB0aGlzIGlzIHdoeSB3ZSB3 YW50IHRvIGVuYWJsZSB0aGUgaGlnaCBwcmlvcml0eSBjb21wdXRlIHF1ZXVlIHRocm91Z2gKbGli ZHJtLWFtZGdwdSwgc28gdGhhdCB3ZSBjYW4gZXhwb3NlIGl0IHRocm91Z2ggVnVsa2FuIGxhdGVy LgoKRm9yIGN1cnJlbnQgVlIgd29ya2xvYWRzIHdlIGhhdmUgMyBzZXBhcmF0ZSBwcm9jZXNzZXMg cnVubmluZyBhY3R1YWxseToKICAgIDEpIEdhbWUgcHJvY2VzcwogICAgMikgVlIgQ29tcG9zaXRv ciAodGhpcyBpcyB0aGUgcHJvY2VzcyB0aGF0IHdpbGwgcmVxdWlyZSBoaWdoIHByaW9yaXR5IHF1 ZXVlKQogICAgMykgU3lzdGVtIGNvbXBvc2l0b3IgKHdlIGFyZSBsb29raW5nIGF0IGFwcHJvYWNo ZXMgdG8gcmVtb3ZlIHRoaXMgb3ZlcmhlYWQpCgpGb3Igbm93IEkgdGhpbmsgaXQgaXMgb2theSB0 byBhc3N1bWUgbm8gT3BlbkNML1JPQ20gcnVubmluZyBzaW11bHRhbmVvdXNseSwgYnV0Ckkgd291 bGQgYWxzbyBsaWtlIHRvIGJlIGFibGUgdG8gYWRkcmVzcyB0aGlzIGNhc2UgaW4gdGhlIGZ1dHVy ZSAoY3Jvc3MtcGlwZSBwcmlvcml0aWVzKS4KCj4gW1Nlcmd1ZWldICBUaGUgcHJvYmxlbSB3aXRo IHByZS1lbXB0aW9uIG9mIGdyYXBoaWNzIHRhc2s6ICAoYSkgaXQgbWF5IHRha2UgdGltZSBzbwo+ IGxhdGVuY3kgbWF5IHN1ZmZlcgoKVGhlIGxhdGVuY3kgaXMgb3VyIG1haW4gY29uY2Vybiwgd2Ug d2FudCBzb21ldGhpbmcgdGhhdCBpcyBwcmVkaWN0YWJsZS4gQSBnb29kCmlsbHVzdHJhdGlvbiBv ZiB3aGF0IHRoZSByZXByb2plY3Rpb24gc2NoZWR1bGluZyBsb29rcyBsaWtlIGNhbiBiZSBmb3Vu ZCBoZXJlOgpodHRwczovL2NvbW11bml0eS5hbWQuY29tL3NlcnZsZXQvSml2ZVNlcnZsZXQvc2hv d0ltYWdlLzM4LTEzMTAtMTA0NzU0L3Bhc3RlZEltYWdlXzMucG5nCgo+IChiKSB0byBwcmVlbXB0 IHdlIG5lZWQgdG8gaGF2ZSBkaWZmZXJlbnQgImNvbnRleHQiIC0gd2Ugd2FudAo+IHRvIGd1YXJh bnRlZSB0aGF0IHN1Ym1pc3Npb25zIGZyb20gdGhlIHNhbWUgY29udGV4dCB3aWxsIGJlIGV4ZWN1 dGVkIGluIG9yZGVyLgoKVGhpcyBpcyBva2F5LCBhcyB0aGUgcmVwcm9qZWN0aW9uIHdvcmsgZG9l c24ndCBoYXZlIGRlcGVuZGVuY2llcyBvbiB0aGUgZ2FtZSBjb250ZXh0LCBhbmQgaXQKZXZlbiBo YXBwZW5zIGluIGEgc2VwYXJhdGUgcHJvY2Vzcy4KCj4gQlRXOiAoYSkgRG8geW91IHdhbnQgICJw cmVlbXB0IiBhbmQgbGF0ZXIgcmVzdW1lIG9yIGRvIHlvdSB3YW50ICJwcmVlbXB0IiBhbmQKPiAi Y2FuY2VsL2Fib3J0IgoKUHJlZW1wdCB0aGUgZ2FtZSB3aXRoIHRoZSBjb21wb3NpdG9yIHRhc2sg YW5kIHRoZW4gcmVzdW1lIGl0LgoKPiAoYikgVnVsa2FuIGlzIGdlbmVyaWMgQVBJIGFuZCBjb3Vs ZCBiZSB1c2VkIGZvciBncmFwaGljcyBhcyB3ZWxsIGFzCj4gZm9yIHBsYWluIGNvbXB1dGUgdGFz a3MgKFZLX1FVRVVFX0NPTVBVVEVfQklUKS4KClllYWgsIHRoZSBwbGFuIGlzIHRvIHVzZSB2dWxr YW4gY29tcHV0ZS4gQnV0IGlmIHlvdSBmaWd1cmUgb3V0IGEgd2F5IGZvciB1cyB0byBnZXQKYSBn dWFyYW50ZWVkIGV4ZWN1dGlvbiB0aW1lIHVzaW5nIHZ1bGthbiBncmFwaGljcywgdGhlbiBJJ2xs IHRha2UgeW91IG91dCBmb3IgYSBiZWVyIDopCgpSZWdhcmRzLApBbmRyZXMKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpGcm9tOiBTYWdhbG92aXRjaCwgU2VyZ3VlaSBb U2VyZ3VlaS5TYWdhbG92aXRjaEBhbWQuY29tXQpTZW50OiBGcmlkYXksIERlY2VtYmVyIDE2LCAy MDE2IDk6MTMgUE0KVG86IEFuZHJlcyBSb2RyaWd1ZXo7IGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnClN1YmplY3Q6IFJlOiBbUkZDXSBNZWNoYW5pc20gZm9yIGhpZ2ggcHJpb3JpdHkgc2No ZWR1bGluZyBpbiBhbWRncHUKCkhpIEFuZHJlcywKClBsZWFzZSBzZWUgaW5saW5lIChhcyBbU2Vy Z3VlaV0pCgpTaW5jZXJlbHkgeW91cnMsClNlcmd1ZWkgU2FnYWxvdml0Y2gKCgpGcm9tOiBBbmRy ZXMgUm9kcmlndWV6IDxhbmRyZXNyQHZhbHZlc29mdHdhcmUuY29tPgpTZW50OiBEZWNlbWJlciAx NiwgMjAxNiA4OjI5IFBNClRvOiBTYWdhbG92aXRjaCwgU2VyZ3VlaTsgYW1kLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKU3ViamVjdDogUkU6IFtSRkNdIE1lY2hhbmlzbSBmb3IgaGlnaCBwcmlv cml0eSBzY2hlZHVsaW5nIGluIGFtZGdwdQoKSGkgU2VyZ3VlaSwKClRoYW5rcyBmb3IgdGhlIGZl ZWRiYWNrLiBBbnN3ZXJzIGlubGluZSBhcyBbQVJdLgoKUmVnYXJkcywKQW5kcmVzCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkZyb206IFNhZ2Fsb3ZpdGNoLCBTZXJn dWVpIFtTZXJndWVpLlNhZ2Fsb3ZpdGNoQGFtZC5jb21dClNlbnQ6IEZyaWRheSwgRGVjZW1iZXIg MTYsIDIwMTYgODoxNSBQTQpUbzogQW5kcmVzIFJvZHJpZ3VlejsgYW1kLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKU3ViamVjdDogUmU6IFtSRkNdIE1lY2hhbmlzbSBmb3IgaGlnaCBwcmlvcml0 eSBzY2hlZHVsaW5nIGluIGFtZGdwdQoKQW5kcmVzLAoKClF1aWNrIGNvbW1lbnRzOgoKMSkgVG8g bWluaW1pemUgImJ1YmJsZXMiLCBldGMuIHdlIG5lZWQgdG8gImZvcmNlIsKgQ1UgYXNzaWdubWVu dHMvYmluZGluZwp0byBoaWdoLXByaW9yaXR5IHF1ZXVlICB3aGVuIGl0IHdpbGwgYmUgaW4gdXNl IGFuZCAiZnJlZSIgdGhlbSBsYXRlcgood2UgIGRvIG5vdCB3YW50IGZvcmV2ZXIgdGFrZSBDVXMg ZnJvbSBlLmcuIGdyYXBoaWMgdGFzayB0byBkZWdyYWRlIGdyYXBoaWNzCnBlcmZvcm1hbmNlKS4K Ck90aGVyd2lzZSB3ZSBjb3VsZCBoYXZlIHNjZW5hcmlvIHdoZW4gbG9uZyBncmFwaGljcyB0YXNr IChvciBsb3ctcHJpb3JpdHkKY29tcHV0ZSkgd2lsbCB0b29rIGFsbCAoZXh0cmEpIENVcyBhbmQg aGlnaC0tcHJpb3JpdHkgd2lsbCB3YWl0IGZvciBuZWVkZWQgcmVzb3VyY2VzLgpJdCB3aWxsIG5v dCBiZSB2aXNpYmxlIG9uICJOT1AgIsKgYnV0IG9ubHkgd2hlbiB5b3Ugc3VibWl0ICJyZWFsIiBj b21wdXRlIHRhc2sKc28gSSB3b3VsZCByZWNvbW1lbmQgIG5vdCB0byB1c2UgIk5PUCIgcGFja2V0 cyBhdCBhbGwgZm9yIHRlc3RpbmcuCgpJdCAoQ1UgYXNzaWdubWVudCkgY291bGQgYmUgcmVsYXRp dmVseSBlYXN5IGRvbmUgd2hlbiBldmVyeXRoaW5nIGlzIGdvaW5nIHZpYSBrZXJuZWwKKGUuZy4g YXMgcGFydCBvZiBmcmFtZSBzdWJtaXNzaW9uKSBidXQgSSBtdXN0IGFkbWl0IHRoYXQgSSBhbSBu b3Qgc3VyZQphYm91dCB0aGUgYmVzdCB3YXkgZm9yIHVzZXIgbGV2ZWwgc3VibWlzc2lvbnMgKGFt ZGtmZCkuCgpbQVJdIEkgd2Fzbid0IGF3YXJlIG9mIHRoaXMgcGFydCBvZiB0aGUgcHJvZ3JhbW1p bmcgc2VxdWVuY2UuIFRoYW5rcyBmb3IgdGhlIGhlYWRzIHVwIQpJcyB0aGlzIHNpbWlsYXIgdG8g dGhlIENVIG1hc2tpbmcgcHJvZ3JhbW1pbmc/CltTZXJndWVpXSBZZXMuIFRvIHNpbXBsaWZ5OiB0 aGUgcHJvYmxlbSBpcyB0aGF0ICJzY2hlZHVsZXIiIHdoZW4gZGVjaWRpbmcgd2hpY2gKcXVldWUg dG8gIHJ1biB3aWxsIGNoZWNrIGlmIHRoZXJlIGlzIGVub3VnaCByZXNvdXJjZXMgYW5kIGlmIG5v dCB0aGVuIGl0IHdpbGwgYmVnaW4KdG8gY2hlY2sgb3RoZXIgcXVldWVzIHdpdGggbG93ZXIgcHJp b3JpdHkuCgoyKSBJIHdvdWxkIHJlY29tbWVuZCB0byBkZWRpY2F0ZSB0aGUgd2hvbGUgcGlwZSB0 byBoaWdoLXByaW9yaXR5IHF1ZXVlIGFuZCBoYXZlCm5vdGhpbmcgdGhlaXIgZXhjZXB0IGl0LgoK W0FSXSBJJ20gZ3Vlc3NpbmcgaW4gdGhpcyBjb250ZXh0IHlvdSBtZWFuIHBpcGUgPSBxdWV1ZT8g KGFzIG9wcG9zZWQgdG8gdGhlIE1FQyBkZWZpbml0aW9uCm9mIHBpcGUsIHdoaWNoIGlzIGEgZ3Jv dXBpbmcgb2YgcXVldWVzKS4gSSBzYXkgdGhpcyBiZWNhdXNlIGFtZGdwdSBvbmx5IGhhcyBhY2Nl c3MgdG8gMSBwaXBlLAphbmQgdGhlIHJlc3QgYXJlIHN0YXRpY2FsbHkgcGFydGl0aW9uZWQgZm9y IGFtZGtmZCB1c2FnZS4KCltTZXJndWVpXSBOby4gSSBtZWFuIHBpcGUgOi0pICBhcyBNRUMgZGVm aW5lIGl0LiAgQXMgZmFyIGFzIEkgdW5kZXJzdGFuZCAoYnkgc2ltcGxpZnlpbmcpCnNvbWUgc2No ZWR1bGluZyBpcyBwZXIgcGlwZS4gIEkga25vdyBhYm91dCB0aGUgY3VycmVudCBhbGxvY2F0aW9u IHNjaGVtZSBidXQgSSBkbyBub3QgdGhpbmsKdGhhdCBpdCBpcyAgaWRlYWwuICBJIHdvdWxkIGFz c3VtZSB0aGF0IHdlIG5lZWQgIHRvIHN3aXRjaCB0byBkeW5hbWljYWwgcGFydGl0aW9uCm9mIHJl c291cmNlcyAgYmFzZWQgb24gdGhlIHdvcmtsb2FkIG90aGVyd2lzZSB3ZSB3aWxsIGhhdmUgcmVz b3VyY2UgY29uZmxpY3QKYmV0d2VlbiBWdWxrYW4gY29tcHV0ZSBhbmQgIE9wZW5DTC4KCgpCVFc6 IFdoaWNoIHVzZXIgbGV2ZWwgQVBJIGRvIHlvdSB3YW50IHRvIHVzZSBmb3IgY29tcHV0ZTogVnVs a2FuIG9yIE9wZW5DTD8KCltBUl0gVnVsa2FuCgpbU2VyZ3VlaV0gVnVsa2FuIHdvcmtzIHZpYSBh bWRncHUgKGtlcm5lbCBzdWJtaXNzaW9ucykgc28gYW1ka2ZkIHdpbGwgYmUgbm90Cmludm9sdmVk LiAgSSB3b3VsZCBhc3N1bWUgdGhhdCBpbiB0aGUgY2FzZSBvZiBWUiB3ZSB3aWxsIGhhdmUgb25l IG1haW4KYXBwbGljYXRpb24gKCJjb25zb2xlIiBtb2RlKD8pKSBzbyB3ZSBjb3VsZCB0ZW1wb3Jh bGx5ICJpZ25vcmUiCk9wZW5DTC9ST0NtIG5lZWRzIHdoZW4gVlIgaXMgcnVubmluZy4KCj7CoHdl IHdpbGwgbm90IGJlIGFibGUgdG8gcHJvdmlkZSBhIHNvbHV0aW9uIGNvbXBhdGlibGUgd2l0aCBH Rlggd29ybG9hZHMuCkkgYXNzdW1lIHRoYXQgeW91IGFyZSB0YWxraW5nIGFib3V0IGdyYXBoaWNz PyBBbSBJIHJpZ2h0PwoKW0FSXSBZZWFoLCBteSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgcHJlLWVt cHRpbmcgdGhlIGN1cnJlbnRseSBydW5uaW5nIGdyYXBoaWNzIGpvYiBhbmQgc2NoZWR1bGluZyBp bgpzb21ldGhpbmcgZWxzZSB1c2luZyBtaWQtYnVmZmVyIHByZS1lbXB0aW9uIGhhcyBzb21lIGNh c2VzIHdoZXJlIGl0IGRvZXNuJ3Qgd29yayB3ZWxsLiBCdXQgaWYgd2l0aApwb2xhcmlzMTAgaXQg c3RhcnRzIHdvcmtpbmcgd2VsbCwgaXQgbWlnaHQgYmUgYSBiZXR0ZXIgc29sdXRpb24gZm9yIHVz IChiZWNhdXNlIHRoZSB3aG9sZSByZXByb2plY3Rpb24Kd29yayB1c2VzIHRoZSB2dWxrYW4gZ3Jh cGhpY3Mgc3RhY2sgYXQgdGhlIG1vbWVudCwgYW5kIHBvcnRpbmcgaXQgdG8gY29tcHV0ZSBpcyBu b3QgdHJpdmlhbCkuCgpbU2VyZ3VlaV0gIFRoZSBwcm9ibGVtIHdpdGggcHJlLWVtcHRpb24gb2Yg Z3JhcGhpY3MgdGFzazogIChhKSBpdCBtYXkgdGFrZSB0aW1lIHNvCmxhdGVuY3kgbWF5IHN1ZmZl ciAoYikgdG8gcHJlZW1wdCB3ZSBuZWVkIHRvIGhhdmUgZGlmZmVyZW50ICJjb250ZXh0IiAtIHdl IHdhbnQKdG8gZ3VhcmFudGVlIHRoYXQgc3VibWlzc2lvbnMgZnJvbSB0aGUgc2FtZSBjb250ZXh0 IHdpbGwgYmUgZXhlY3V0ZWQgaW4gb3JkZXIuCkJUVzogKGEpIERvIHlvdSB3YW50ICAicHJlZW1w dCIgYW5kIGxhdGVyIHJlc3VtZSBvciBkbyB5b3Ugd2FudCAicHJlZW1wdCIgYW5kCiJjYW5jZWwv YWJvcnQiPyAgKGIpIFZ1bGthbiBpcyBnZW5lcmljIEFQSSBhbmQgY291bGQgYmUgdXNlZApmb3Ig Z3JhcGhpY3MgYXMgd2VsbCBhcyBmb3IgcGxhaW4gY29tcHV0ZSB0YXNrcyAoVktfUVVFVUVfQ09N UFVURV9CSVQpLgoKClNpbmNlcmVseSB5b3VycywKU2VyZ3VlaSBTYWdhbG92aXRjaAoKCgpGcm9t OiBhbWQtZ2Z4IDxhbWQtZ2Z4LWJvdW5jZXNAbGlzdHMuZnJlZWRlc2t0b3Aub3JnPiBvbiBiZWhh bGYgb2YgQW5kcmVzIFJvZHJpZ3VleiA8YW5kcmVzckB2YWx2ZXNvZnR3YXJlLmNvbT4KU2VudDog RGVjZW1iZXIgMTYsIDIwMTYgNjoxNSBQTQpUbzogYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKU3ViamVjdDogW1JGQ10gTWVjaGFuaXNtIGZvciBoaWdoIHByaW9yaXR5IHNjaGVkdWxpbmcg aW4gYW1kZ3B1CgpIaSBFdmVyeW9uZSwKClRoaXMgUkZDIGlzIGFsc28gYXZhaWxhYmxlIGFzIGEg Z2lzdCBoZXJlOgpodHRwczovL2dpc3QuZ2l0aHViLmNvbS9sb3N0Z29hdC83MDAwNDMyY2Q2ODY0 MjY1ZGJjMmMzYWI5MzIwNDI0OQoKCltSRkNdIE1lY2hhbmlzbSBmb3IgaGlnaCBwcmlvcml0eSBz Y2hlZHVsaW5nIGluIGFtZGdwdQpnaXN0LmdpdGh1Yi5jb20KW1JGQ10gTWVjaGFuaXNtIGZvciBo aWdoIHByaW9yaXR5IHNjaGVkdWxpbmcgaW4gYW1kZ3B1CgoKCgpbUkZDXSBNZWNoYW5pc20gZm9y IGhpZ2ggcHJpb3JpdHkgc2NoZWR1bGluZyBpbiBhbWRncHUKZ2lzdC5naXRodWIuY29tCltSRkNd IE1lY2hhbmlzbSBmb3IgaGlnaCBwcmlvcml0eSBzY2hlZHVsaW5nIGluIGFtZGdwdQoKCldlIGFy ZSBpbnRlcmVzdGVkIGluIGZlZWRiYWNrIGZvciBhIG1lY2hhbmlzbSB0byBlZmZlY3RpdmVseSBz Y2hlZHVsZSBoaWdoCnByaW9yaXR5IFZSIHJlcHJvamVjdGlvbiB0YXNrcyAoYWxzbyByZWZlcnJl ZCB0byBhcyB0aW1lLXdhcnBpbmcpIGZvciBQb2xhcmlzMTAKcnVubmluZyBvbiB0aGUgYW1kZ3B1 IGtlcm5lbCBkcml2ZXIuCgpCcmllZiBjb250ZXh0OgotLS0tLS0tLS0tLS0tLQoKVGhlIG1haW4g b2JqZWN0aXZlIG9mIHJlcHJvamVjdGlvbiBpcyB0byBhdm9pZCBtb3Rpb24gc2lja25lc3MgZm9y IFZSIHVzZXJzIGluCnNjZW5hcmlvcyB3aGVyZSB0aGUgZ2FtZSBvciBhcHBsaWNhdGlvbiB3b3Vs ZCBmYWlsIHRvIGZpbmlzaCByZW5kZXJpbmcgYSBuZXcKZnJhbWUgaW4gdGltZSBmb3IgdGhlIG5l eHQgVkJMQU5LLiBXaGVuIHRoaXMgaGFwcGVucywgdGhlIHVzZXIncyBoZWFkIG1vdmVtZW50cwph cmUgbm90IHJlZmxlY3RlZCBvbiB0aGUgSGVhZCBNb3VudGVkIERpc3BsYXkgKEhNRCkgZm9yIHRo ZSBkdXJhdGlvbiBvZiBhbgpleHRyYSBmcmFtZS4gVGhpcyBleHRlbmRlZCBtaXNtYXRjaCBiZXR3 ZWVuIHRoZSBpbm5lciBlYXIgYW5kIHRoZSBleWVzIG1heQpjYXVzZSB0aGUgdXNlciB0byBleHBl cmllbmNlIG1vdGlvbiBzaWNrbmVzcy4KClRoZSBWUiBjb21wb3NpdG9yIGRlYWxzIHdpdGggdGhp cyBwcm9ibGVtIGJ5IGZhYnJpY2F0aW5nIGEgbmV3IGZyYW1lIHVzaW5nIHRoZQp1c2VyJ3MgdXBk YXRlZCBoZWFkIHBvc2l0aW9uIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIHByZXZpb3VzIGZyYW1l cy4gVGhpcwphdm9pZHMgYSBwcm9sb25nZWQgbWlzbWF0Y2ggYmV0d2VlbiB0aGUgSE1EIG91dHB1 dCBhbmQgdGhlIGlubmVyIGVhci4KCkJlY2F1c2Ugb2YgdGhlIGFkdmVyc2UgZWZmZWN0cyBvbiB0 aGUgdXNlciwgd2UgcmVxdWlyZSBoaWdoIGNvbmZpZGVuY2UgdGhhdCB0aGUKcmVwcm9qZWN0aW9u IHRhc2sgd2lsbCBjb21wbGV0ZSBiZWZvcmUgdGhlIFZCTEFOSyBpbnRlcnZhbC4gRXZlbiBpZiB0 aGUgR0ZYIHBpcGUKaXMgY3VycmVudGx5IGZ1bGwgb2Ygd29yayBmcm9tIHRoZSBnYW1lL2FwcGxp Y2F0aW9uICh3aGljaCBpcyBtb3N0IGxpa2VseSB0aGUgY2FzZSkuCgpGb3IgbW9yZSBkZXRhaWxz IGFuZCBpbGx1c3RyYXRpb25zLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGZvbGxvd2luZyBkb2N1bWVu dDoKaHR0cHM6Ly9jb21tdW5pdHkuYW1kLmNvbS9jb21tdW5pdHkvZ2FtaW5nL2Jsb2cvMjAxNi8w My8yOC9hc3luY2hyb25vdXMtc2hhZGVycy1ldm9sdmVkCgoKR2FtaW5nOiBBc3luY2hyb25vdXMg U2hhZGVycyBFdm9sdmVkIHwgQ29tbXVuaXR5CmNvbW11bml0eS5hbWQuY29tCk9uZSBvZiB0aGUg bW9zdCBleGNpdGluZyBuZXcgZGV2ZWxvcG1lbnRzIGluIEdQVSB0ZWNobm9sb2d5IG92ZXIgdGhl IHBhc3QgeWVhciBoYXMgYmVlbiB0aGUgYWRvcHRpb24gb2YgYXN5bmNocm9ub3VzIHNoYWRlcnMs IHdoaWNoIGNhbiBtYWtlIG1vcmUgZWZmaWNpZW50IHVzZSBvZiAuLi4KCgoKR2FtaW5nOiBBc3lu Y2hyb25vdXMgU2hhZGVycyBFdm9sdmVkIHwgQ29tbXVuaXR5CmNvbW11bml0eS5hbWQuY29tCk9u ZSBvZiB0aGUgbW9zdCBleGNpdGluZyBuZXcgZGV2ZWxvcG1lbnRzIGluIEdQVSB0ZWNobm9sb2d5 IG92ZXIgdGhlIHBhc3QgeWVhciBoYXMgYmVlbiB0aGUgYWRvcHRpb24gb2YgYXN5bmNocm9ub3Vz IHNoYWRlcnMsIHdoaWNoIGNhbiBtYWtlIG1vcmUgZWZmaWNpZW50IHVzZSBvZiAuLi4KCgpSZXF1 aXJlbWVudHM6Ci0tLS0tLS0tLS0tLS0KClRoZSBtZWNoYW5pc20gbXVzdCBleHBvc2UgdGhlIGZv bGxvd2luZyBmdW5jdGlvbmFpbGl0eToKCiAgICAqIEpvYiByb3VuZCB0cmlwIHRpbWUgbXVzdCBi ZSBwcmVkaWN0YWJsZSwgZnJvbSBzdWJtaXNzaW9uIHRvIGZlbmNlIHNpZ25hbAoKICAgICogVGhl IG1lY2hhbmlzbSBtdXN0IHN1cHBvcnQgY29tcHV0ZSB3b3JrbG9hZHMuCgpHb2FsczoKLS0tLS0t CgogICAgKiBUaGUgbWVjaGFuaXNtIHNob3VsZCBwcm92aWRlIGxvdyBzdWJtaXNzaW9uIGxhdGVu Y2llcwoKVGVzdDogc3VibWl0dGluZyBhIE5PUCBwYWNrZXQgdGhyb3VnaCB0aGUgbWVjaGFuaXNt IG9uIGJ1c3kgaGFyZHdhcmUgc2hvdWxkCmJlIGVxdWl2YWxlbnQgdG8gc3VibWl0dGluZyBhIE5P UCBvbiBpZGxlIGhhcmR3YXJlLgoKTmljZSB0byBoYXZlOgotLS0tLS0tLS0tLS0tCgogICAgKiBU aGUgbWVjaGFuaXNtIHNob3VsZCBhbHNvIHN1cHBvcnQgR0ZYIHdvcmtsb2Fkcy4KCk15IHVuZGVy c3RhbmRpbmcgaXMgdGhhdCB3aXRoIHRoZSBjdXJyZW50IGhhcmR3YXJlIGNhcGFiaWxpdGllcyBp biBQb2xhcmlzMTAgd2UKd2lsbCBub3QgYmUgYWJsZSB0byBwcm92aWRlIGEgc29sdXRpb24gY29t cGF0aWJsZSB3aXRoIEdGWCB3b3Jsb2Fkcy4KCkJ1dCBJIHdvdWxkIGxvdmUgdG8gaGVhciBvdGhl cndpc2UuIFNvIGlmIGFueW9uZSBoYXMgYW4gaWRlYSwgYXBwcm9hY2ggb3IKc3VnZ2VzdGlvbiB0 aGF0IHdpbGwgYWxzbyBiZSBjb21wYXRpYmxlIHdpdGggdGhlIEdGWCByaW5nLCBwbGVhc2UgbGV0 IHVzIGtub3cKYWJvdXQgaXQuCgogICAgKiBUaGUgYWJvdmUgZ3VhcmFudGVlcyBzaG91bGQgYWxz byBiZSByZXNwZWN0ZWQgYnkgYW1ka2ZkIHdvcmtsb2FkcwoKV291bGQgYmUgZ29vZCB0byBoYXZl IGZvciBjb25zaXN0ZW5jeSwgYnV0IG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgYXMgdXNlcnMgcnVu bmluZwpnYW1lcyBhcmUgbm90IHRyYWRpdGlvbmFsbHkgcnVubmluZyBIUEMgd29ya2xvYWRzIGlu IHRoZSBiYWNrZ3JvdW5kLgoKUHJvcG9zZWQgYXBwcm9hY2g6Ci0tLS0tLS0tLS0tLS0tLS0tLQoK U2ltaWxhciB0byB0aGUgd2luZG93cyBkcml2ZXIsIHdlIGNvdWxkIGV4cG9zZSBhIGhpZ2ggcHJp b3JpdHkgY29tcHV0ZSBxdWV1ZSB0bwp1c2Vyc3BhY2UuCgpTdWJtaXNzaW9ucyB0byB0aGlzIGNv bXB1dGUgcXVldWUgd2lsbCBiZSBzY2hlZHVsZWQgd2l0aCBoaWdoIHByaW9yaXR5LCBhbmQgbWF5 CmFjcXVpcmUgaGFyZHdhcmUgcmVzb3VyY2VzIHByZXZpb3VzbHkgaW4gdXNlIGJ5IG90aGVyIHF1 ZXVlcy4KClRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlICdw cmlvcml0eScgZmllbGQgaW4gdGhlIEhRRHMKYW5kIGNvdWxkIGJlIHByb2dyYW1tZWQgYnkgYW1k Z3B1IG9yIHRoZSBhbWRncHUgc2NoZWR1bGVyLiBUaGUgcmVsZXZhbnQKcmVnaXN0ZXIgZmllbGRz IGFyZToKICAgICAgICAqIG1tQ1BfSFFEX1BJUEVfUFJJT1JJVFkKICAgICAgICAqIG1tQ1BfSFFE X1FVRVVFX1BSSU9SSVRZCgpJbXBsZW1lbnRhdGlvbiBhcHByb2FjaCAxIC0gc3RhdGljIHBhcnRp dGlvbmluZzoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CgpUaGUgYW1kZ3B1IGRyaXZlciBjdXJyZW50bHkgY29udHJvbHMgOCBjb21wdXRlIHF1ZXVlcyBm cm9tIHBpcGUwLiBXZSBjYW4Kc3RhdGljYWxseSBwYXJ0aXRpb24gdGhlc2UgYXMgZm9sbG93czoK ICAgICAgICAqIDd4IHJlZ3VsYXIKICAgICAgICAqIDF4IGhpZ2ggcHJpb3JpdHkKClRoZSByZWxl dmFudCBwcmlvcml0aWVzIGNhbiBiZSBzZXQgc28gdGhhdCBzdWJtaXNzaW9ucyB0byB0aGUgaGln aCBwcmlvcml0eQpyaW5nIHdpbGwgc3RhcnZlIHRoZSBvdGhlciBjb21wdXRlIHJpbmdzIGFuZCB0 aGUgR0ZYIHJpbmcuCgpUaGUgYW1kZ3B1IHNjaGVkdWxlciB3aWxsIG9ubHkgcGxhY2Ugam9icyBp bnRvIHRoZSBoaWdoIHByaW9yaXR5IHJpbmdzIGlmIHRoZQpjb250ZXh0IGlzIG1hcmtlZCBhcyBo aWdoIHByaW9yaXR5LiBBbmQgYSBjb3JyZXNwb25kaW5nIHByaW9yaXR5IHNob3VsZCBiZQphZGRl ZCB0byBrZWVwIHRyYWNrIG9mIHRoaXMgaW5mb3JtYXRpb246CiAgICAgKiBBTURfU0NIRURfUFJJ T1JJVFlfS0VSTkVMCiAgICAgKiAtPiBBTURfU0NIRURfUFJJT1JJVFlfSElHSAogICAgICogQU1E X1NDSEVEX1BSSU9SSVRZX05PUk1BTAoKVGhlIHVzZXIgd2lsbCByZXF1ZXN0IGEgaGlnaCBwcmlv cml0eSBjb250ZXh0IGJ5IHNldHRpbmcgYW4gYXBwcm9wcmlhdGUgZmxhZwppbiBkcm1fYW1kZ3B1 X2N0eF9pbiAoQU1ER1BVX0NUWF9ISUdIX1BSSU9SSVRZIG9yIHNpbWlsYXIpOgpodHRwczovL2dp dGh1Yi5jb20vdG9ydmFsZHMvbGludXgvYmxvYi9tYXN0ZXIvaW5jbHVkZS91YXBpL2RybS9hbWRn cHVfZHJtLmgjTDE2MwoKVGhlIHNldHRpbmcgaXMgaW4gYSBwZXIgY29udGV4dCBsZXZlbCBzbyB0 aGF0IHdlIGNhbjoKICAgICogTWFpbnRhaW4gYSBjb25zaXN0ZW50IEZJRk8gb3JkZXJpbmcgb2Yg YWxsIHN1Ym1pc3Npb25zIHRvIGEgY29udGV4dAogICAgKiBDcmVhdGUgaGlnaCBwcmlvcml0eSBh bmQgbm9uLWhpZ2ggcHJpb3JpdHkgY29udGV4dHMgaW4gdGhlIHNhbWUgcHJvY2VzcwoKSW1wbGVt ZW50YXRpb24gYXBwcm9hY2ggMiAtIGR5bmFtaWMgcHJpb3JpdHkgcHJvZ3JhbW1pbmc6Ci0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKU2lt aWxhciB0byB0aGUgYWJvdmUsIGJ1dCBpbnN0ZWFkIG9mIHByb2dyYW1taW5nIHRoZSBwcmlvcml0 aWVzIGFuZAphbWRncHVfaW5pdCgpIHRpbWUsIHRoZSBTVyBzY2hlZHVsZXIgd2lsbCByZXByb2dy YW0gdGhlIHF1ZXVlIHByaW9yaXRpZXMKZHluYW1pY2FsbHkgd2hlbiBzY2hlZHVsaW5nIGEgdGFz ay4KClRoaXMgd291bGQgaW52b2x2ZSBoYXZpbmcgYSBoYXJkd2FyZSBzcGVjaWZpYyBjYWxsYmFj ayBmcm9tIHRoZSBzY2hlZHVsZXIgdG8Kc2V0IHRoZSBhcHByb3ByaWF0ZSBxdWV1ZSBwcmlvcml0 eTogc2V0X3ByaW9yaXR5KGludCByaW5nLCBpbnQgaW5kZXgsIGludCBwcmlvcml0eSkKCkR1cmlu ZyB0aGlzIGNhbGxiYWNrIHdlIHdvdWxkIGhhdmUgdG8gZ3JhYiB0aGUgU1JCTSBtdXRleCB0byBw ZXJmb3JtIHRoZSBhcHByb3ByaWF0ZQpIVyBwcm9ncmFtbWluZywgYW5kIEknbSBub3QgcmVhbGx5 IHN1cmUgaWYgdGhhdCBpcyBzb21ldGhpbmcgd2Ugc2hvdWxkIGJlIGRvaW5nIGZyb20KdGhlIHNj aGVkdWxlci4KCk9uIHRoZSBwb3NpdGl2ZSBzaWRlLCB0aGlzIGFwcHJvYWNoIHdvdWxkIGFsbG93 IHVzIHRvIHByb2dyYW0gYSByYW5nZSBvZgpwcmlvcml0aWVzIGZvciBqb2JzIGluc3RlYWQgb2Yg YSBzaW5nbGUgImhpZ2ggcHJpb3JpdHkiIHZhbHVlIiwgYWNoaWV2aW5nCnNvbWV0aGluZyBzaW1p bGFyIHRvIHRoZSBuaWNlbmVzcyBBUEkgYXZhaWxhYmxlIGZvciBDUFUgc2NoZWR1bGluZy4KCkkn bSBub3Qgc3VyZSBpZiB0aGlzIGZsZXhpYmlsaXR5IGlzIHNvbWV0aGluZyB0aGF0IHdlIHdvdWxk IG5lZWQgZm9yIG91ciB1c2UKY2FzZSwgYnV0IGl0IG1pZ2h0IGJlIHVzZWZ1bCBpbiBvdGhlciBz Y2VuYXJpb3MgKG11bHRpcGxlIHVzZXJzIHNoYXJpbmcgY29tcHV0ZQp0aW1lIG9uIGEgc2VydmVy KS4KClRoaXMgYXBwcm9hY2ggd291bGQgcmVxdWlyZSBhIG5ldyBpbnQgZmllbGQgaW4gZHJtX2Ft ZGdwdV9jdHhfaW4sIG9yIHJlcHVycG9zaW5nCm9mIHRoZSBmbGFncyBmaWVsZC4KCktub3duIGN1 cnJlbnQgb2JzdGFjbGVzOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoZSBTUSBpcyBjdXJy ZW50bHkgcHJvZ3JhbW1lZCB0byBkaXNyZWdhcmQgdGhlIEhRRCBwcmlvcml0aWVzLCBhbmQgaW5z dGVhZCBpdCBwaWNrcwpqb2JzIGF0IHJhbmRvbS4gU2V0dGluZ3MgZnJvbSB0aGUgc2hhZGVyIGl0 c2VsZiBhcmUgYWxzbyBkaXNyZWdhcmRlZCBhcyB0aGlzIGlzCmNvbnNpZGVyZWQgYSBwcml2aWxl Z2VkIGZpZWxkLgoKRWZmZWN0aXZlbHkgd2UgY2FuIGdldCBvdXIgY29tcHV0ZSB3YXZlZnJvbnQg bGF1bmNoZWQgQVNBUCwgYnV0IHdlIG1pZ2h0IG5vdCBnZXQgdGhlCnRpbWUgd2UgbmVlZCBvbiB0 aGUgU1EuCgpUaGUgY3VycmVudCBwcm9ncmFtbWluZyB3b3VsZCBoYXZlIHRvIGJlIGNoYW5nZWQg dG8gYWxsb3cgcHJpb3JpdHkgcHJvcGFnYXRpb24KZnJvbSB0aGUgSFFEIGludG8gdGhlIFNRLgoK R2VuZXJpYyBhcHByb2FjaCBmb3IgYWxsIEhXIElQczoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KCkZvciBjb25zaXN0ZW5jeSBwdXJwb3NlcywgdGhlIGhpZ2ggcHJpb3JpdHkgY29u dGV4dCBjYW4gYmUgZW5hYmxlZCBmb3IgYWxsIEhXIElQcwp3aXRoIHN1cHBvcnQgb2YgdGhlIFNX IHNjaGVkdWxlci4gVGhpcyB3aWxsIGZ1bmN0aW9uIHNpbWlsYXJseSB0byB0aGUgY3VycmVudApB TURfU0NIRURfUFJJT1JJVFlfS0VSTkVMIHByaW9yaXR5LCB3aGVyZSB0aGUgam9iIGNhbiBqdW1w IGFoZWFkIG9mIGFueXRoaW5nIG5vdApjb21taXRlZCB0byB0aGUgSFcgcXVldWUuCgpUaGUgYmVu ZWZpdHMgb2YgcmVxdWVzdGluZyBhIGhpZ2ggcHJpb3JpdHkgY29udGV4dCBmb3IgYSBub24tY29t cHV0ZSBxdWV1ZSB3aWxsCmJlIGxlc3NlciAoZS5nLiB1cCB0byAxMHMgb2Ygd2FpdCB0aW1lIGlm IGEgR0ZYIGNvbW1hbmQgaXMgc3R1Y2sgaW4gZnJvbnQgb2YKeW91KSwgYnV0IGhhdmluZyB0aGUg QVBJIGluIHBsYWNlIHdpbGwgYWxsb3cgdXMgdG8gZWFzaWx5IGltcHJvdmUgdGhlIGltcGxlbWVu dGF0aW9uCmluIHRoZSBmdXR1cmUgYXMgbmV3IGZlYXR1cmVzIGJlY29tZSBhdmFpbGFibGUgaW4g bmV3IGhhcmR3YXJlLgoKRnV0dXJlIHN0ZXBzOgotLS0tLS0tLS0tLS0tCgpPbmNlIHdlIGhhdmUg YW4gYXBwcm9hY2ggc2V0dGxlZCwgSSBjYW4gdGFrZSBjYXJlIG9mIHRoZSBpbXBsZW1lbnRhdGlv bi4KCkFsc28sIG9uY2UgdGhlIGludGVyZmFjZSBpcyBtb3N0bHkgZGVjaWRlZCwgd2UgY2FuIHN0 YXJ0IHRoaW5raW5nIGFib3V0CmV4cG9zaW5nIHRoZSBoaWdoIHByaW9yaXR5IHF1ZXVlIHRocm91 Z2ggcmFkdi4KClJlcXVlc3QgZm9yIGZlZWRiYWNrOgotLS0tLS0tLS0tLS0tLS0tLS0tLS0KCldl IGFyZW4ndCBtYXJyaWVkIHRvIGFueSBvZiB0aGUgYXBwcm9hY2hlcyBvdXRsaW5lZCBhYm92ZS4g T3VyIGdvYWwgaXMgdG8Kb2J0YWluIGEgbWVjaGFuaXNtIHRoYXQgd2lsbCBhbGxvdyB1cyB0byBj b21wbGV0ZSB0aGUgcmVwcm9qZWN0aW9uIGpvYiB3aXRoaW4gYQpwcmVkaWN0YWJsZSBhbW91bnQg b2YgdGltZS4gU28gaWYgYW55b25lIGFueW9uZSBoYXMgYW55IHN1Z2dlc3Rpb25zIGZvcgppbXBy b3ZlbWVudHMgb3IgYWx0ZXJuYXRpdmUgc3RyYXRlZ2llcyB3ZSBhcmUgbW9yZSB0aGFuIGhhcHB5 IHRvIGhlYXIgdGhlbS4KCklmIGFueSBvZiB0aGUgdGVjaG5pY2FsIGluZm9ybWF0aW9uIGFib3Zl IGlzIGFsc28gaW5jb3JyZWN0LCBmZWVsIGZyZWUgdG8gcG9pbnQKb3V0IG15IG1pc3VuZGVyc3Rh bmRpbmdzLgoKTG9va2luZyBmb3J3YXJkIHRvIGhlYXJpbmcgZnJvbSB5b3UuCgpSZWdhcmRzLApB bmRyZXMKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFt ZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAoKCmFtZC1nZngg SW5mbyBQYWdlIC0gbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmxpc3RzLmZyZWVkZXNrdG9wLm9yZwpU byBzZWUgdGhlIGNvbGxlY3Rpb24gb2YgcHJpb3IgcG9zdGluZ3MgdG8gdGhlIGxpc3QsIHZpc2l0 IHRoZSBhbWQtZ2Z4IEFyY2hpdmVzLiBVc2luZyBhbWQtZ2Z4OiBUbyBwb3N0IGEgbWVzc2FnZSB0 byBhbGwgdGhlIGxpc3QgbWVtYmVycywgc2VuZCBlbWFpbCAuLi4KCgoKCgoKCgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxp c3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==