ITxhcmNoPgovICAgICAgICAgICAgICAgMCAgICAgICAgICAgMCAgICAgMCAgICAgMCAgICAgICA3OCAgICAgICAgYAoAAAABAAABGl9aTjE3cnVzdGNfZXJyb3JfY29kZXMxMWVycm9yX2NvZGVzMTFESUFHTk9TVElDUzE3aDdkYmFiNzBlNzdkNzE1ZTNFAAAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3NiAgICAgICAgYApydXN0Y19lcnJvcl9jb2Rlcy0xMzJlZjhkMmQ4Yjg3MDg2LnJ1c3RjX2Vycm9yX2NvZGVzLmFkMzFucnBzLWNndS4wLnJjZ3Uuby8KLzAgICAgICAgICAgICAgIDAgICAgICAgICAgIDAgICAgIDAgICAgIDY0NCAgICAgNTE1MTI4ICAgIGAKf0VMRgIBAQAAAAAAAAAAAAEAPgABAAAAAAAAAAAAAAAAAAAAAAAAADjrBgAAAAAAAAAAAEAAAAAAAEAAxAMBAEUwMDAxIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhpcyBlcnJvciBzdWdnZXN0cyB0aGF0IHRoZSBleHByZXNzaW9uIGFybSBjb3JyZXNwb25kaW5nIHRvIHRoZSBub3RlZCBwYXR0ZXJuCndpbGwgbmV2ZXIgYmUgcmVhY2hlZCBhcyBmb3IgYWxsIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZXhwcmVzc2lvbiBiZWluZwptYXRjaGVkLCBvbmUgb2YgdGhlIHByZWNlZGluZyBwYXR0ZXJucyB3aWxsIG1hdGNoLgoKVGhpcyBtZWFucyB0aGF0IHBlcmhhcHMgc29tZSBvZiB0aGUgcHJlY2VkaW5nIHBhdHRlcm5zIGFyZSB0b28gZ2VuZXJhbCwgdGhpcwpvbmUgaXMgdG9vIHNwZWNpZmljIG9yIHRoZSBvcmRlcmluZyBpcyBpbmNvcnJlY3QuCgpGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBgbWF0Y2hgIGJsb2NrIGhhcyB0b28gbWFueSBhcm1zOgoKYGBgCm1hdGNoIFNvbWUoMCkgewogICAgU29tZShiYXIpID0+IHsvKiAuLi4gKi99CiAgICB4ID0+IHsvKiAuLi4gKi99IC8vIFRoaXMgaGFuZGxlcyB0aGUgYE5vbmVgIGNhc2UKICAgIF8gPT4gey8qIC4uLiAqL30gLy8gQWxsIHBvc3NpYmxlIGNhc2VzIGhhdmUgYWxyZWFkeSBiZWVuIGhhbmRsZWQKfQpgYGAKCmBtYXRjaGAgYmxvY2tzIGhhdmUgdGhlaXIgcGF0dGVybnMgbWF0Y2hlZCBpbiBvcmRlciwgc28sIGZvciBleGFtcGxlLCBwdXR0aW5nCmEgd2lsZGNhcmQgYXJtIGFib3ZlIGEgbW9yZSBzcGVjaWZpYyBhcm0gd2lsbCBtYWtlIHRoZSBsYXR0ZXIgYXJtIGlycmVsZXZhbnQuCgpFbnN1cmUgdGhlIG9yZGVyaW5nIG9mIHRoZSBtYXRjaCBhcm0gaXMgY29ycmVjdCBhbmQgcmVtb3ZlIGFueSBzdXBlcmZsdW91cwphcm1zLgpFMDAwMiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgYW4gZW1wdHkgbWF0Y2ggZXhwcmVzc2lvbiBpcyBpbnZhbGlkIGJlY2F1c2UgdGhlIHR5cGUKaXQgaXMgbWF0Y2hpbmcgb24gaXMgbm9uLWVtcHR5ICh0aGVyZSBleGlzdCB2YWx1ZXMgb2YgdGhpcyB0eXBlKS4gSW4gc2FmZSBjb2RlCml0IGlzIGltcG9zc2libGUgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIGFuIGVtcHR5IHR5cGUsIHNvIGVtcHR5IG1hdGNoCmV4cHJlc3Npb25zIGFyZSBhbG1vc3QgbmV2ZXIgZGVzaXJlZC4gVGhpcyBlcnJvciBpcyB0eXBpY2FsbHkgZml4ZWQgYnkgYWRkaW5nCm9uZSBvciBtb3JlIGNhc2VzIHRvIHRoZSBtYXRjaCBleHByZXNzaW9uLgoKQW4gZXhhbXBsZSBvZiBhbiBlbXB0eSB0eXBlIGlzIGBlbnVtIEVtcHR5IHsgfWAuIFNvLCB0aGUgZm9sbG93aW5nIHdpbGwgd29yazoKCmBgYAplbnVtIEVtcHR5IHt9CgpmbiBmb28oeDogRW1wdHkpIHsKICAgIG1hdGNoIHggewogICAgICAgIC8vIGVtcHR5CiAgICB9Cn0KYGBgCgpIb3dldmVyLCB0aGlzIHdvbid0OgoKYGBgY29tcGlsZV9mYWlsCmZuIGZvbyh4OiBPcHRpb248U3RyaW5nPikgewogICAgbWF0Y2ggeCB7CiAgICAgICAgLy8gZW1wdHkKICAgIH0KfQpgYGAKRTAwMDRUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBjb21waWxlciBjYW5ub3QgZ3VhcmFudGVlIGEgbWF0Y2hpbmcgcGF0dGVybiBmb3IKb25lIG9yIG1vcmUgcG9zc2libGUgaW5wdXRzIHRvIGEgbWF0Y2ggZXhwcmVzc2lvbi4gR3VhcmFudGVlZCBtYXRjaGVzIGFyZQpyZXF1aXJlZCBpbiBvcmRlciB0byBhc3NpZ24gdmFsdWVzIHRvIG1hdGNoIGV4cHJlc3Npb25zLCBvciBhbHRlcm5hdGl2ZWx5LApkZXRlcm1pbmUgdGhlIGZsb3cgb2YgZXhlY3V0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAwNAplbnVtIFRlcm1pbmF0b3IgewogICAgSGFzdGFMYVZpc3RhQmFieSwKICAgIFRhbGtUb015SGFuZCwKfQoKbGV0IHggPSBUZXJtaW5hdG9yOjpIYXN0YUxhVmlzdGFCYWJ5OwoKbWF0Y2ggeCB7IC8vIGVycm9yOiBub24tZXhoYXVzdGl2ZSBwYXR0ZXJuczogYEhhc3RhTGFWaXN0YUJhYnlgIG5vdCBjb3ZlcmVkCiAgICBUZXJtaW5hdG9yOjpUYWxrVG9NeUhhbmQgPT4ge30KfQpgYGAKCklmIHlvdSBlbmNvdW50ZXIgdGhpcyBlcnJvciB5b3UgbXVzdCBhbHRlciB5b3VyIHBhdHRlcm5zIHNvIHRoYXQgZXZlcnkgcG9zc2libGUKdmFsdWUgb2YgdGhlIGlucHV0IHR5cGUgaXMgbWF0Y2hlZC4gRm9yIHR5cGVzIHdpdGggYSBzbWFsbCBudW1iZXIgb2YgdmFyaWFudHMKKGxpa2UgZW51bXMpIHlvdSBzaG91bGQgcHJvYmFibHkgY292ZXIgYWxsIGNhc2VzIGV4cGxpY2l0bHkuIEFsdGVybmF0aXZlbHksIHRoZQp1bmRlcnNjb3JlIGBfYCB3aWxkY2FyZCBwYXR0ZXJuIGNhbiBiZSBhZGRlZCBhZnRlciBhbGwgb3RoZXIgcGF0dGVybnMgdG8gbWF0Y2gKImFueXRoaW5nIGVsc2UiLiBFeGFtcGxlOgoKYGBgCmVudW0gVGVybWluYXRvciB7CiAgICBIYXN0YUxhVmlzdGFCYWJ5LAogICAgVGFsa1RvTXlIYW5kLAp9CgpsZXQgeCA9IFRlcm1pbmF0b3I6Okhhc3RhTGFWaXN0YUJhYnk7CgptYXRjaCB4IHsKICAgIFRlcm1pbmF0b3I6OlRhbGtUb015SGFuZCA9PiB7fQogICAgVGVybWluYXRvcjo6SGFzdGFMYVZpc3RhQmFieSA9PiB7fQp9CgovLyBvcjoKCm1hdGNoIHggewogICAgVGVybWluYXRvcjo6VGFsa1RvTXlIYW5kID0+IHt9CiAgICBfID0+IHt9Cn0KYGBgCkUwMDA1UGF0dGVybnMgdXNlZCB0byBiaW5kIG5hbWVzIG11c3QgYmUgaXJyZWZ1dGFibGUsIHRoYXQgaXMsIHRoZXkgbXVzdCBndWFyYW50ZWUKdGhhdCBhIG5hbWUgd2lsbCBiZSBleHRyYWN0ZWQgaW4gYWxsIGNhc2VzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAwNQpsZXQgeCA9IFNvbWUoMSk7CmxldCBTb21lKHkpID0geDsKLy8gZXJyb3I6IHJlZnV0YWJsZSBwYXR0ZXJuIGluIGxvY2FsIGJpbmRpbmc6IGBOb25lYCBub3QgY292ZXJlZApgYGAKCklmIHlvdSBlbmNvdW50ZXIgdGhpcyBlcnJvciB5b3UgcHJvYmFibHkgbmVlZCB0byB1c2UgYSBgbWF0Y2hgIG9yIGBpZiBsZXRgIHRvCmRlYWwgd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgZmFpbHVyZS4gRXhhbXBsZToKCmBgYApsZXQgeCA9IFNvbWUoMSk7CgptYXRjaCB4IHsKICAgIFNvbWUoeSkgPT4gewogICAgICAgIC8vIGRvIHNvbWV0aGluZwogICAgfSwKICAgIE5vbmUgPT4ge30KfQoKLy8gb3I6CgppZiBsZXQgU29tZSh5KSA9IHggewogICAgLy8gZG8gc29tZXRoaW5nCn0KYGBgCkUwMDA3VGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB0aGUgYmluZGluZ3MgaW4gYSBtYXRjaCBhcm0gd291bGQgcmVxdWlyZSBhIHZhbHVlIHRvCmJlIG1vdmVkIGludG8gbW9yZSB0aGFuIG9uZSBsb2NhdGlvbiwgdGh1cyB2aW9sYXRpbmcgdW5pcXVlIG93bmVyc2hpcC4gQ29kZQpsaWtlIHRoZSBmb2xsb3dpbmcgaXMgaW52YWxpZCBhcyBpdCByZXF1aXJlcyB0aGUgZW50aXJlIGBPcHRpb248U3RyaW5nPmAgdG8gYmUKbW92ZWQgaW50byBhIHZhcmlhYmxlIGNhbGxlZCBgb3Bfc3RyaW5nYCB3aGlsZSBzaW11bHRhbmVvdXNseSByZXF1aXJpbmcgdGhlCmlubmVyIGBTdHJpbmdgIHRvIGJlIG1vdmVkIGludG8gYSB2YXJpYWJsZSBjYWxsZWQgYHNgLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAwNwpsZXQgeCA9IFNvbWUoInMiLnRvX3N0cmluZygpKTsKCm1hdGNoIHggewogICAgb3Bfc3RyaW5nIEAgU29tZShzKSA9PiB7fSwgLy8gZXJyb3I6IGNhbm5vdCBiaW5kIGJ5LW1vdmUgd2l0aCBzdWItYmluZGluZ3MKICAgIE5vbmUgPT4ge30sCn0KYGBgCgpTZWUgYWxzbyB0aGUgZXJyb3IgRTAzMDMuCkUwMDA5IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKSW4gYSBwYXR0ZXJuLCBhbGwgdmFsdWVzIHRoYXQgZG9uJ3QgaW1wbGVtZW50IHRoZSBgQ29weWAgdHJhaXQgaGF2ZSB0byBiZSBib3VuZAp0aGUgc2FtZSB3YXkuIFRoZSBnb2FsIGhlcmUgaXMgdG8gYXZvaWQgYmluZGluZyBzaW11bHRhbmVvdXNseSBieS1tb3ZlIGFuZApieS1yZWYuCgpUaGlzIGxpbWl0YXRpb24gbWF5IGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBSdXN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKG1vdmVfcmVmX3BhdHRlcm4pXQoKc3RydWN0IFggeyB4OiAoKSwgfQoKbGV0IHggPSBTb21lKChYIHsgeDogKCkgfSwgWCB7IHg6ICgpIH0pKTsKbWF0Y2ggeCB7CiAgICBTb21lKCh5LCByZWYgeikpID0+IHt9LCAvLyBlcnJvcjogY2Fubm90IGJpbmQgYnktbW92ZSBhbmQgYnktcmVmIGluIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHNhbWUgcGF0dGVybgogICAgTm9uZSA9PiBwYW5pYyEoKQp9CmBgYAoKWW91IGhhdmUgdHdvIHNvbHV0aW9uczoKClNvbHV0aW9uICMxOiBCaW5kIHRoZSBwYXR0ZXJuJ3MgdmFsdWVzIHRoZSBzYW1lIHdheS4KCmBgYApzdHJ1Y3QgWCB7IHg6ICgpLCB9CgpsZXQgeCA9IFNvbWUoKFggeyB4OiAoKSB9LCBYIHsgeDogKCkgfSkpOwptYXRjaCB4IHsKICAgIFNvbWUoKHJlZiB5LCByZWYgeikpID0+IHt9LAogICAgLy8gb3IgU29tZSgoeSwgeikpID0+IHt9CiAgICBOb25lID0+IHBhbmljISgpCn0KYGBgCgpTb2x1dGlvbiAjMjogSW1wbGVtZW50IHRoZSBgQ29weWAgdHJhaXQgZm9yIHRoZSBgWGAgc3RydWN0dXJlLgoKSG93ZXZlciwgcGxlYXNlIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBmaXJzdCBzb2x1dGlvbiBzaG91bGQgYmUgcHJlZmVycmVkLgoKYGBgCiNbZGVyaXZlKENsb25lLCBDb3B5KV0Kc3RydWN0IFggeyB4OiAoKSwgfQoKbGV0IHggPSBTb21lKChYIHsgeDogKCkgfSwgWCB7IHg6ICgpIH0pKTsKbWF0Y2ggeCB7CiAgICBTb21lKCh5LCByZWYgeikpID0+IHt9LAogICAgTm9uZSA9PiBwYW5pYyEoKQp9CmBgYApFMDAxMFRoZSB2YWx1ZSBvZiBzdGF0aWNzIGFuZCBjb25zdGFudHMgbXVzdCBiZSBrbm93biBhdCBjb21waWxlIHRpbWUsIGFuZCB0aGV5IGxpdmUKZm9yIHRoZSBlbnRpcmUgbGlmZXRpbWUgb2YgYSBwcm9ncmFtLiBDcmVhdGluZyBhIGJveGVkIHZhbHVlIGFsbG9jYXRlcyBtZW1vcnkgb24KdGhlIGhlYXAgYXQgcnVudGltZSwgYW5kIHRoZXJlZm9yZSBjYW5ub3QgYmUgZG9uZSBhdCBjb21waWxlIHRpbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDEwCiMhW2ZlYXR1cmUoYm94X3N5bnRheCldCgpjb25zdCBDT04gOiBCb3g8aTMyPiA9IGJveCAwOwpgYGAKRTAwMTNTdGF0aWMgYW5kIGNvbnN0IHZhcmlhYmxlcyBjYW4gcmVmZXIgdG8gb3RoZXIgY29uc3QgdmFyaWFibGVzLiBCdXQgYSBjb25zdAp2YXJpYWJsZSBjYW5ub3QgcmVmZXIgdG8gYSBzdGF0aWMgdmFyaWFibGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDEzCnN0YXRpYyBYOiBpMzIgPSA0MjsKY29uc3QgWTogaTMyID0gWDsKYGBgCgpJbiB0aGlzIGV4YW1wbGUsIGBZYCBjYW5ub3QgcmVmZXIgdG8gYFhgIGhlcmUuIFRvIGZpeCB0aGlzLCB0aGUgdmFsdWUgY2FuIGJlCmV4dHJhY3RlZCBhcyBhIGNvbnN0IGFuZCB0aGVuIHVzZWQ6CgpgYGAKY29uc3QgQTogaTMyID0gNDI7CnN0YXRpYyBYOiBpMzIgPSBBOwpjb25zdCBZOiBpMzIgPSBBOwpgYGAKRTAwMTQjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpDb25zdGFudHMgY2FuIG9ubHkgYmUgaW5pdGlhbGl6ZWQgYnkgYSBjb25zdGFudCB2YWx1ZSBvciwgaW4gYSBmdXR1cmUKdmVyc2lvbiBvZiBSdXN0LCBhIGNhbGwgdG8gYSBjb25zdCBmdW5jdGlvbi4gVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhlIHVzZQpvZiBhIHBhdGggKGxpa2UgYTo6Yiwgb3IgeCkgZGVub3Rpbmcgc29tZXRoaW5nIG90aGVyIHRoYW4gb25lIG9mIHRoZXNlCmFsbG93ZWQgaXRlbXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgCmNvbnN0IEZPTzogaTMyID0geyBsZXQgeCA9IDA7IHggfTsgLy8gJ3gnIGlzbid0IGEgY29uc3RhbnQgbm9yIGEgZnVuY3Rpb24hCmBgYAoKVG8gYXZvaWQgaXQsIHlvdSBoYXZlIHRvIHJlcGxhY2UgdGhlIG5vbi1jb25zdGFudCB2YWx1ZToKCmBgYApjb25zdCBGT086IGkzMiA9IHsgY29uc3QgWCA6IGkzMiA9IDA7IFggfTsKLy8gb3IgZXZlbjoKY29uc3QgRk9PMjogaTMyID0geyAwIH07IC8vIGJ1dCBicmFja2V0cyBhcmUgdXNlbGVzcyBoZXJlCmBgYApFMDAxNUEgY29uc3RhbnQgaXRlbSB3YXMgaW5pdGlhbGl6ZWQgd2l0aCBzb21ldGhpbmcgdGhhdCBpcyBub3QgYSBjb25zdGFudApleHByZXNzaW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAxNQpmbiBjcmVhdGVfc29tZSgpIC0+IE9wdGlvbjx1OD4gewogICAgU29tZSgxKQp9Cgpjb25zdCBGT086IE9wdGlvbjx1OD4gPSBjcmVhdGVfc29tZSgpOyAvLyBlcnJvciEKYGBgCgpUaGUgb25seSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgY2FsbGVkIGluIHN0YXRpYyBvciBjb25zdGFudCBleHByZXNzaW9ucyBhcmUKYGNvbnN0YCBmdW5jdGlvbnMsIGFuZCBzdHJ1Y3QvZW51bSBjb25zdHJ1Y3RvcnMuCgpUbyBmaXggdGhpcyBlcnJvciwgeW91IGNhbiBkZWNsYXJlIGBjcmVhdGVfc29tZWAgYXMgYSBjb25zdGFudCBmdW5jdGlvbjoKCmBgYApjb25zdCBmbiBjcmVhdGVfc29tZSgpIC0+IE9wdGlvbjx1OD4geyAvLyBkZWNsYXJlZCBhcyBhIGNvbnN0IGZ1bmN0aW9uCiAgICBTb21lKDEpCn0KCmNvbnN0IEZPTzogT3B0aW9uPHU4PiA9IGNyZWF0ZV9zb21lKCk7IC8vIG9rIQoKLy8gVGhlc2UgYXJlIGFsc28gd29ya2luZzoKc3RydWN0IEJhciB7CiAgICB4OiB1OCwKfQoKY29uc3QgT1RIRVJfRk9POiBPcHRpb248dTg+ID0gU29tZSgxKTsKY29uc3QgQkFSOiBCYXIgPSBCYXIge3g6IDF9OwpgYGAKRTAwMTlBIGZ1bmN0aW9uIGNhbGwgaXNuJ3QgYWxsb3dlZCBpbiB0aGUgY29uc3QncyBpbml0aWFsaXphdGlvbiBleHByZXNzaW9uCmJlY2F1c2UgdGhlIGV4cHJlc3Npb24ncyB2YWx1ZSBtdXN0IGJlIGtub3duIGF0IGNvbXBpbGUtdGltZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMTkKIyFbZmVhdHVyZShib3hfc3ludGF4KV0KCmZuIG1haW4oKSB7CiAgICBzdHJ1Y3QgTXlPd25lZDsKCiAgICBzdGF0aWMgU1RBVElDMTE6IEJveDxNeU93bmVkPiA9IGJveCBNeU93bmVkOyAvLyBlcnJvciEKfQpgYGAKClJlbWVtYmVyOiB5b3UgY2FuJ3QgdXNlIGEgZnVuY3Rpb24gY2FsbCBpbnNpZGUgYSBjb25zdCdzIGluaXRpYWxpemF0aW9uCmV4cHJlc3Npb24hIEhvd2V2ZXIsIHlvdSBjYW4gdG90YWxseSB1c2UgaXQgYW55d2hlcmUgZWxzZToKCmBgYAplbnVtIFRlc3QgewogICAgVjEKfQoKaW1wbCBUZXN0IHsKICAgIGZuIGZ1bmMoJnNlbGYpIC0+IGkzMiB7CiAgICAgICAgMTIKICAgIH0KfQoKZm4gbWFpbigpIHsKICAgIGNvbnN0IEZPTzogVGVzdCA9IFRlc3Q6OlYxOwoKICAgIEZPTy5mdW5jKCk7IC8vIGhlcmUgaXMgZ29vZAogICAgbGV0IHggPSBGT08uZnVuYygpOyAvLyBvciBldmVuIGhlcmUhCn0KYGBgCkUwMDIzQSBwYXR0ZXJuIGF0dGVtcHRlZCB0byBleHRyYWN0IGFuIGluY29ycmVjdCBudW1iZXIgb2YgZmllbGRzIGZyb20gYSB2YXJpYW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAyMwplbnVtIEZydWl0IHsKICAgIEFwcGxlKFN0cmluZywgU3RyaW5nKSwKICAgIFBlYXIodTMyKSwKfQoKbGV0IHggPSBGcnVpdDo6QXBwbGUoU3RyaW5nOjpuZXcoKSwgU3RyaW5nOjpuZXcoKSk7CgptYXRjaCB4IHsKICAgIEZydWl0OjpBcHBsZShhKSA9PiB7fSwgLy8gZXJyb3IhCiAgICBfID0+IHt9Cn0KYGBgCgpBIHBhdHRlcm4gdXNlZCB0byBtYXRjaCBhZ2FpbnN0IGFuIGVudW0gdmFyaWFudCBtdXN0IHByb3ZpZGUgYSBzdWItcGF0dGVybiBmb3IKZWFjaCBmaWVsZCBvZiB0aGUgZW51bSB2YXJpYW50LgoKSGVyZSB0aGUgYEFwcGxlYCB2YXJpYW50IGhhcyB0d28gZmllbGRzLCBhbmQgc2hvdWxkIGJlIG1hdGNoZWQgYWdhaW5zdCBsaWtlIHNvOgoKYGBgCmVudW0gRnJ1aXQgewogICAgQXBwbGUoU3RyaW5nLCBTdHJpbmcpLAogICAgUGVhcih1MzIpLAp9CgpsZXQgeCA9IEZydWl0OjpBcHBsZShTdHJpbmc6Om5ldygpLCBTdHJpbmc6Om5ldygpKTsKCi8vIENvcnJlY3QuCm1hdGNoIHggewogICAgRnJ1aXQ6OkFwcGxlKGEsIGIpID0+IHt9LAogICAgXyA9PiB7fQp9CmBgYAoKTWF0Y2hpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mIGZpZWxkcyBoYXMgbm8gc2Vuc2libGUgaW50ZXJwcmV0YXRpb246CgpgYGBjb21waWxlX2ZhaWwsRTAwMjMKZW51bSBGcnVpdCB7CiAgICBBcHBsZShTdHJpbmcsIFN0cmluZyksCiAgICBQZWFyKHUzMiksCn0KCmxldCB4ID0gRnJ1aXQ6OkFwcGxlKFN0cmluZzo6bmV3KCksIFN0cmluZzo6bmV3KCkpOwoKLy8gSW5jb3JyZWN0LgptYXRjaCB4IHsKICAgIEZydWl0OjpBcHBsZShhKSA9PiB7fSwKICAgIEZydWl0OjpBcHBsZShhLCBiLCBjKSA9PiB7fSwKfQpgYGAKCkNoZWNrIGhvdyBtYW55IGZpZWxkcyB0aGUgZW51bSB3YXMgZGVjbGFyZWQgd2l0aCBhbmQgZW5zdXJlIHRoYXQgeW91ciBwYXR0ZXJuCnVzZXMgdGhlIHNhbWUgbnVtYmVyLgpFMDAyNUVhY2ggZmllbGQgb2YgYSBzdHJ1Y3QgY2FuIG9ubHkgYmUgYm91bmQgb25jZSBpbiBhIHBhdHRlcm4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDI1CnN0cnVjdCBGb28gewogICAgYTogdTgsCiAgICBiOiB1OCwKfQoKZm4gbWFpbigpewogICAgbGV0IHggPSBGb28geyBhOjEsIGI6MiB9OwoKICAgIGxldCBGb28geyBhOiB4LCBhOiB5IH0gPSB4OwogICAgLy8gZXJyb3I6IGZpZWxkIGBhYCBib3VuZCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgcGF0dGVybgp9CmBgYAoKRWFjaCBvY2N1cnJlbmNlIG9mIGEgZmllbGQgbmFtZSBiaW5kcyB0aGUgdmFsdWUgb2YgdGhhdCBmaWVsZCwgc28gdG8gZml4IHRoaXMKZXJyb3IgeW91IHdpbGwgaGF2ZSB0byByZW1vdmUgb3IgYWx0ZXIgdGhlIGR1cGxpY2F0ZSB1c2VzIG9mIHRoZSBmaWVsZCBuYW1lLgpQZXJoYXBzIHlvdSBtaXNzcGVsbGVkIGFub3RoZXIgZmllbGQgbmFtZT8gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIGE6IHU4LAogICAgYjogdTgsCn0KCmZuIG1haW4oKXsKICAgIGxldCB4ID0gRm9vIHsgYToxLCBiOjIgfTsKCiAgICBsZXQgRm9vIHsgYTogeCwgYjogeSB9ID0geDsgLy8gb2shCn0KYGBgCkUwMDI2QSBzdHJ1Y3QgcGF0dGVybiBhdHRlbXB0ZWQgdG8gZXh0cmFjdCBhIG5vbi1leGlzdGVudCBmaWVsZCBmcm9tIGEgc3RydWN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAyNgpzdHJ1Y3QgVGhpbmcgewogICAgeDogdTMyLAogICAgeTogdTMyLAp9CgpsZXQgdGhpbmcgPSBUaGluZyB7IHg6IDAsIHk6IDAgfTsKCm1hdGNoIHRoaW5nIHsKICAgIFRoaW5nIHsgeCwgeiB9ID0+IHt9IC8vIGVycm9yOiBgVGhpbmc6OnpgIGZpZWxkIGRvZXNuJ3QgZXhpc3QKfQpgYGAKCklmIHlvdSBhcmUgdXNpbmcgc2hvcnRoYW5kIGZpZWxkIHBhdHRlcm5zIGJ1dCB3YW50IHRvIHJlZmVyIHRvIHRoZSBzdHJ1Y3QgZmllbGQKYnkgYSBkaWZmZXJlbnQgbmFtZSwgeW91IHNob3VsZCByZW5hbWUgaXQgZXhwbGljaXRseS4gU3RydWN0IGZpZWxkcyBhcmUKaWRlbnRpZmllZCBieSB0aGUgbmFtZSB1c2VkIGJlZm9yZSB0aGUgY29sb24gYDpgIHNvIHN0cnVjdCBwYXR0ZXJucyBzaG91bGQKcmVzZW1ibGUgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBzdHJ1Y3QgdHlwZSBiZWluZyBtYXRjaGVkLgoKYGBgCnN0cnVjdCBUaGluZyB7CiAgICB4OiB1MzIsCiAgICB5OiB1MzIsCn0KCmxldCB0aGluZyA9IFRoaW5nIHsgeDogMCwgeTogMCB9OwoKbWF0Y2ggdGhpbmcgewogICAgVGhpbmcgeyB4LCB5OiB6IH0gPT4ge30gLy8gd2UgcmVuYW1lZCBgeWAgdG8gYHpgCn0KYGBgCkUwMDI3QSBwYXR0ZXJuIGZvciBhIHN0cnVjdCBmYWlscyB0byBzcGVjaWZ5IGEgc3ViLXBhdHRlcm4gZm9yIGV2ZXJ5IG9uZSBvZiB0aGUKc3RydWN0J3MgZmllbGRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAyNwpzdHJ1Y3QgRG9nIHsKICAgIG5hbWU6IFN0cmluZywKICAgIGFnZTogdTMyLAp9CgpsZXQgZCA9IERvZyB7IG5hbWU6ICJSdXN0eSIudG9fc3RyaW5nKCksIGFnZTogOCB9OwoKLy8gVGhpcyBpcyBpbmNvcnJlY3QuCm1hdGNoIGQgewogICAgRG9nIHsgYWdlOiB4IH0gPT4ge30KfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBlbnN1cmUgdGhhdCBlYWNoIGZpZWxkIGZyb20gdGhlIHN0cnVjdCdzIGRlZmluaXRpb24gaXMKbWVudGlvbmVkIGluIHRoZSBwYXR0ZXJuLCBvciB1c2UgYC4uYCB0byBpZ25vcmUgdW53YW50ZWQgZmllbGRzLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBEb2cgewogICAgbmFtZTogU3RyaW5nLAogICAgYWdlOiB1MzIsCn0KCmxldCBkID0gRG9nIHsgbmFtZTogIlJ1c3R5Ii50b19zdHJpbmcoKSwgYWdlOiA4IH07CgptYXRjaCBkIHsKICAgIERvZyB7IG5hbWU6IHJlZiBuLCBhZ2U6IHggfSA9PiB7fQp9CgovLyBUaGlzIGlzIGFsc28gY29ycmVjdCAoaWdub3JlIHVudXNlZCBmaWVsZHMpLgptYXRjaCBkIHsKICAgIERvZyB7IGFnZTogeCwgLi4gfSA9PiB7fQp9CmBgYApFMDAyOVNvbWV0aGluZyBvdGhlciB0aGFuIG51bWJlcnMgYW5kIGNoYXJhY3RlcnMgaGFzIGJlZW4gdXNlZCBmb3IgYSByYW5nZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMjkKbGV0IHN0cmluZyA9ICJzYWx1dGF0aW9ucyAhIjsKCi8vIFRoZSBvcmRlcmluZyByZWxhdGlvbiBmb3Igc3RyaW5ncyBjYW5ub3QgYmUgZXZhbHVhdGVkIGF0IGNvbXBpbGUgdGltZSwKLy8gc28gdGhpcyBkb2Vzbid0IHdvcms6Cm1hdGNoIHN0cmluZyB7CiAgICAiaGVsbG8iIC4uPSAid29ybGQiID0+IHt9CiAgICBfID0+IHt9Cn0KCi8vIFRoaXMgaXMgYSBtb3JlIGdlbmVyYWwgdmVyc2lvbiwgdXNpbmcgYSBndWFyZDoKbWF0Y2ggc3RyaW5nIHsKICAgIHMgaWYgcyA+PSAiaGVsbG8iICYmIHMgPD0gIndvcmxkIiA9PiB7fQogICAgXyA9PiB7fQp9CmBgYAoKSW4gYSBtYXRjaCBleHByZXNzaW9uLCBvbmx5IG51bWJlcnMgYW5kIGNoYXJhY3RlcnMgY2FuIGJlIG1hdGNoZWQgYWdhaW5zdCBhCnJhbmdlLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGNoZWNrcyB0aGF0IHRoZSByYW5nZSBpcyBub24tZW1wdHkgYXQKY29tcGlsZS10aW1lLCBhbmQgaXMgdW5hYmxlIHRvIGV2YWx1YXRlIGFyYml0cmFyeSBjb21wYXJpc29uIGZ1bmN0aW9ucy4gSWYgeW91CndhbnQgdG8gY2FwdHVyZSB2YWx1ZXMgb2YgYW4gb3JkZXJhYmxlIHR5cGUgYmV0d2VlbiB0d28gZW5kLXBvaW50cywgeW91IGNhbiB1c2UKYSBndWFyZC4KRTAwMzBXaGVuIG1hdGNoaW5nIGFnYWluc3QgYSByYW5nZSwgdGhlIGNvbXBpbGVyIHZlcmlmaWVzIHRoYXQgdGhlIHJhbmdlIGlzCm5vbi1lbXB0eS4gUmFuZ2UgcGF0dGVybnMgaW5jbHVkZSBib3RoIGVuZC1wb2ludHMsIHNvIHRoaXMgaXMgZXF1aXZhbGVudCB0bwpyZXF1aXJpbmcgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGVuZCBvZiB0aGUKcmFuZ2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDMwCm1hdGNoIDV1MzIgewogICAgLy8gVGhpcyByYW5nZSBpcyBvaywgYWxiZWl0IHBvaW50bGVzcy4KICAgIDEgLi49IDEgPT4ge30KICAgIC8vIFRoaXMgcmFuZ2UgaXMgZW1wdHksIGFuZCB0aGUgY29tcGlsZXIgY2FuIHRlbGwuCiAgICAxMDAwIC4uPSA1ID0+IHt9Cn0KYGBgCkUwMDMzQSB0cmFpdCB0eXBlIGhhcyBiZWVuIGRlcmVmZXJlbmNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMzMKIyB0cmFpdCBTb21lVHJhaXQgeyBmbiBtZXRob2Rfb25lKCZzZWxmKXt9IGZuIG1ldGhvZF90d28oJnNlbGYpe30gfQojIGltcGw8VD4gU29tZVRyYWl0IGZvciBUIHt9CmxldCB0cmFpdF9vYmo6ICZTb21lVHJhaXQgPSAmInNvbWVfdmFsdWUiOwoKLy8gVGhpcyB0cmllcyB0byBpbXBsaWNpdGx5IGRlcmVmZXJlbmNlIHRvIGNyZWF0ZSBhbiB1bnNpemVkIGxvY2FsIHZhcmlhYmxlLgpsZXQgJmludmFsaWQgPSB0cmFpdF9vYmo7CgovLyBZb3UgY2FuIGNhbGwgbWV0aG9kcyB3aXRob3V0IGJpbmRpbmcgdG8gdGhlIHZhbHVlIGJlaW5nIHBvaW50ZWQgYXQuCnRyYWl0X29iai5tZXRob2Rfb25lKCk7CnRyYWl0X29iai5tZXRob2RfdHdvKCk7CmBgYAoKQSBwb2ludGVyIHRvIGEgdHJhaXQgdHlwZSBjYW5ub3QgYmUgaW1wbGljaXRseSBkZXJlZmVyZW5jZWQgYnkgYSBwYXR0ZXJuLiBFdmVyeQp0cmFpdCBkZWZpbmVzIGEgdHlwZSwgYnV0IGJlY2F1c2UgdGhlIHNpemUgb2YgdHJhaXQgaW1wbGVtZW50ZXJzIGlzbid0IGZpeGVkLAp0aGlzIHR5cGUgaGFzIG5vIGNvbXBpbGUtdGltZSBzaXplLiBUaGVyZWZvcmUsIGFsbCBhY2Nlc3NlcyB0byB0cmFpdCB0eXBlcyBtdXN0CmJlIHRocm91Z2ggcG9pbnRlcnMuIElmIHlvdSBlbmNvdW50ZXIgdGhpcyBlcnJvciB5b3Ugc2hvdWxkIHRyeSB0byBhdm9pZApkZXJlZmVyZW5jaW5nIHRoZSBwb2ludGVyLgoKWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdHJhaXQgb2JqZWN0cyBpbiB0aGUgW1RyYWl0IE9iamVjdHNdIHNlY3Rpb24gb2YgdGhlClJlZmVyZW5jZS4KCltUcmFpdCBPYmplY3RzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvdHlwZXMuaHRtbCN0cmFpdC1vYmplY3RzCkUwMDM0VGhlIGNvbXBpbGVyIGRvZXNuJ3Qga25vdyB3aGF0IG1ldGhvZCB0byBjYWxsIGJlY2F1c2UgbW9yZSB0aGFuIG9uZSBtZXRob2QKaGFzIHRoZSBzYW1lIHByb3RvdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMzQKc3RydWN0IFRlc3Q7Cgp0cmFpdCBUcmFpdDEgewogICAgZm4gZm9vKCk7Cn0KCnRyYWl0IFRyYWl0MiB7CiAgICBmbiBmb28oKTsKfQoKaW1wbCBUcmFpdDEgZm9yIFRlc3QgeyBmbiBmb28oKSB7fSB9CmltcGwgVHJhaXQyIGZvciBUZXN0IHsgZm4gZm9vKCkge30gfQoKZm4gbWFpbigpIHsKICAgIFRlc3Q6OmZvbygpIC8vIGVycm9yLCB3aGljaCBmb28oKSB0byBjYWxsPwp9CmBgYAoKVG8gYXZvaWQgdGhpcyBlcnJvciwgeW91IGhhdmUgdG8ga2VlcCBvbmx5IG9uZSBvZiB0aGVtIGFuZCByZW1vdmUgdGhlIG90aGVycy4KU28gbGV0J3MgdGFrZSBvdXIgZXhhbXBsZSBhbmQgZml4IGl0OgoKYGBgCnN0cnVjdCBUZXN0OwoKdHJhaXQgVHJhaXQxIHsKICAgIGZuIGZvbygpOwp9CgppbXBsIFRyYWl0MSBmb3IgVGVzdCB7IGZuIGZvbygpIHt9IH0KCmZuIG1haW4oKSB7CiAgICBUZXN0Ojpmb28oKSAvLyBhbmQgbm93IHRoYXQncyBnb29kIQp9CmBgYAoKSG93ZXZlciwgYSBiZXR0ZXIgc29sdXRpb24gd291bGQgYmUgdXNpbmcgZnVsbHkgZXhwbGljaXQgbmFtaW5nIG9mIHR5cGUgYW5kCnRyYWl0OgoKYGBgCnN0cnVjdCBUZXN0OwoKdHJhaXQgVHJhaXQxIHsKICAgIGZuIGZvbygpOwp9Cgp0cmFpdCBUcmFpdDIgewogICAgZm4gZm9vKCk7Cn0KCmltcGwgVHJhaXQxIGZvciBUZXN0IHsgZm4gZm9vKCkge30gfQppbXBsIFRyYWl0MiBmb3IgVGVzdCB7IGZuIGZvbygpIHt9IH0KCmZuIG1haW4oKSB7CiAgICA8VGVzdCBhcyBUcmFpdDE+Ojpmb28oKQp9CmBgYAoKT25lIGxhc3QgZXhhbXBsZToKCmBgYAp0cmFpdCBGIHsKICAgIGZuIG0oJnNlbGYpOwp9Cgp0cmFpdCBHIHsKICAgIGZuIG0oJnNlbGYpOwp9CgpzdHJ1Y3QgWDsKCmltcGwgRiBmb3IgWCB7IGZuIG0oJnNlbGYpIHsgcHJpbnRsbiEoIkkgYW0gRiIpOyB9IH0KaW1wbCBHIGZvciBYIHsgZm4gbSgmc2VsZikgeyBwcmludGxuISgiSSBhbSBHIik7IH0gfQoKZm4gbWFpbigpIHsKICAgIGxldCBmID0gWDsKCiAgICBGOjptKCZmKTsgLy8gaXQgZGlzcGxheXMgIkkgYW0gRiIKICAgIEc6Om0oJmYpOyAvLyBpdCBkaXNwbGF5cyAiSSBhbSBHIgp9CmBgYApFMDAzOFRyYWl0IG9iamVjdHMgbGlrZSBgQm94PFRyYWl0PmAgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2hlbiBjZXJ0YWluCnJlcXVpcmVtZW50cyBhcmUgc2F0aXNmaWVkIGJ5IHRoZSB0cmFpdCBpbiBxdWVzdGlvbi4KClRyYWl0IG9iamVjdHMgYXJlIGEgZm9ybSBvZiBkeW5hbWljIGRpc3BhdGNoIGFuZCB1c2UgYSBkeW5hbWljYWxseSBzaXplZCB0eXBlCmZvciB0aGUgaW5uZXIgdHlwZS4gU28sIGZvciBhIGdpdmVuIHRyYWl0IGBUcmFpdGAsIHdoZW4gYFRyYWl0YCBpcyB0cmVhdGVkIGFzIGEKdHlwZSwgYXMgaW4gYEJveDxUcmFpdD5gLCB0aGUgaW5uZXIgdHlwZSBpcyAndW5zaXplZCcuIEluIHN1Y2ggY2FzZXMgdGhlIGJveGVkCnBvaW50ZXIgaXMgYSAnZmF0IHBvaW50ZXInIHRoYXQgY29udGFpbnMgYW4gZXh0cmEgcG9pbnRlciB0byBhIHRhYmxlIG9mIG1ldGhvZHMKKGFtb25nIG90aGVyIHRoaW5ncykgZm9yIGR5bmFtaWMgZGlzcGF0Y2guIFRoaXMgZGVzaWduIG1hbmRhdGVzIHNvbWUKcmVzdHJpY3Rpb25zIG9uIHRoZSB0eXBlcyBvZiB0cmFpdHMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGluIHRyYWl0Cm9iamVjdHMsIHdoaWNoIGFyZSBjb2xsZWN0aXZlbHkgdGVybWVkIGFzICdvYmplY3Qgc2FmZXR5JyBydWxlcy4KCkF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgdHJhaXQgb2JqZWN0IGZvciBhIG5vbiBvYmplY3Qtc2FmZSB0cmFpdCB3aWxsIHRyaWdnZXIKdGhpcyBlcnJvci4KClRoZXJlIGFyZSB2YXJpb3VzIHJ1bGVzOgoKIyMjIFRoZSB0cmFpdCBjYW5ub3QgcmVxdWlyZSBgU2VsZjogU2l6ZWRgCgpXaGVuIGBUcmFpdGAgaXMgdHJlYXRlZCBhcyBhIHR5cGUsIHRoZSB0eXBlIGRvZXMgbm90IGltcGxlbWVudCB0aGUgc3BlY2lhbApgU2l6ZWRgIHRyYWl0LCBiZWNhdXNlIHRoZSB0eXBlIGRvZXMgbm90IGhhdmUgYSBrbm93biBzaXplIGF0IGNvbXBpbGUgdGltZSBhbmQKY2FuIG9ubHkgYmUgYWNjZXNzZWQgYmVoaW5kIGEgcG9pbnRlci4gVGh1cywgaWYgd2UgaGF2ZSBhIHRyYWl0IGxpa2UgdGhlCmZvbGxvd2luZzoKCmBgYAp0cmFpdCBGb28gd2hlcmUgU2VsZjogU2l6ZWQgewoKfQpgYGAKCldlIGNhbm5vdCBjcmVhdGUgYW4gb2JqZWN0IG9mIHR5cGUgYEJveDxGb28+YCBvciBgJkZvb2Agc2luY2UgaW4gdGhpcyBjYXNlCmBTZWxmYCB3b3VsZCBub3QgYmUgYFNpemVkYC4KCkdlbmVyYWxseSwgYFNlbGY6IFNpemVkYCBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRyYWl0IHNob3VsZCBub3QgYmUgdXNlZAphcyBhIHRyYWl0IG9iamVjdC4gSWYgdGhlIHRyYWl0IGNvbWVzIGZyb20geW91ciBvd24gY3JhdGUsIGNvbnNpZGVyIHJlbW92aW5nCnRoaXMgcmVzdHJpY3Rpb24uCgojIyMgTWV0aG9kIHJlZmVyZW5jZXMgdGhlIGBTZWxmYCB0eXBlIGluIGl0cyBwYXJhbWV0ZXJzIG9yIHJldHVybiB0eXBlCgpUaGlzIGhhcHBlbnMgd2hlbiBhIHRyYWl0IGhhcyBhIG1ldGhvZCBsaWtlIHRoZSBmb2xsb3dpbmc6CgpgYGAKdHJhaXQgVHJhaXQgewogICAgZm4gZm9vKCZzZWxmKSAtPiBTZWxmOwp9CgppbXBsIFRyYWl0IGZvciBTdHJpbmcgewogICAgZm4gZm9vKCZzZWxmKSAtPiBTZWxmIHsKICAgICAgICAiaGkiLnRvX293bmVkKCkKICAgIH0KfQoKaW1wbCBUcmFpdCBmb3IgdTggewogICAgZm4gZm9vKCZzZWxmKSAtPiBTZWxmIHsKICAgICAgICAxCiAgICB9Cn0KYGBgCgooTm90ZSB0aGF0IGAmc2VsZmAgYW5kIGAmbXV0IHNlbGZgIGFyZSBva2F5LCBpdCdzIGFkZGl0aW9uYWwgYFNlbGZgIHR5cGVzIHdoaWNoCmNhdXNlIHRoaXMgcHJvYmxlbS4pCgpJbiBzdWNoIGEgY2FzZSwgdGhlIGNvbXBpbGVyIGNhbm5vdCBwcmVkaWN0IHRoZSByZXR1cm4gdHlwZSBvZiBgZm9vKClgIGluIGEKc2l0dWF0aW9uIGxpa2UgdGhlIGZvbGxvd2luZzoKCmBgYGNvbXBpbGVfZmFpbCxFMDAzOAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpIC0+IFNlbGY7Cn0KCmZuIGNhbGxfZm9vKHg6IEJveDxUcmFpdD4pIHsKICAgIGxldCB5ID0geC5mb28oKTsgLy8gV2hhdCB0eXBlIGlzIHk/CiAgICAvLyAuLi4KfQpgYGAKCklmIG9ubHkgc29tZSBtZXRob2RzIGFyZW4ndCBvYmplY3Qtc2FmZSwgeW91IGNhbiBhZGQgYSBgd2hlcmUgU2VsZjogU2l6ZWRgIGJvdW5kCm9uIHRoZW0gdG8gbWFyayB0aGVtIGFzIGV4cGxpY2l0bHkgdW5hdmFpbGFibGUgdG8gdHJhaXQgb2JqZWN0cy4gVGhlCmZ1bmN0aW9uYWxpdHkgd2lsbCBzdGlsbCBiZSBhdmFpbGFibGUgdG8gYWxsIG90aGVyIGltcGxlbWVudGVycywgaW5jbHVkaW5nCmBCb3g8VHJhaXQ+YCB3aGljaCBpcyBpdHNlbGYgc2l6ZWQgKGFzc3VtaW5nIHlvdSBgaW1wbCBUcmFpdCBmb3IgQm94PFRyYWl0PmApLgoKYGBgCnRyYWl0IFRyYWl0IHsKICAgIGZuIGZvbygmc2VsZikgLT4gU2VsZiB3aGVyZSBTZWxmOiBTaXplZDsKICAgIC8vIG1vcmUgZnVuY3Rpb25zCn0KYGBgCgpOb3csIGBmb28oKWAgY2FuIG5vIGxvbmdlciBiZSBjYWxsZWQgb24gYSB0cmFpdCBvYmplY3QsIGJ1dCB5b3Ugd2lsbCBub3cgYmUKYWxsb3dlZCB0byBtYWtlIGEgdHJhaXQgb2JqZWN0LCBhbmQgdGhhdCB3aWxsIGJlIGFibGUgdG8gY2FsbCBhbnkgb2JqZWN0LXNhZmUKbWV0aG9kcy4gV2l0aCBzdWNoIGEgYm91bmQsIG9uZSBjYW4gc3RpbGwgY2FsbCBgZm9vKClgIG9uIHR5cGVzIGltcGxlbWVudGluZwp0aGF0IHRyYWl0IHRoYXQgYXJlbid0IGJlaGluZCB0cmFpdCBvYmplY3RzLgoKIyMjIE1ldGhvZCBoYXMgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMKCkFzIG1lbnRpb25lZCBiZWZvcmUsIHRyYWl0IG9iamVjdHMgY29udGFpbiBwb2ludGVycyB0byBtZXRob2QgdGFibGVzLiBTbywgaWYgd2UKaGF2ZToKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpOwp9CgppbXBsIFRyYWl0IGZvciBTdHJpbmcgewogICAgZm4gZm9vKCZzZWxmKSB7CiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gMQogICAgfQp9CgppbXBsIFRyYWl0IGZvciB1OCB7CiAgICBmbiBmb28oJnNlbGYpIHsKICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiAyCiAgICB9Cn0KLy8gLi4uCmBgYAoKQXQgY29tcGlsZSB0aW1lIGVhY2ggaW1wbGVtZW50YXRpb24gb2YgYFRyYWl0YCB3aWxsIHByb2R1Y2UgYSB0YWJsZSBjb250YWluaW5nCnRoZSB2YXJpb3VzIG1ldGhvZHMgKGFuZCBvdGhlciBpdGVtcykgcmVsYXRlZCB0byB0aGUgaW1wbGVtZW50YXRpb24uCgpUaGlzIHdvcmtzIGZpbmUsIGJ1dCB3aGVuIHRoZSBtZXRob2QgZ2FpbnMgZ2VuZXJpYyBwYXJhbWV0ZXJzLCB3ZSBjYW4gaGF2ZSBhCnByb2JsZW0uCgpVc3VhbGx5LCBnZW5lcmljIHBhcmFtZXRlcnMgZ2V0IF9tb25vbW9ycGhpemVkXy4gRm9yIGV4YW1wbGUsIGlmIEkgaGF2ZQoKYGBgCmZuIGZvbzxUPih4OiBUKSB7CiAgICAvLyAuLi4KfQpgYGAKClRoZSBtYWNoaW5lIGNvZGUgZm9yIGBmb286Ojx1OD4oKWAsIGBmb286Ojxib29sPigpYCwgYGZvbzo6PFN0cmluZz4oKWAsIG9yIGFueQpvdGhlciB0eXBlIHN1YnN0aXR1dGlvbiBpcyBkaWZmZXJlbnQuIEhlbmNlIHRoZSBjb21waWxlciBnZW5lcmF0ZXMgdGhlCmltcGxlbWVudGF0aW9uIG9uLWRlbWFuZC4gSWYgeW91IGNhbGwgYGZvbygpYCB3aXRoIGEgYGJvb2xgIHBhcmFtZXRlciwgdGhlCmNvbXBpbGVyIHdpbGwgb25seSBnZW5lcmF0ZSBjb2RlIGZvciBgZm9vOjo8Ym9vbD4oKWAuIFdoZW4gd2UgaGF2ZSBhZGRpdGlvbmFsCnR5cGUgcGFyYW1ldGVycywgdGhlIG51bWJlciBvZiBtb25vbW9ycGhpemVkIGltcGxlbWVudGF0aW9ucyB0aGUgY29tcGlsZXIKZ2VuZXJhdGVzIGRvZXMgbm90IGdyb3cgZHJhc3RpY2FsbHksIHNpbmNlIHRoZSBjb21waWxlciB3aWxsIG9ubHkgZ2VuZXJhdGUgYW4KaW1wbGVtZW50YXRpb24gaWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHVucGFyYW1ldHJpemVkIHN1YnN0aXR1dGlvbnMKKGkuZS4sIHN1YnN0aXR1dGlvbnMgd2hlcmUgbm9uZSBvZiB0aGUgc3Vic3RpdHV0ZWQgdHlwZXMgYXJlIHRoZW1zZWx2ZXMKcGFyYW1ldGVyaXplZCkuCgpIb3dldmVyLCB3aXRoIHRyYWl0IG9iamVjdHMgd2UgaGF2ZSB0byBtYWtlIGEgdGFibGUgY29udGFpbmluZyBfZXZlcnlfIG9iamVjdAp0aGF0IGltcGxlbWVudHMgdGhlIHRyYWl0LiBOb3csIGlmIGl0IGhhcyB0eXBlIHBhcmFtZXRlcnMsIHdlIG5lZWQgdG8gYWRkCmltcGxlbWVudGF0aW9ucyBmb3IgZXZlcnkgdHlwZSB0aGF0IGltcGxlbWVudHMgdGhlIHRyYWl0LCBhbmQgdGhlcmUgY291bGQKdGhlb3JldGljYWxseSBiZSBhbiBpbmZpbml0ZSBudW1iZXIgb2YgdHlwZXMuCgpGb3IgZXhhbXBsZSwgd2l0aDoKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb288VD4oJnNlbGYsIG9uOiBUKTsKICAgIC8vIG1vcmUgbWV0aG9kcwp9CgppbXBsIFRyYWl0IGZvciBTdHJpbmcgewogICAgZm4gZm9vPFQ+KCZzZWxmLCBvbjogVCkgewogICAgICAgIC8vIGltcGxlbWVudGF0aW9uIDEKICAgIH0KfQoKaW1wbCBUcmFpdCBmb3IgdTggewogICAgZm4gZm9vPFQ+KCZzZWxmLCBvbjogVCkgewogICAgICAgIC8vIGltcGxlbWVudGF0aW9uIDIKICAgIH0KfQoKLy8gOCBtb3JlIGltcGxlbWVudGF0aW9ucwpgYGAKCk5vdywgaWYgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMzgKIyB0cmFpdCBUcmFpdCB7IGZuIGZvbzxUPigmc2VsZiwgb246IFQpOyB9CiMgaW1wbCBUcmFpdCBmb3IgU3RyaW5nIHsgZm4gZm9vPFQ+KCZzZWxmLCBvbjogVCkge30gfQojIGltcGwgVHJhaXQgZm9yIHU4IHsgZm4gZm9vPFQ+KCZzZWxmLCBvbjogVCkge30gfQojIGltcGwgVHJhaXQgZm9yIGJvb2wgeyBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB7fSB9CiMgLy8gZXRjLgpmbiBjYWxsX2Zvbyh0aGluZzogQm94PFRyYWl0PikgewogICAgdGhpbmcuZm9vKHRydWUpOyAvLyB0aGlzIGNvdWxkIGJlIGFueSBvbmUgb2YgdGhlIDggdHlwZXMgYWJvdmUKICAgIHRoaW5nLmZvbygxKTsKICAgIHRoaW5nLmZvbygiaGVsbG8iKTsKfQpgYGAKCldlIGRvbid0IGp1c3QgbmVlZCB0byBjcmVhdGUgYSB0YWJsZSBvZiBhbGwgaW1wbGVtZW50YXRpb25zIG9mIGFsbCBtZXRob2RzIG9mCmBUcmFpdGAsIHdlIG5lZWQgdG8gY3JlYXRlIHN1Y2ggYSB0YWJsZSwgZm9yIGVhY2ggZGlmZmVyZW50IHR5cGUgZmVkIHRvCmBmb28oKWAuIEluIHRoaXMgY2FzZSB0aGlzIHR1cm5zIG91dCB0byBiZSAoMTAgdHlwZXMgaW1wbGVtZW50aW5nIGBUcmFpdGApXCooMwp0eXBlcyBiZWluZyBmZWQgdG8gYGZvbygpYCkgPSAzMCBpbXBsZW1lbnRhdGlvbnMhCgpXaXRoIHJlYWwgd29ybGQgdHJhaXRzIHRoZXNlIG51bWJlcnMgY2FuIGdyb3cgZHJhc3RpY2FsbHkuCgpUbyBmaXggdGhpcywgaXQgaXMgc3VnZ2VzdGVkIHRvIHVzZSBhIGB3aGVyZSBTZWxmOiBTaXplZGAgYm91bmQgc2ltaWxhciB0byB0aGUKZml4IGZvciB0aGUgc3ViLWVycm9yIGFib3ZlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIGNhbGwgdGhlIG1ldGhvZCB3aXRoIHR5cGUKcGFyYW1ldGVyczoKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB3aGVyZSBTZWxmOiBTaXplZDsKICAgIC8vIG1vcmUgbWV0aG9kcwp9CmBgYAoKSWYgdGhpcyBpcyBub3QgYW4gb3B0aW9uLCBjb25zaWRlciByZXBsYWNpbmcgdGhlIHR5cGUgcGFyYW1ldGVyIHdpdGggYW5vdGhlcgp0cmFpdCBvYmplY3QgKGUuZy4sIGlmIGBUOiBPdGhlclRyYWl0YCwgdXNlIGBvbjogQm94PE90aGVyVHJhaXQ+YCkuIElmIHRoZQpudW1iZXIgb2YgdHlwZXMgeW91IGludGVuZCB0byBmZWVkIHRvIHRoaXMgbWV0aG9kIGlzIGxpbWl0ZWQsIGNvbnNpZGVyIG1hbnVhbGx5Cmxpc3Rpbmcgb3V0IHRoZSBtZXRob2RzIG9mIGRpZmZlcmVudCB0eXBlcy4KCiMjIyBNZXRob2QgaGFzIG5vIHJlY2VpdmVyCgpNZXRob2RzIHRoYXQgZG8gbm90IHRha2UgYSBgc2VsZmAgcGFyYW1ldGVyIGNhbid0IGJlIGNhbGxlZCBzaW5jZSB0aGVyZSB3b24ndCBiZQphIHdheSB0byBnZXQgYSBwb2ludGVyIHRvIHRoZSBtZXRob2QgdGFibGUgZm9yIHRoZW0uCgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpIC0+IHU4Owp9CmBgYAoKVGhpcyBjb3VsZCBiZSBjYWxsZWQgYXMgYDxGb28gYXMgRm9vPjo6Zm9vKClgLCB3aGljaCB3b3VsZCBub3QgYmUgYWJsZSB0byBwaWNrCmFuIGltcGxlbWVudGF0aW9uLgoKQWRkaW5nIGEgYFNlbGY6IFNpemVkYCBib3VuZCB0byB0aGVzZSBtZXRob2RzIHdpbGwgZ2VuZXJhbGx5IG1ha2UgdGhpcyBjb21waWxlLgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oKSAtPiB1OCB3aGVyZSBTZWxmOiBTaXplZDsKfQpgYGAKCiMjIyBUaGUgdHJhaXQgY2Fubm90IGNvbnRhaW4gYXNzb2NpYXRlZCBjb25zdGFudHMKCkp1c3QgbGlrZSBzdGF0aWMgZnVuY3Rpb25zLCBhc3NvY2lhdGVkIGNvbnN0YW50cyBhcmVuJ3Qgc3RvcmVkIG9uIHRoZSBtZXRob2QKdGFibGUuIElmIHRoZSB0cmFpdCBvciBhbnkgc3VidHJhaXQgY29udGFpbiBhbiBhc3NvY2lhdGVkIGNvbnN0YW50LCB0aGV5IGNhbm5vdApiZSBtYWRlIGludG8gYW4gb2JqZWN0LgoKYGBgY29tcGlsZV9mYWlsLEUwMDM4CnRyYWl0IEZvbyB7CiAgICBjb25zdCBYOiBpMzI7Cn0KCmltcGwgRm9vIHt9CmBgYAoKQSBzaW1wbGUgd29ya2Fyb3VuZCBpcyB0byB1c2UgYSBoZWxwZXIgbWV0aG9kIGluc3RlYWQ6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIHgoJnNlbGYpIC0+IGkzMjsKfQpgYGAKCiMjIyBUaGUgdHJhaXQgY2Fubm90IHVzZSBgU2VsZmAgYXMgYSB0eXBlIHBhcmFtZXRlciBpbiB0aGUgc3VwZXJ0cmFpdCBsaXN0aW5nCgpUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHNlY29uZCBzdWItZXJyb3IsIGJ1dCBzdWJ0bGVyLiBJdCBoYXBwZW5zIGluIHNpdHVhdGlvbnMKbGlrZSB0aGUgZm9sbG93aW5nOgoKYGBgY29tcGlsZV9mYWlsLEUwMDM4CnRyYWl0IFN1cGVyPEE6ID9TaXplZD4ge30KCnRyYWl0IFRyYWl0OiBTdXBlcjxTZWxmPiB7Cn0KCnN0cnVjdCBGb287CgppbXBsIFN1cGVyPEZvbz4gZm9yIEZvb3t9CgppbXBsIFRyYWl0IGZvciBGb28ge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeDogQm94PGR5biBUcmFpdD47Cn0KYGBgCgpIZXJlLCB0aGUgc3VwZXJ0cmFpdCBtaWdodCBoYXZlIG1ldGhvZHMgYXMgZm9sbG93czoKCmBgYAp0cmFpdCBTdXBlcjxBOiA/U2l6ZWQ+IHsKICAgIGZuIGdldF9hKCZzZWxmKSAtPiAmQTsgLy8gbm90ZSB0aGF0IHRoaXMgaXMgb2JqZWN0IHNhZmUhCn0KYGBgCgpJZiB0aGUgdHJhaXQgYFRyYWl0YCB3YXMgZGVyaXZpbmcgZnJvbSBzb21ldGhpbmcgbGlrZSBgU3VwZXI8U3RyaW5nPmAgb3IKYFN1cGVyPFQ+YCAod2hlcmUgYEZvb2AgaXRzZWxmIGlzIGBGb288VD5gKSwgdGhpcyBpcyBva2F5LCBiZWNhdXNlIGdpdmVuIGEgdHlwZQpgZ2V0X2EoKWAgd2lsbCBkZWZpbml0ZWx5IHJldHVybiBhbiBvYmplY3Qgb2YgdGhhdCB0eXBlLgoKSG93ZXZlciwgaWYgaXQgZGVyaXZlcyBmcm9tIGBTdXBlcjxTZWxmPmAsIGV2ZW4gdGhvdWdoIGBTdXBlcmAgaXMgb2JqZWN0IHNhZmUsCnRoZSBtZXRob2QgYGdldF9hKClgIHdvdWxkIHJldHVybiBhbiBvYmplY3Qgb2YgdW5rbm93biB0eXBlIHdoZW4gY2FsbGVkIG9uIHRoZQpmdW5jdGlvbi4gYFNlbGZgIHR5cGUgcGFyYW1ldGVycyBsZXQgdXMgbWFrZSBvYmplY3Qgc2FmZSB0cmFpdHMgbm8gbG9uZ2VyIHNhZmUsCnNvIHRoZXkgYXJlIGZvcmJpZGRlbiB3aGVuIHNwZWNpZnlpbmcgc3VwZXJ0cmFpdHMuCgpUaGVyZSdzIG5vIGVhc3kgZml4IGZvciB0aGlzLCBnZW5lcmFsbHkgY29kZSB3aWxsIG5lZWQgdG8gYmUgcmVmYWN0b3JlZCBzbyB0aGF0CnlvdSBubyBsb25nZXIgbmVlZCB0byBkZXJpdmUgZnJvbSBgU3VwZXI8U2VsZj5gLgpFMDA0MEl0IGlzIG5vdCBhbGxvd2VkIHRvIG1hbnVhbGx5IGNhbGwgZGVzdHJ1Y3RvcnMgaW4gUnVzdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNDAKc3RydWN0IEZvbyB7CiAgICB4OiBpMzIsCn0KCmltcGwgRHJvcCBmb3IgRm9vIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7CiAgICAgICAgcHJpbnRsbiEoImthYm9vbSIpOwogICAgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCB4ID0gRm9vIHsgeDogLTcgfTsKICAgIHguZHJvcCgpOyAvLyBlcnJvcjogZXhwbGljaXQgdXNlIG9mIGRlc3RydWN0b3IgbWV0aG9kCn0KYGBgCgpJdCBpcyB1bm5lY2Vzc2FyeSB0byBkbyB0aGlzIHNpbmNlIGBkcm9wYCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuZXZlciBhCnZhbHVlIGdvZXMgb3V0IG9mIHNjb3BlLiBIb3dldmVyLCBpZiB5b3UgcmVhbGx5IG5lZWQgdG8gZHJvcCBhIHZhbHVlIGJ5IGhhbmQsCnlvdSBjYW4gdXNlIHRoZSBgc3RkOjptZW06OmRyb3BgIGZ1bmN0aW9uOgoKYGBgCnN0cnVjdCBGb28gewogICAgeDogaTMyLAp9CmltcGwgRHJvcCBmb3IgRm9vIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7CiAgICAgICAgcHJpbnRsbiEoImthYm9vbSIpOwogICAgfQp9CmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHggPSBGb28geyB4OiAtNyB9OwogICAgZHJvcCh4KTsgLy8gb2shCn0KYGBgCkUwMDQ0WW91IGNhbm5vdCB1c2UgdHlwZSBvciBjb25zdCBwYXJhbWV0ZXJzIG9uIGZvcmVpZ24gaXRlbXMuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDQ0CmV4dGVybiB7IGZuIHNvbWVfZnVuYzxUPih4OiBUKTsgfQpgYGAKClRvIGZpeCB0aGlzLCByZXBsYWNlIHRoZSBnZW5lcmljIHBhcmFtZXRlciB3aXRoIHRoZSBzcGVjaWFsaXphdGlvbnMgdGhhdCB5b3UKbmVlZDoKCmBgYApleHRlcm4geyBmbiBzb21lX2Z1bmNfaTMyKHg6IGkzMik7IH0KZXh0ZXJuIHsgZm4gc29tZV9mdW5jX2k2NCh4OiBpNjQpOyB9CmBgYApFMDA0NVZhcmlhZGljIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHVzZWQgb24gYSBub24tQyBBQkkgZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDQ1CiMhW2ZlYXR1cmUodW5ib3hlZF9jbG9zdXJlcyldCgpleHRlcm4gInJ1c3QtY2FsbCIgewogICAgZm4gZm9vKHg6IHU4LCAuLi4pOyAvLyBlcnJvciEKfQpgYGAKClJ1c3Qgb25seSBzdXBwb3J0cyB2YXJpYWRpYyBwYXJhbWV0ZXJzIGZvciBpbnRlcm9wZXJhYmlsaXR5IHdpdGggQyBjb2RlIGluIGl0cwpGRkkuIEFzIHN1Y2gsIHZhcmlhZGljIHBhcmFtZXRlcnMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyB3aGljaCBhcmUKdXNpbmcgdGhlIEMgQUJJLiBUbyBmaXggc3VjaCBjb2RlLCBwdXQgdGhlbSBpbiBhbiBleHRlcm4gIkMiIGJsb2NrOgoKYGBgCmV4dGVybiAiQyIgewogICAgZm4gZm9vICh4OiB1OCwgLi4uKTsKfQpgYGAKRTAwNDZJdGVtcyBhcmUgbWlzc2luZyBpbiBhIHRyYWl0IGltcGxlbWVudGF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA0Ngp0cmFpdCBGb28gewogICAgZm4gZm9vKCk7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHt9Ci8vIGVycm9yOiBub3QgYWxsIHRyYWl0IGl0ZW1zIGltcGxlbWVudGVkLCBtaXNzaW5nOiBgZm9vYApgYGAKCldoZW4gdHJ5aW5nIHRvIG1ha2Ugc29tZSB0eXBlIGltcGxlbWVudCBhIHRyYWl0IGBGb29gLCB5b3UgbXVzdCwgYXQgbWluaW11bSwKcHJvdmlkZSBpbXBsZW1lbnRhdGlvbnMgZm9yIGFsbCBvZiBgRm9vYCdzIHJlcXVpcmVkIG1ldGhvZHMgKG1lYW5pbmcgdGhlCm1ldGhvZHMgdGhhdCBkbyBub3QgaGF2ZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyksIGFzIHdlbGwgYXMgYW55IHJlcXVpcmVkCnRyYWl0IGl0ZW1zIGxpa2UgYXNzb2NpYXRlZCB0eXBlcyBvciBjb25zdGFudHMuIEV4YW1wbGU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBmb28oKSB7fSAvLyBvayEKfQpgYGAKRTAwNDlBbiBhdHRlbXB0ZWQgaW1wbGVtZW50YXRpb24gb2YgYSB0cmFpdCBtZXRob2QgaGFzIHRoZSB3cm9uZyBudW1iZXIgb2YgdHlwZSBvcgpjb25zdCBwYXJhbWV0ZXJzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA0OQp0cmFpdCBGb28gewogICAgZm4gZm9vPFQ6IERlZmF1bHQ+KHg6IFQpIC0+IFNlbGY7Cn0KCnN0cnVjdCBCYXI7CgovLyBlcnJvcjogbWV0aG9kIGBmb29gIGhhcyAwIHR5cGUgcGFyYW1ldGVycyBidXQgaXRzIHRyYWl0IGRlY2xhcmF0aW9uIGhhcyAxCi8vIHR5cGUgcGFyYW1ldGVyCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKHg6IGJvb2wpIC0+IFNlbGYgeyBCYXIgfQp9CmBgYAoKRm9yIGV4YW1wbGUsIHRoZSBgRm9vYCB0cmFpdCBoYXMgYSBtZXRob2QgYGZvb2Agd2l0aCBhIHR5cGUgcGFyYW1ldGVyIGBUYCwKYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9vYCBmb3IgdGhlIHR5cGUgYEJhcmAgaXMgbWlzc2luZyB0aGlzIHBhcmFtZXRlci4KVG8gZml4IHRoaXMgZXJyb3IsIHRoZXkgbXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUgcGFyYW1ldGVyczoKCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vPFQ6IERlZmF1bHQ+KHg6IFQpIC0+IFNlbGY7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGZvbzxUOiBEZWZhdWx0Pih4OiBUKSAtPiBTZWxmIHsgLy8gb2shCiAgICAgICAgQmFyCiAgICB9Cn0KYGBgCkUwMDUwQW4gYXR0ZW1wdGVkIGltcGxlbWVudGF0aW9uIG9mIGEgdHJhaXQgbWV0aG9kIGhhcyB0aGUgd3JvbmcgbnVtYmVyIG9mIGZ1bmN0aW9uCnBhcmFtZXRlcnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDUwCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oJnNlbGYsIHg6IHU4KSAtPiBib29sOwp9CgpzdHJ1Y3QgQmFyOwoKLy8gZXJyb3I6IG1ldGhvZCBgZm9vYCBoYXMgMSBwYXJhbWV0ZXIgYnV0IHRoZSBkZWNsYXJhdGlvbiBpbiB0cmFpdCBgRm9vOjpmb29gCi8vIGhhcyAyCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCZzZWxmKSAtPiBib29sIHsgdHJ1ZSB9Cn0KYGBgCgpGb3IgZXhhbXBsZSwgdGhlIGBGb29gIHRyYWl0IGhhcyBhIG1ldGhvZCBgZm9vYCB3aXRoIHR3byBmdW5jdGlvbiBwYXJhbWV0ZXJzCihgJnNlbGZgIGFuZCBgdThgKSwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9vYCBmb3IgdGhlIHR5cGUgYEJhcmAgb21pdHMKdGhlIGB1OGAgcGFyYW1ldGVyLiBUbyBmaXggdGhpcyBlcnJvciwgdGhleSBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyczoKCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vKCZzZWxmLCB4OiB1OCkgLT4gYm9vbDsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCZzZWxmLCB4OiB1OCkgLT4gYm9vbCB7IC8vIG9rIQogICAgICAgIHRydWUKICAgIH0KfQpgYGAKRTAwNTNUaGUgcGFyYW1ldGVycyBvZiBhbnkgdHJhaXQgbWV0aG9kIG11c3QgbWF0Y2ggYmV0d2VlbiBhIHRyYWl0IGltcGxlbWVudGF0aW9uCmFuZCB0aGUgdHJhaXQgZGVmaW5pdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNTMKdHJhaXQgRm9vIHsKICAgIGZuIGZvbyh4OiB1MTYpOwogICAgZm4gYmFyKCZzZWxmKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgLy8gZXJyb3IsIGV4cGVjdGVkIHUxNiwgZm91bmQgaTE2CiAgICBmbiBmb28oeDogaTE2KSB7IH0KCiAgICAvLyBlcnJvciwgdHlwZXMgZGlmZmVyIGluIG11dGFiaWxpdHkKICAgIGZuIGJhcigmbXV0IHNlbGYpIHsgfQp9CmBgYApFMDA1NEl0IGlzIG5vdCBhbGxvd2VkIHRvIGNhc3QgdG8gYSBib29sLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA1NApsZXQgeCA9IDU7CgovLyBOb3QgYWxsb3dlZCwgd29uJ3QgY29tcGlsZQpsZXQgeF9pc19ub256ZXJvID0geCBhcyBib29sOwpgYGAKCklmIHlvdSBhcmUgdHJ5aW5nIHRvIGNhc3QgYSBudW1lcmljIHR5cGUgdG8gYSBib29sLCB5b3UgY2FuIGNvbXBhcmUgaXQgd2l0aAp6ZXJvIGluc3RlYWQ6CgpgYGAKbGV0IHggPSA1OwoKLy8gT2sKbGV0IHhfaXNfbm9uemVybyA9IHggIT0gMDsKYGBgCkUwMDU1RHVyaW5nIGEgbWV0aG9kIGNhbGwsIGEgdmFsdWUgaXMgYXV0b21hdGljYWxseSBkZXJlZmVyZW5jZWQgYXMgbWFueSB0aW1lcyBhcwpuZWVkZWQgdG8gbWFrZSB0aGUgdmFsdWUncyB0eXBlIG1hdGNoIHRoZSBtZXRob2QncyByZWNlaXZlci4gVGhlIGNhdGNoIGlzIHRoYXQKdGhlIGNvbXBpbGVyIHdpbGwgb25seSBhdHRlbXB0IHRvIGRlcmVmZXJlbmNlIGEgbnVtYmVyIG9mIHRpbWVzIHVwIHRvIHRoZQpyZWN1cnNpb24gbGltaXQgKHdoaWNoIGNhbiBiZSBzZXQgdmlhIHRoZSBgcmVjdXJzaW9uX2xpbWl0YCBhdHRyaWJ1dGUpLgoKRm9yIGEgc29tZXdoYXQgYXJ0aWZpY2lhbCBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDU1CiMhW3JlY3Vyc2lvbl9saW1pdD0iNCJdCgpzdHJ1Y3QgRm9vOwoKaW1wbCBGb28gewogICAgZm4gZm9vKCZzZWxmKSB7fQp9CgpmbiBtYWluKCkgewogICAgbGV0IGZvbyA9IEZvbzsKICAgIGxldCByZWZfZm9vID0gJiYmJiZGb287CgogICAgLy8gZXJyb3IsIHJlYWNoZWQgdGhlIHJlY3Vyc2lvbiBsaW1pdCB3aGlsZSBhdXRvLWRlcmVmZXJlbmNpbmcgYCYmJiYmRm9vYAogICAgcmVmX2Zvby5mb28oKTsKfQpgYGAKCk9uZSBmaXggbWF5IGJlIHRvIGluY3JlYXNlIHRoZSByZWN1cnNpb24gbGltaXQuIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0bwpjcmVhdGUgYW4gaW5maW5pdGUgcmVjdXJzaW9uIG9mIGRlcmVmZXJlbmNpbmcsIGluIHdoaWNoIGNhc2UgdGhlIG9ubHkgZml4IGlzIHRvCnNvbWVob3cgYnJlYWsgdGhlIHJlY3Vyc2lvbi4KRTAwNTdBbiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgd2FzIGdpdmVuIHdoZW4gY2FsbGluZyBhIGNsb3N1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDU3CmxldCBmID0gfHh8IHggKiAzOwpsZXQgYSA9IGYoKTsgICAgICAgIC8vIGludmFsaWQsIHRvbyBmZXcgcGFyYW1ldGVycwpsZXQgYiA9IGYoNCk7ICAgICAgIC8vIHRoaXMgd29ya3MhCmxldCBjID0gZigyLCAzKTsgICAgLy8gaW52YWxpZCwgdG9vIG1hbnkgcGFyYW1ldGVycwpgYGAKCldoZW4gaW52b2tpbmcgY2xvc3VyZXMgb3Igb3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBmdW5jdGlvbiB0cmFpdHMgYEZuYCwKYEZuTXV0YCBvciBgRm5PbmNlYCB1c2luZyBjYWxsIG5vdGF0aW9uLCB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZQpmdW5jdGlvbiBtdXN0IG1hdGNoIGl0cyBkZWZpbml0aW9uLgoKQSBnZW5lcmljIGZ1bmN0aW9uIG11c3QgYmUgdHJlYXRlZCBzaW1pbGFybHk6CgpgYGAKZm4gZm9vPEY6IEZuKCk+KGY6IEYpIHsKICAgIGYoKTsgLy8gdGhpcyBpcyB2YWxpZCwgYnV0IGYoMykgd291bGQgbm90IHdvcmsKfQpgYGAKRTAwNTlUaGUgYnVpbHQtaW4gZnVuY3Rpb24gdHJhaXRzIGFyZSBnZW5lcmljIG92ZXIgYSB0dXBsZSBvZiB0aGUgZnVuY3Rpb24gYXJndW1lbnRzLgpJZiBvbmUgdXNlcyBhbmdsZS1icmFja2V0IG5vdGF0aW9uIChgRm48KFQsKSwgT3V0cHV0PVU+YCkgaW5zdGVhZCBvZiBwYXJlbnRoZXNlcwooYEZuKFQpIC0+IFVgKSB0byBkZW5vdGUgdGhlIGZ1bmN0aW9uIHRyYWl0LCB0aGUgdHlwZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEKdHVwbGUuIE90aGVyd2lzZSBmdW5jdGlvbiBjYWxsIG5vdGF0aW9uIGNhbm5vdCBiZSB1c2VkIGFuZCB0aGUgdHJhaXQgd2lsbCBub3QgYmUKaW1wbGVtZW50ZWQgYnkgY2xvc3VyZXMuCgpUaGUgbW9zdCBsaWtlbHkgc291cmNlIG9mIHRoaXMgZXJyb3IgaXMgdXNpbmcgYW5nbGUtYnJhY2tldCBub3RhdGlvbiB3aXRob3V0CndyYXBwaW5nIHRoZSBmdW5jdGlvbiBhcmd1bWVudCB0eXBlIGludG8gYSB0dXBsZSwgZm9yIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNTkKIyFbZmVhdHVyZSh1bmJveGVkX2Nsb3N1cmVzKV0KCmZuIGZvbzxGOiBGbjxpMzI+PihmOiBGKSAtPiBGOjpPdXRwdXQgeyBmKDMpIH0KYGBgCgpJdCBjYW4gYmUgZml4ZWQgYnkgYWRqdXN0aW5nIHRoZSB0cmFpdCBib3VuZCBsaWtlIHRoaXM6CgpgYGAKIyFbZmVhdHVyZSh1bmJveGVkX2Nsb3N1cmVzKV0KCmZuIGZvbzxGOiBGbjwoaTMyLCk+PihmOiBGKSAtPiBGOjpPdXRwdXQgeyBmKDMpIH0KYGBgCgpOb3RlIHRoYXQgYChULClgIGFsd2F5cyBkZW5vdGVzIHRoZSB0eXBlIG9mIGEgMS10dXBsZSBjb250YWluaW5nIGFuIGVsZW1lbnQgb2YKdHlwZSBgVGAuIFRoZSBjb21tYSBpcyBuZWNlc3NhcnkgZm9yIHN5bnRhY3RpYyBkaXNhbWJpZ3VhdGlvbi4KRTAwNjBFeHRlcm5hbCBDIGZ1bmN0aW9ucyBhcmUgYWxsb3dlZCB0byBiZSB2YXJpYWRpYy4gSG93ZXZlciwgYSB2YXJpYWRpYyBmdW5jdGlvbgp0YWtlcyBhIG1pbmltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cy4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIEMncyB2YXJpYWRpYyBgcHJpbnRmYApmdW5jdGlvbjoKCmBgYGNvbXBpbGVfZmFpbCxFMDA2MAp1c2Ugc3RkOjpvczo6cmF3Ojp7Y19jaGFyLCBjX2ludH07CgpleHRlcm4gIkMiIHsKICAgIGZuIHByaW50ZihfOiAqY29uc3QgY19jaGFyLCAuLi4pIC0+IGNfaW50Owp9Cgp1bnNhZmUgeyBwcmludGYoKTsgfSAvLyBlcnJvciEKYGBgCgpVc2luZyB0aGlzIGRlY2xhcmF0aW9uLCBpdCBtdXN0IGJlIGNhbGxlZCB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudCwgc28Kc2ltcGx5IGNhbGxpbmcgYHByaW50ZigpYCBpcyBpbnZhbGlkLiBCdXQgdGhlIGZvbGxvd2luZyB1c2VzIGFyZSBhbGxvd2VkOgoKYGBgCiMgIyFbZmVhdHVyZShzdGF0aWNfbm9idW5kbGUpXQojIHVzZSBzdGQ6Om9zOjpyYXc6OntjX2NoYXIsIGNfaW50fTsKIyAjW2NmZ19hdHRyKGFsbCh3aW5kb3dzLCB0YXJnZXRfZW52ID0gIm1zdmMiKSwKIyAgICAgICAgICAgIGxpbmsobmFtZSA9ICJsZWdhY3lfc3RkaW9fZGVmaW5pdGlvbnMiLCBraW5kID0gInN0YXRpYy1ub2J1bmRsZSIpKV0KIyBleHRlcm4gIkMiIHsgZm4gcHJpbnRmKF86ICpjb25zdCBjX2NoYXIsIC4uLikgLT4gY19pbnQ7IH0KIyBmbiBtYWluKCkgewp1bnNhZmUgewogICAgdXNlIHN0ZDo6ZmZpOjpDU3RyaW5nOwoKICAgIGxldCBmbXQgPSBDU3RyaW5nOjpuZXcoInRlc3RcbiIpLnVud3JhcCgpOwogICAgcHJpbnRmKGZtdC5hc19wdHIoKSk7CgogICAgbGV0IGZtdCA9IENTdHJpbmc6Om5ldygibnVtYmVyID0gJWRcbiIpLnVud3JhcCgpOwogICAgcHJpbnRmKGZtdC5hc19wdHIoKSwgMyk7CgogICAgbGV0IGZtdCA9IENTdHJpbmc6Om5ldygiJWQsICVkXG4iKS51bndyYXAoKTsKICAgIHByaW50ZihmbXQuYXNfcHRyKCksIDEwLCA1KTsKfQojIH0KYGBgCkUwMDYxQW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIHdhcyBwYXNzZWQgd2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDYxCmZuIGYodTogaTMyKSB7fQoKZigpOyAvLyBlcnJvciEKYGBgCgpUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gYSBmdW5jdGlvbiBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzCnNwZWNpZmllZCBpbiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLgoKRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gbGlrZToKCmBgYApmbiBmKGE6IHUxNiwgYjogJnN0cikge30KYGBgCgpNdXN0IGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBleGFjdGx5IHR3byBhcmd1bWVudHMsIGUuZy4sIGBmKDIsICJ0ZXN0IilgLgoKTm90ZSB0aGF0IFJ1c3QgZG9lcyBub3QgaGF2ZSBhIG5vdGlvbiBvZiBvcHRpb25hbCBmdW5jdGlvbiBhcmd1bWVudHMgb3IKdmFyaWFkaWMgZnVuY3Rpb25zIChleGNlcHQgZm9yIGl0cyBDLUZGSSkuCkUwMDYyQSBzdHJ1Y3QncyBvciBzdHJ1Y3QtbGlrZSBlbnVtIHZhcmlhbnQncyBmaWVsZCB3YXMgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA2MgpzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMiwKfQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gRm9vIHsKICAgICAgICAgICAgICAgIHg6IDAsCiAgICAgICAgICAgICAgICB4OiAwLCAvLyBlcnJvcjogZmllbGQgYHhgIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZQogICAgICAgICAgICB9Owp9CmBgYAoKVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCBkdXJpbmcgYW4gYXR0ZW1wdCB0byBidWlsZCBhIHN0cnVjdCBvciBzdHJ1Y3QtbGlrZQplbnVtIHZhcmlhbnQsIG9uZSBvZiB0aGUgZmllbGRzIHdhcyBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UuIEVhY2ggZmllbGQgc2hvdWxkCmJlIHNwZWNpZmllZCBleGFjdGx5IG9uZSB0aW1lLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBGb28gewogICAgeDogaTMyLAp9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBGb28geyB4OiAwIH07IC8vIG9rIQp9CmBgYApFMDA2M0Egc3RydWN0J3Mgb3Igc3RydWN0LWxpa2UgZW51bSB2YXJpYW50J3MgZmllbGQgd2FzIG5vdCBwcm92aWRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNjMKc3RydWN0IEZvbyB7CiAgICB4OiBpMzIsCiAgICB5OiBpMzIsCn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IEZvbyB7IHg6IDAgfTsgLy8gZXJyb3I6IG1pc3NpbmcgZmllbGQ6IGB5YAp9CmBgYAoKRWFjaCBmaWVsZCBzaG91bGQgYmUgc3BlY2lmaWVkIGV4YWN0bHkgb25jZS4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMiwKICAgIHk6IGkzMiwKfQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gRm9vIHsgeDogMCwgeTogMCB9OyAvLyBvayEKfQpgYGAKRTAwNjdBbiBpbnZhbGlkIGxlZnQtaGFuZCBzaWRlIGV4cHJlc3Npb24gd2FzIHVzZWQgb24gYW4gYXNzaWdubWVudCBvcGVyYXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDY3CjEyICs9IDE7IC8vIGVycm9yIQpgYGAKCllvdSBuZWVkIHRvIGhhdmUgYSBwbGFjZSBleHByZXNzaW9uIHRvIGJlIGFibGUgdG8gYXNzaWduIGl0IHNvbWV0aGluZy4gRm9yCmV4YW1wbGU6CgpgYGAKbGV0IG11dCB4OiBpOCA9IDEyOwp4ICs9IDE7IC8vIG9rIQpgYGAKRTAwNjlUaGUgY29tcGlsZXIgZm91bmQgYSBmdW5jdGlvbiB3aG9zZSBib2R5IGNvbnRhaW5zIGEgYHJldHVybjtgIHN0YXRlbWVudCBidXQKd2hvc2UgcmV0dXJuIHR5cGUgaXMgbm90IGAoKWAuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDY5Ci8vIGVycm9yCmZuIGZvbygpIC0+IHU4IHsKICAgIHJldHVybjsKfQpgYGAKClNpbmNlIGByZXR1cm47YCBpcyBqdXN0IGxpa2UgYHJldHVybiAoKTtgLCB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlCmZ1bmN0aW9uJ3MgcmV0dXJuIHR5cGUgYW5kIHRoZSB2YWx1ZSBiZWluZyByZXR1cm5lZC4KRTAwNzBBbiBhc3NpZ25tZW50IG9wZXJhdG9yIHdhcyB1c2VkIG9uIGEgbm9uLXBsYWNlIGV4cHJlc3Npb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDA3MApzdHJ1Y3QgU29tZVN0cnVjdCB7CiAgICB4OiBpMzIsCiAgICB5OiBpMzIsCn0KCmNvbnN0IFNPTUVfQ09OU1Q6IGkzMiA9IDEyOwoKZm4gc29tZV9vdGhlcl9mdW5jKCkge30KCmZuIHNvbWVfZnVuY3Rpb24oKSB7CiAgICBTT01FX0NPTlNUID0gMTQ7IC8vIGVycm9yOiBhIGNvbnN0YW50IHZhbHVlIGNhbm5vdCBiZSBjaGFuZ2VkIQogICAgMSA9IDM7IC8vIGVycm9yOiAxIGlzbid0IGEgdmFsaWQgcGxhY2UhCiAgICBzb21lX290aGVyX2Z1bmMoKSA9IDQ7IC8vIGVycm9yOiB3ZSBjYW5ub3QgYXNzaWduIHZhbHVlIHRvIGEgZnVuY3Rpb24hCiAgICBTb21lU3RydWN0Ojp4ID0gMTI7IC8vIGVycm9yOiBTb21lU3RydWN0IGEgc3RydWN0dXJlIG5hbWUgYnV0IGl0IGlzIHVzZWQKICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGxpa2UgYSB2YXJpYWJsZSEKfQpgYGAKClRoZSBsZWZ0LWhhbmQgc2lkZSBvZiBhbiBhc3NpZ25tZW50IG9wZXJhdG9yIG11c3QgYmUgYSBwbGFjZSBleHByZXNzaW9uLiBBCnBsYWNlIGV4cHJlc3Npb24gcmVwcmVzZW50cyBhIG1lbW9yeSBsb2NhdGlvbiBhbmQgY2FuIGJlIGEgdmFyaWFibGUgKHdpdGgKb3B0aW9uYWwgbmFtZXNwYWNpbmcpLCBhIGRlcmVmZXJlbmNlLCBhbiBpbmRleGluZyBleHByZXNzaW9uIG9yIGEgZmllbGQKcmVmZXJlbmNlLgoKTW9yZSBkZXRhaWxzIGNhbiBiZSBmb3VuZCBpbiB0aGUgW0V4cHJlc3Npb25zXSBzZWN0aW9uIG9mIHRoZSBSZWZlcmVuY2UuCgpbRXhwcmVzc2lvbnNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9leHByZXNzaW9ucy5odG1sI3BsYWNlcy1ydmFsdWVzLWFuZC10ZW1wb3JhcmllcwoKQW5kIG5vdyBsZXQncyBnaXZlIHdvcmtpbmcgZXhhbXBsZXM6CgpgYGAKc3RydWN0IFNvbWVTdHJ1Y3QgewogICAgeDogaTMyLAogICAgeTogaTMyLAp9CmxldCBtdXQgcyA9IFNvbWVTdHJ1Y3QgeyB4OiAwLCB5OiAwIH07CgpzLnggPSAzOyAvLyB0aGF0J3MgZ29vZCAhCgovLyAuLi4KCmZuIHNvbWVfZnVuYyh4OiAmbXV0IGkzMikgewogICAgKnggPSAxMjsgLy8gdGhhdCdzIGdvb2QgIQp9CmBgYApFMDA3MUEgc3RydWN0dXJlLWxpdGVyYWwgc3ludGF4IHdhcyB1c2VkIHRvIGNyZWF0ZSBhbiBpdGVtIHRoYXQgaXMgbm90IGEgc3RydWN0dXJlCm9yIGVudW0gdmFyaWFudC4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNzEKdHlwZSBVMzIgPSB1MzI7CmxldCB0ID0gVTMyIHsgdmFsdWU6IDQgfTsgLy8gZXJyb3I6IGV4cGVjdGVkIHN0cnVjdCwgdmFyaWFudCBvciB1bmlvbiB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGJ1aWx0aW4gdHlwZSBgdTMyYApgYGAKClRvIGZpeCB0aGlzLCBlbnN1cmUgdGhhdCB0aGUgbmFtZSB3YXMgY29ycmVjdGx5IHNwZWxsZWQsIGFuZCB0aGF0IHRoZSBjb3JyZWN0CmZvcm0gb2YgaW5pdGlhbGl6ZXIgd2FzIHVzZWQuCgpGb3IgZXhhbXBsZSwgdGhlIGNvZGUgYWJvdmUgY2FuIGJlIGZpeGVkIHRvOgoKYGBgCmVudW0gRm9vIHsKICAgIEZpcnN0VmFsdWUoaTMyKQp9CgpmbiBtYWluKCkgewogICAgbGV0IHUgPSBGb286OkZpcnN0VmFsdWUoMGkzMik7CgogICAgbGV0IHQgPSA0Owp9CmBgYApFMDA3MkEgcmVjdXJzaXZlIHR5cGUgaGFzIGluZmluaXRlIHNpemUgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgYW4gaW5kaXJlY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDcyCnN0cnVjdCBMaXN0Tm9kZSB7CiAgICBoZWFkOiB1OCwKICAgIHRhaWw6IE9wdGlvbjxMaXN0Tm9kZT4sIC8vIGVycm9yOiBubyBpbmRpcmVjdGlvbiBoZXJlIHNvIGltcG9zc2libGUgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb21wdXRlIHRoZSB0eXBlJ3Mgc2l6ZQp9CmBgYAoKV2hlbiBkZWZpbmluZyBhIHJlY3Vyc2l2ZSBzdHJ1Y3Qgb3IgZW51bSwgYW55IHVzZSBvZiB0aGUgdHlwZSBiZWluZyBkZWZpbmVkCmZyb20gaW5zaWRlIHRoZSBkZWZpbml0aW9uIG11c3Qgb2NjdXIgYmVoaW5kIGEgcG9pbnRlciAobGlrZSBgQm94YCwgYCZgIG9yCmBSY2ApLiBUaGlzIGlzIGJlY2F1c2Ugc3RydWN0cyBhbmQgZW51bXMgbXVzdCBoYXZlIGEgd2VsbC1kZWZpbmVkIHNpemUsIGFuZAp3aXRob3V0IHRoZSBwb2ludGVyLCB0aGUgc2l6ZSBvZiB0aGUgdHlwZSB3b3VsZCBuZWVkIHRvIGJlIHVuYm91bmRlZC4KCkluIHRoZSBleGFtcGxlLCB0aGUgdHlwZSBjYW5ub3QgaGF2ZSBhIHdlbGwtZGVmaW5lZCBzaXplLCBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlCmFyYml0cmFyaWx5IGxhcmdlIChzaW5jZSB3ZSB3b3VsZCBiZSBhYmxlIHRvIG5lc3QgYExpc3ROb2RlYHMgdG8gYW55IGRlcHRoKS4KU3BlY2lmaWNhbGx5LAoKYGBgcGxhaW4Kc2l6ZSBvZiBgTGlzdE5vZGVgID0gMSBieXRlIGZvciBgaGVhZGAKICAgICAgICAgICAgICAgICAgICsgMSBieXRlIGZvciB0aGUgZGlzY3JpbWluYW50IG9mIHRoZSBgT3B0aW9uYAogICAgICAgICAgICAgICAgICAgKyBzaXplIG9mIGBMaXN0Tm9kZWAKYGBgCgpPbmUgd2F5IHRvIGZpeCB0aGlzIGlzIGJ5IHdyYXBwaW5nIGBMaXN0Tm9kZWAgaW4gYSBgQm94YCwgbGlrZSBzbzoKCmBgYApzdHJ1Y3QgTGlzdE5vZGUgewogICAgaGVhZDogdTgsCiAgICB0YWlsOiBPcHRpb248Qm94PExpc3ROb2RlPj4sCn0KYGBgCgpUaGlzIHdvcmtzIGJlY2F1c2UgYEJveGAgaXMgYSBwb2ludGVyLCBzbyBpdHMgc2l6ZSBpcyB3ZWxsLWtub3duLgpFMDA3MyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCllvdSBjYW5ub3QgZGVmaW5lIGEgc3RydWN0IChvciBlbnVtKSBgRm9vYCB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIGBGb29gCmluIG9yZGVyIHRvIG1ha2UgYSBuZXcgYEZvb2AgdmFsdWUuIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSB3b3VsZCBiZSBubyB3YXkgYQpmaXJzdCBpbnN0YW5jZSBvZiBgRm9vYCBjb3VsZCBiZSBtYWRlIHRvIGluaXRpYWxpemUgYW5vdGhlciBpbnN0YW5jZSEKCkhlcmUncyBhbiBleGFtcGxlIG9mIGEgc3RydWN0IHRoYXQgaGFzIHRoaXMgcHJvYmxlbToKCmBgYApzdHJ1Y3QgRm9vIHsgeDogQm94PEZvbz4gfSAvLyBlcnJvcgpgYGAKCk9uZSBmaXggaXMgdG8gdXNlIGBPcHRpb25gLCBsaWtlIHNvOgoKYGBgCnN0cnVjdCBGb28geyB4OiBPcHRpb248Qm94PEZvbz4+IH0KYGBgCgpOb3cgaXQncyBwb3NzaWJsZSB0byBjcmVhdGUgYXQgbGVhc3Qgb25lIGluc3RhbmNlIG9mIGBGb29gOiBgRm9vIHsgeDogTm9uZSB9YC4KRTAwNzQjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpXaGVuIHVzaW5nIHRoZSBgI1tzaW1kXWAgYXR0cmlidXRlIG9uIGEgdHVwbGUgc3RydWN0LCB0aGUgY29tcG9uZW50cyBvZiB0aGUKdHVwbGUgc3RydWN0IG11c3QgYWxsIGJlIG9mIGEgY29uY3JldGUsIG5vbmdlbmVyaWMgdHlwZSBzbyB0aGUgY29tcGlsZXIgY2FuCnJlYXNvbiBhYm91dCBob3cgdG8gdXNlIFNJTUQgd2l0aCB0aGVtLiBUaGlzIGVycm9yIHdpbGwgb2NjdXIgaWYgdGhlIHR5cGVzCmFyZSBnZW5lcmljLgoKVGhpcyB3aWxsIGNhdXNlIGFuIGVycm9yOgoKYGBgCiMhW2ZlYXR1cmUocmVwcl9zaW1kKV0KCiNbcmVwcihzaW1kKV0Kc3RydWN0IEJhZDxUPihULCBULCBUKTsKYGBgCgpUaGlzIHdpbGwgbm90OgoKYGBgCiMhW2ZlYXR1cmUocmVwcl9zaW1kKV0KCiNbcmVwcihzaW1kKV0Kc3RydWN0IEdvb2QodTMyLCB1MzIsIHUzMik7CmBgYApFMDA3NUEgYCNbc2ltZF1gIGF0dHJpYnV0ZSB3YXMgYXBwbGllZCB0byBhbiBlbXB0eSB0dXBsZSBzdHJ1Y3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDc1CiMhW2ZlYXR1cmUocmVwcl9zaW1kKV0KCiNbcmVwcihzaW1kKV0Kc3RydWN0IEJhZDsgLy8gZXJyb3IhCmBgYAoKVGhlIGAjW3NpbWRdYCBhdHRyaWJ1dGUgY2FuIG9ubHkgYmUgYXBwbGllZCB0byBub24gZW1wdHkgdHVwbGUgc3RydWN0cywgYmVjYXVzZQppdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gdHJ5IHRvIHVzZSBTSU1EIG9wZXJhdGlvbnMgd2hlbiB0aGVyZSBhcmUgbm8gdmFsdWVzIHRvCm9wZXJhdGUgb24uCgpGaXhlZCBleGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUocmVwcl9zaW1kKV0KCiNbcmVwcihzaW1kKV0Kc3RydWN0IEdvb2QodTMyKTsgLy8gb2shCmBgYApFMDA3NkFsbCB0eXBlcyBpbiBhIHR1cGxlIHN0cnVjdCBhcmVuJ3QgdGhlIHNhbWUgd2hlbiB1c2luZyB0aGUgYCNbc2ltZF1gCmF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNzYKIyFbZmVhdHVyZShyZXByX3NpbWQpXQoKI1tyZXByKHNpbWQpXQpzdHJ1Y3QgQmFkKHUxNiwgdTMyLCB1MzIpOyAvLyBlcnJvciEKYGBgCgpXaGVuIHVzaW5nIHRoZSBgI1tzaW1kXWAgYXR0cmlidXRlIHRvIGF1dG9tYXRpY2FsbHkgdXNlIFNJTUQgb3BlcmF0aW9ucyBpbiB0dXBsZQpzdHJ1Y3QsIHRoZSB0eXBlcyBpbiB0aGUgc3RydWN0IG11c3QgYWxsIGJlIG9mIHRoZSBzYW1lIHR5cGUsIG9yIHRoZSBjb21waWxlcgp3aWxsIHRyaWdnZXIgdGhpcyBlcnJvci4KCkZpeGVkIGV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShyZXByX3NpbWQpXQoKI1tyZXByKHNpbWQpXQpzdHJ1Y3QgR29vZCh1MzIsIHUzMiwgdTMyKTsgLy8gb2shCmBgYApFMDA3N0EgdHVwbGUgc3RydWN0J3MgZWxlbWVudCBpc24ndCBhIG1hY2hpbmUgdHlwZSB3aGVuIHVzaW5nIHRoZSBgI1tzaW1kXWAKYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA3NwojIVtmZWF0dXJlKHJlcHJfc2ltZCldCgojW3JlcHIoc2ltZCldCnN0cnVjdCBCYWQoU3RyaW5nKTsgLy8gZXJyb3IhCmBgYAoKV2hlbiB1c2luZyB0aGUgYCNbc2ltZF1gIGF0dHJpYnV0ZSBvbiBhIHR1cGxlIHN0cnVjdCwgdGhlIGVsZW1lbnRzIGluIHRoZSB0dXBsZQptdXN0IGJlIG1hY2hpbmUgdHlwZXMgc28gU0lNRCBvcGVyYXRpb25zIGNhbiBiZSBhcHBsaWVkIHRvIHRoZW0uCgpGaXhlZCBleGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUocmVwcl9zaW1kKV0KCiNbcmVwcihzaW1kKV0Kc3RydWN0IEdvb2QodTMyLCB1MzIsIHUzMik7IC8vIG9rIQpgYGAKRTAwODBBIGNvbnN0YW50IHZhbHVlIGZhaWxlZCB0byBnZXQgZXZhbHVhdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA4MAplbnVtIEVudW0gewogICAgWCA9ICgxIDw8IDUwMCksCiAgICBZID0gKDEgLyAwKSwKfQpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbXBpbGVyIHdhcyB1bmFibGUgdG8gc2Vuc2libHkgZXZhbHVhdGUgYQpjb25zdGFudCBleHByZXNzaW9uIHRoYXQgaGFkIHRvIGJlIGV2YWx1YXRlZC4gQXR0ZW1wdGluZyB0byBkaXZpZGUgYnkgMApvciBjYXVzaW5nIGFuIGludGVnZXIgb3ZlcmZsb3cgYXJlIHR3byB3YXlzIHRvIGluZHVjZSB0aGlzIGVycm9yLgoKRW5zdXJlIHRoYXQgdGhlIGV4cHJlc3Npb25zIGdpdmVuIGNhbiBiZSBldmFsdWF0ZWQgYXMgdGhlIGRlc2lyZWQgaW50ZWdlciB0eXBlLgoKU2VlIHRoZSBbQ3VzdG9tIERpc2NyaW1pbmFudHNdW2N1c3RvbS1kaXNjcmltaW5hbnRzXSBzZWN0aW9uIG9mIHRoZSBSZWZlcmVuY2UKZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc2V0dGluZyBjdXN0b20gaW50ZWdlciB0eXBlcyBvbiBmaWVsZGxlc3MgZW51bXMKdXNpbmcgdGhlIFtgcmVwcmAgYXR0cmlidXRlXVtyZXByLWF0dHJpYnV0ZV0uCgpbY3VzdG9tLWRpc2NyaW1pbmFudHNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9pdGVtcy9lbnVtZXJhdGlvbnMuaHRtbCNjdXN0b20tZGlzY3JpbWluYW50LXZhbHVlcy1mb3ItZmllbGQtbGVzcy1lbnVtZXJhdGlvbnMKW3JlcHItYXR0cmlidXRlXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvdHlwZS1sYXlvdXQuaHRtbCNyZXByYy1lbnVtcwpFMDA4MUEgZGlzY3JpbWluYW50IHZhbHVlIGlzIHByZXNlbnQgbW9yZSB0aGFuIG9uY2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDgxCmVudW0gRW51bSB7CiAgICBQID0gMywKICAgIFggPSAzLCAvLyBlcnJvciEKICAgIFkgPSA1LAp9CmBgYAoKRW51bSBkaXNjcmltaW5hbnRzIGFyZSB1c2VkIHRvIGRpZmZlcmVudGlhdGUgZW51bSB2YXJpYW50cyBzdG9yZWQgaW4gbWVtb3J5LgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBzYW1lIHZhbHVlIHdhcyB1c2VkIGZvciB0d28gb3IgbW9yZSB2YXJpYW50cywKbWFraW5nIGl0IGltcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggdGhlbS4KCmBgYAplbnVtIEVudW0gewogICAgUCwKICAgIFggPSAzLCAvLyBvayEKICAgIFkgPSA1LAp9CmBgYAoKTm90ZSB0aGF0IHZhcmlhbnRzIHdpdGhvdXQgYSBtYW51YWxseSBzcGVjaWZpZWQgZGlzY3JpbWluYW50IGFyZSBudW1iZXJlZCBmcm9tCnRvcCB0byBib3R0b20gc3RhcnRpbmcgZnJvbSAwLCBzbyBjbGFzaGVzIGNhbiBvY2N1ciB3aXRoIHNlZW1pbmdseSB1bnJlbGF0ZWQKdmFyaWFudHMuCgpgYGBjb21waWxlX2ZhaWwsRTAwODEKZW51bSBCYWQgewogICAgWCwKICAgIFkgPSAwLCAvLyBlcnJvciEKfQpgYGAKCkhlcmUgYFhgIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkIHRoZSBkaXNjcmltaW5hbnQgMCBieSB0aGUgdGltZSBgWWAgaXMKZW5jb3VudGVyZWQsIHNvIGEgY29uZmxpY3Qgb2NjdXJzLgpFMDA4NEFuIHVuc3VwcG9ydGVkIHJlcHJlc2VudGF0aW9uIHdhcyBhdHRlbXB0ZWQgb24gYSB6ZXJvLXZhcmlhbnQgZW51bS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwODQKI1tyZXByKGkzMildCmVudW0gTmlnaHRzV2F0Y2gge30gLy8gZXJyb3I6IHVuc3VwcG9ydGVkIHJlcHJlc2VudGF0aW9uIGZvciB6ZXJvLXZhcmlhbnQgZW51bQpgYGAKCkl0IGlzIGltcG9zc2libGUgdG8gZGVmaW5lIGFuIGludGVnZXIgdHlwZSB0byBiZSB1c2VkIHRvIHJlcHJlc2VudCB6ZXJvLXZhcmlhbnQKZW51bSB2YWx1ZXMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gemVyby12YXJpYW50IGVudW0gdmFsdWVzLiBUaGVyZSBpcyBubyB3YXkgdG8KY29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoZSBmb2xsb3dpbmcgdHlwZSB1c2luZyBvbmx5IHNhZmUgY29kZS4gU28geW91IGhhdmUKdHdvIHNvbHV0aW9ucy4gRWl0aGVyIHlvdSBhZGQgdmFyaWFudHMgaW4geW91ciBlbnVtOgoKYGBgCiNbcmVwcihpMzIpXQplbnVtIE5pZ2h0c1dhdGNoIHsKICAgIEpvblNub3csCiAgICBDb21tYW5kZXIsCn0KYGBgCgpvciB5b3UgcmVtb3ZlIHRoZSBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIHlvdXIgZW51bToKCmBgYAplbnVtIE5pZ2h0c1dhdGNoIHt9CmBgYApFMDA4NyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRvbyBtYW55IHR5cGUgYXJndW1lbnRzIHdlcmUgc3VwcGxpZWQgZm9yIGEgZnVuY3Rpb24uIEZvciBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CmZuIGZvbzxUPigpIHt9CgpmbiBtYWluKCkgewogICAgZm9vOjo8ZjY0LCBib29sPigpOyAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZXhwZWN0ZWQgMSwgZm91bmQgMgp9CmBgYAoKVGhlIG51bWJlciBvZiBzdXBwbGllZCBhcmd1bWVudHMgbXVzdCBleGFjdGx5IG1hdGNoIHRoZSBudW1iZXIgb2YgZGVmaW5lZCB0eXBlCnBhcmFtZXRlcnMuCkUwMDg4IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKWW91IGdhdmUgdG9vIG1hbnkgbGlmZXRpbWUgYXJndW1lbnRzLiBFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CmZuIGYoKSB7fQoKZm4gbWFpbigpIHsKICAgIGY6Ojwnc3RhdGljPigpIC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgbGlmZXRpbWUgYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDAsIGZvdW5kIDEKfQpgYGAKClBsZWFzZSBjaGVjayB5b3UgZ2l2ZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGxpZmV0aW1lIGFyZ3VtZW50cy4gRXhhbXBsZToKCmBgYApmbiBmKCkge30KCmZuIG1haW4oKSB7CiAgICBmKCkgLy8gb2shCn0KYGBgCgpJdCdzIGFsc28gaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgUnVzdCBjb21waWxlciBjYW4gZ2VuZXJhbGx5CmRldGVybWluZSB0aGUgbGlmZXRpbWUgYnkgaXRzZWxmLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBGb28gewogICAgdmFsdWU6IFN0cmluZwp9CgppbXBsIEZvbyB7CiAgICAvLyBpdCBjYW4gYmUgd3JpdHRlbiBsaWtlIHRoaXMKICAgIGZuIGdldF92YWx1ZTwnYT4oJidhIHNlbGYpIC0+ICYnYSBzdHIgeyAmc2VsZi52YWx1ZSB9CiAgICAvLyBidXQgdGhlIGNvbXBpbGVyIHdvcmtzIGZpbmUgd2l0aCB0aGlzIHRvbzoKICAgIGZuIHdpdGhvdXRfbGlmZXRpbWUoJnNlbGYpIC0+ICZzdHIgeyAmc2VsZi52YWx1ZSB9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgZiA9IEZvbyB7IHZhbHVlOiAiaGVsbG8iLnRvX293bmVkKCkgfTsKCiAgICBwcmludGxuISgie30iLCBmLmdldF92YWx1ZSgpKTsKICAgIHByaW50bG4hKCJ7fSIsIGYud2l0aG91dF9saWZldGltZSgpKTsKfQpgYGAKRTAwODkjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUb28gZmV3IHR5cGUgYXJndW1lbnRzIHdlcmUgc3VwcGxpZWQgZm9yIGEgZnVuY3Rpb24uIEZvciBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CmZuIGZvbzxULCBVPigpIHt9CgpmbiBtYWluKCkgewogICAgZm9vOjo8ZjY0PigpOyAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzOiBleHBlY3RlZCAyLCBmb3VuZCAxCn0KYGBgCgpOb3RlIHRoYXQgaWYgYSBmdW5jdGlvbiB0YWtlcyBtdWx0aXBsZSB0eXBlIGFyZ3VtZW50cyBidXQgeW91IHdhbnQgdGhlIGNvbXBpbGVyCnRvIGluZmVyIHNvbWUgb2YgdGhlbSwgeW91IGNhbiB1c2UgdHlwZSBwbGFjZWhvbGRlcnM6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDcKZm4gZm9vPFQsIFU+KHg6IFQpIHt9CgpmbiBtYWluKCkgewogICAgbGV0IHg6IGJvb2wgPSB0cnVlOwogICAgZm9vOjo8ZjY0Pih4KTsgICAgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAyLCBmb3VuZCAxCiAgICBmb286OjxfLCBmNjQ+KHgpOyAvLyBzYW1lIGFzIGBmb286Ojxib29sLCBmNjQ+KHgpYAp9CmBgYApFMDA5MCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCllvdSBnYXZlIHRvbyBmZXcgbGlmZXRpbWUgYXJndW1lbnRzLiBFeGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CmZuIGZvbzwnYTogJ2IsICdiOiAnYT4oKSB7fQoKZm4gbWFpbigpIHsKICAgIGZvbzo6PCdzdGF0aWM+KCk7IC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgbGlmZXRpbWUgYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDIsIGZvdW5kIDEKfQpgYGAKClBsZWFzZSBjaGVjayB5b3UgZ2l2ZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGxpZmV0aW1lIGFyZ3VtZW50cy4gRXhhbXBsZToKCmBgYApmbiBmb288J2E6ICdiLCAnYjogJ2E+KCkge30KCmZuIG1haW4oKSB7CiAgICBmb286Ojwnc3RhdGljLCAnc3RhdGljPigpOwp9CmBgYApFMDA5MUFuIHVubmVjZXNzYXJ5IHR5cGUgb3IgY29uc3QgcGFyYW1ldGVyIHdhcyBnaXZlbiBpbiBhIHR5cGUgYWxpYXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDkxCnR5cGUgRm9vPFQ+ID0gdTMyOyAvLyBlcnJvcjogdHlwZSBwYXJhbWV0ZXIgYFRgIGlzIHVudXNlZAovLyBvcjoKdHlwZSBGb288QSxCPiA9IEJveDxBPjsgLy8gZXJyb3I6IHR5cGUgcGFyYW1ldGVyIGBCYCBpcyB1bnVzZWQKYGBgCgpQbGVhc2UgY2hlY2sgeW91IGRpZG4ndCB3cml0ZSB0b28gbWFueSBwYXJhbWV0ZXJzLiBFeGFtcGxlOgoKYGBgCnR5cGUgRm9vID0gdTMyOyAvLyBvayEKdHlwZSBGb28yPEE+ID0gQm94PEE+OyAvLyBvayEKYGBgCkUwMDkyQW4gdW5kZWZpbmVkIGF0b21pYyBvcGVyYXRpb24gZnVuY3Rpb24gd2FzIGRlY2xhcmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA5MgojIVtmZWF0dXJlKGludHJpbnNpY3MpXQoKZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgZm4gYXRvbWljX2ZvbygpOyAvLyBlcnJvcjogdW5yZWNvZ25pemVkIGF0b21pYyBvcGVyYXRpb24KICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGZ1bmN0aW9uCn0KYGBgCgpQbGVhc2UgY2hlY2sgeW91IGRpZG4ndCBtYWtlIGEgbWlzdGFrZSBpbiB0aGUgZnVuY3Rpb24ncyBuYW1lLiBBbGwgaW50cmluc2ljCmZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiBgbGlicnVzdGNfY29kZWdlbl9sbHZtL2ludHJpbnNpYy5yc2AgYW5kIGluCmBsaWJjb3JlL2ludHJpbnNpY3MucnNgIGluIHRoZSBSdXN0IHNvdXJjZSBjb2RlLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBmbiBhdG9taWNfZmVuY2UoKTsgLy8gb2shCn0KYGBgCkUwMDkzQW4gdW5rbm93biBpbnRyaW5zaWMgZnVuY3Rpb24gd2FzIGRlY2xhcmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA5MwojIVtmZWF0dXJlKGludHJpbnNpY3MpXQoKZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgZm4gZm9vKCk7IC8vIGVycm9yOiB1bnJlY29nbml6ZWQgaW50cmluc2ljIGZ1bmN0aW9uOiBgZm9vYAp9CgpmbiBtYWluKCkgewogICAgdW5zYWZlIHsKICAgICAgICBmb28oKTsKICAgIH0KfQpgYGAKClBsZWFzZSBjaGVjayB5b3UgZGlkbid0IG1ha2UgYSBtaXN0YWtlIGluIHRoZSBmdW5jdGlvbidzIG5hbWUuIEFsbCBpbnRyaW5zaWMKZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIGBsaWJydXN0Y19jb2RlZ2VuX2xsdm0vaW50cmluc2ljLnJzYCBhbmQgaW4KYGxpYmNvcmUvaW50cmluc2ljcy5yc2AgaW4gdGhlIFJ1c3Qgc291cmNlIGNvZGUuIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIGZuIGF0b21pY19mZW5jZSgpOyAvLyBvayEKfQoKZm4gbWFpbigpIHsKICAgIHVuc2FmZSB7CiAgICAgICAgYXRvbWljX2ZlbmNlKCk7CiAgICB9Cn0KYGBgCkUwMDk0QW4gaW52YWxpZCBudW1iZXIgb2YgdHlwZSBwYXJhbWV0ZXJzIHdhcyBnaXZlbiB0byBhbiBpbnRyaW5zaWMgZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDk0CiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBmbiBzaXplX29mPFQsIFU+KCkgLT4gdXNpemU7IC8vIGVycm9yOiBpbnRyaW5zaWMgaGFzIHdyb25nIG51bWJlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgb2YgdHlwZSBwYXJhbWV0ZXJzCn0KYGBgCgpQbGVhc2UgY2hlY2sgdGhhdCB5b3UgcHJvdmlkZWQgdGhlIHJpZ2h0IG51bWJlciBvZiB0eXBlIHBhcmFtZXRlcnMKYW5kIHZlcmlmeSB3aXRoIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpbiB0aGUgUnVzdCBzb3VyY2UgY29kZS4KRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGludHJpbnNpY3MpXQoKZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgZm4gc2l6ZV9vZjxUPigpIC0+IHVzaXplOyAvLyBvayEKfQpgYGAKRTAxMDZUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IGEgbGlmZXRpbWUgaXMgbWlzc2luZyBmcm9tIGEgdHlwZS4gSWYgaXQgaXMgYW4gZXJyb3IKaW5zaWRlIGEgZnVuY3Rpb24gc2lnbmF0dXJlLCB0aGUgcHJvYmxlbSBtYXkgYmUgd2l0aCBmYWlsaW5nIHRvIGFkaGVyZSB0byB0aGUKbGlmZXRpbWUgZWxpc2lvbiBydWxlcyAoc2VlIGJlbG93KS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA2CnN0cnVjdCBGb28xIHsgeDogJmJvb2wgfQogICAgICAgICAgICAgIC8vIF4gZXhwZWN0ZWQgbGlmZXRpbWUgcGFyYW1ldGVyCnN0cnVjdCBGb28yPCdhPiB7IHg6ICYnYSBib29sIH0gLy8gY29ycmVjdAoKc3RydWN0IEJhcjEgeyB4OiBGb28yIH0KICAgICAgICAgICAgICAvLyBeXl5eIGV4cGVjdGVkIGxpZmV0aW1lIHBhcmFtZXRlcgpzdHJ1Y3QgQmFyMjwnYT4geyB4OiBGb28yPCdhPiB9IC8vIGNvcnJlY3QKCmVudW0gQmF6MSB7IEEodTgpLCBCKCZib29sKSwgfQogICAgICAgICAgICAgICAgICAvLyBeIGV4cGVjdGVkIGxpZmV0aW1lIHBhcmFtZXRlcgplbnVtIEJhejI8J2E+IHsgQSh1OCksIEIoJidhIGJvb2wpLCB9IC8vIGNvcnJlY3QKCnR5cGUgTXlTdHIxID0gJnN0cjsKICAgICAgICAgICAvLyBeIGV4cGVjdGVkIGxpZmV0aW1lIHBhcmFtZXRlcgp0eXBlIE15U3RyMjwnYT4gPSAmJ2Egc3RyOyAvLyBjb3JyZWN0CmBgYAoKTGlmZXRpbWUgZWxpc2lvbiBpcyBhIHNwZWNpYWwsIGxpbWl0ZWQga2luZCBvZiBpbmZlcmVuY2UgZm9yIGxpZmV0aW1lcyBpbgpmdW5jdGlvbiBzaWduYXR1cmVzIHdoaWNoIGFsbG93cyB5b3UgdG8gbGVhdmUgb3V0IGxpZmV0aW1lcyBpbiBjZXJ0YWluIGNhc2VzLgpGb3IgbW9yZSBiYWNrZ3JvdW5kIG9uIGxpZmV0aW1lIGVsaXNpb24gc2VlIFt0aGUgYm9va11bYm9vay1sZV0uCgpUaGUgbGlmZXRpbWUgZWxpc2lvbiBydWxlcyByZXF1aXJlIHRoYXQgYW55IGZ1bmN0aW9uIHNpZ25hdHVyZSB3aXRoIGFuIGVsaWRlZApvdXRwdXQgbGlmZXRpbWUgbXVzdCBlaXRoZXIgaGF2ZToKCiAtIGV4YWN0bHkgb25lIGlucHV0IGxpZmV0aW1lCiAtIG9yLCBtdWx0aXBsZSBpbnB1dCBsaWZldGltZXMsIGJ1dCB0aGUgZnVuY3Rpb24gbXVzdCBhbHNvIGJlIGEgbWV0aG9kIHdpdGggYQogICBgJnNlbGZgIG9yIGAmbXV0IHNlbGZgIHJlY2VpdmVyCgpJbiB0aGUgZmlyc3QgY2FzZSwgdGhlIG91dHB1dCBsaWZldGltZSBpcyBpbmZlcnJlZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgdW5pcXVlCmlucHV0IGxpZmV0aW1lLiBJbiB0aGUgc2Vjb25kIGNhc2UsIHRoZSBsaWZldGltZSBpcyBpbnN0ZWFkIGluZmVycmVkIHRvIGJlIHRoZQpzYW1lIGFzIHRoZSBsaWZldGltZSBvbiBgJnNlbGZgIG9yIGAmbXV0IHNlbGZgLgoKSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBlbGlzaW9uIGVycm9yczoKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNgovLyBlcnJvciwgbm8gaW5wdXQgbGlmZXRpbWVzCmZuIGZvbygpIC0+ICZzdHIgeyB9CgovLyBlcnJvciwgYHhgIGFuZCBgeWAgaGF2ZSBkaXN0aW5jdCBsaWZldGltZXMgaW5mZXJyZWQKZm4gYmFyKHg6ICZzdHIsIHk6ICZzdHIpIC0+ICZzdHIgeyB9CgovLyBlcnJvciwgYHlgJ3MgbGlmZXRpbWUgaXMgaW5mZXJyZWQgdG8gYmUgZGlzdGluY3QgZnJvbSBgeGAncwpmbiBiYXo8J2E+KHg6ICYnYSBzdHIsIHk6ICZzdHIpIC0+ICZzdHIgeyB9CmBgYAoKW2Jvb2stbGVdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxMC0wMy1saWZldGltZS1zeW50YXguaHRtbCNsaWZldGltZS1lbGlzaW9uCkUwMTA3QW4gaW5jb3JyZWN0IG51bWJlciBvZiBnZW5lcmljIGFyZ3VtZW50cyB3ZXJlIHByb3ZpZGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpzdHJ1Y3QgRm9vPFQ+IHsgeDogVCB9CgpzdHJ1Y3QgQmFyIHsgeDogRm9vIH0gICAgICAgICAgICAgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAxLCBmb3VuZCAwCnN0cnVjdCBCYXo8UywgVD4geyB4OiBGb288UywgVD4gfSAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDEsIGZvdW5kIDIKCmZuIGZvbzxULCBVPih4OiBULCB5OiBVKSB7fQpmbiBmKCkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeDogYm9vbCA9IHRydWU7CiAgICBmb286Ojxib29sPih4KTsgICAgICAgICAgICAgICAgIC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAyLCBmb3VuZCAxCiAgICBmb286Ojxib29sLCBpMzIsIGkzMj4oeCwgMiwgNCk7IC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAyLCBmb3VuZCAzCiAgICBmOjo8J3N0YXRpYz4oKTsgICAgICAgICAgICAgICAgIC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgbGlmZXRpbWUgYXJndW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAwLCBmb3VuZCAxCn0KYGBgCgpXaGVuIHVzaW5nL2RlY2xhcmluZyBhbiBpdGVtIHdpdGggZ2VuZXJpYyBhcmd1bWVudHMsIHlvdSBtdXN0IHByb3ZpZGUgdGhlIGV4YWN0CnNhbWUgbnVtYmVyOgoKYGBgCnN0cnVjdCBGb288VD4geyB4OiBUIH0KCnN0cnVjdCBCYXI8VD4geyB4OiBGb288VD4gfSAgICAgICAgICAgICAgIC8vIG9rIQpzdHJ1Y3QgQmF6PFMsIFQ+IHsgeDogRm9vPFM+LCB5OiBGb288VD4gfSAvLyBvayEKCmZuIGZvbzxULCBVPih4OiBULCB5OiBVKSB7fQpmbiBmKCkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeDogYm9vbCA9IHRydWU7CiAgICBmb286Ojxib29sLCB1MzI+KHgsIDEyKTsgICAgICAgICAgICAgIC8vIG9rIQogICAgZigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvayEKfQpgYGAKRTAxMDlZb3UgdHJpZWQgdG8gcHJvdmlkZSBhIGdlbmVyaWMgYXJndW1lbnQgdG8gYSB0eXBlIHdoaWNoIGRvZXNuJ3QgbmVlZCBpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDkKdHlwZSBYID0gdTMyPGkzMj47IC8vIGVycm9yOiB0eXBlIGFyZ3VtZW50cyBhcmUgbm90IGFsbG93ZWQgZm9yIHRoaXMgdHlwZQp0eXBlIFkgPSBib29sPCdzdGF0aWM+OyAvLyBlcnJvcjogbGlmZXRpbWUgcGFyYW1ldGVycyBhcmUgbm90IGFsbG93ZWQgb24KICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHRoaXMgdHlwZQpgYGAKCkNoZWNrIHRoYXQgeW91IHVzZWQgdGhlIGNvcnJlY3QgYXJndW1lbnQgYW5kIHRoYXQgdGhlIGRlZmluaXRpb24gaXMgY29ycmVjdC4KCkV4YW1wbGU6CgpgYGAKdHlwZSBYID0gdTMyOyAvLyBvayEKdHlwZSBZID0gYm9vbDsgLy8gb2shCmBgYAoKTm90ZSB0aGF0IGdlbmVyaWMgYXJndW1lbnRzIGZvciBlbnVtIHZhcmlhbnQgY29uc3RydWN0b3JzIGdvIGFmdGVyIHRoZSB2YXJpYW50LApub3QgYWZ0ZXIgdGhlIGVudW0uIEZvciBleGFtcGxlLCB5b3Ugd291bGQgd3JpdGUgYE9wdGlvbjo6Tm9uZTo6PHUzMj5gLApyYXRoZXIgdGhhbiBgT3B0aW9uOjo8dTMyPjo6Tm9uZWAuCkUwMTEwIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKWW91IHRyaWVkIHRvIHByb3ZpZGUgYSBsaWZldGltZSB0byBhIHR5cGUgd2hpY2ggZG9lc24ndCBuZWVkIGl0LgpTZWUgYEUwMTA5YCBmb3IgbW9yZSBkZXRhaWxzLgpFMDExNkFuIGluaGVyZW50IGltcGxlbWVudGF0aW9uIHdhcyBkZWZpbmVkIGZvciBhIHR5cGUgb3V0c2lkZSB0aGUgY3VycmVudCBjcmF0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMTYKaW1wbCBWZWM8dTg+IHsgfSAvLyBlcnJvcgpgYGAKCllvdSBjYW4gb25seSBkZWZpbmUgYW4gaW5oZXJlbnQgaW1wbGVtZW50YXRpb24gZm9yIGEgdHlwZSBpbiB0aGUgc2FtZSBjcmF0ZQp3aGVyZSB0aGUgdHlwZSB3YXMgZGVmaW5lZC4gRm9yIGV4YW1wbGUsIGFuIGBpbXBsYCBibG9jayBhcyBhYm92ZSBpcyBub3QgYWxsb3dlZApzaW5jZSBgVmVjYCBpcyBkZWZpbmVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgoKVG8gZml4IHRoaXMgcHJvYmxlbSwgeW91IGNhbiBkbyBlaXRoZXIgb2YgdGhlc2UgdGhpbmdzOgoKIC0gZGVmaW5lIGEgdHJhaXQgdGhhdCBoYXMgdGhlIGRlc2lyZWQgYXNzb2NpYXRlZCBmdW5jdGlvbnMvdHlwZXMvY29uc3RhbnRzIGFuZAogICBpbXBsZW1lbnQgdGhlIHRyYWl0IGZvciB0aGUgdHlwZSBpbiBxdWVzdGlvbgogLSBkZWZpbmUgYSBuZXcgdHlwZSB3cmFwcGluZyB0aGUgdHlwZSBhbmQgZGVmaW5lIGFuIGltcGxlbWVudGF0aW9uIG9uIHRoZSBuZXcKICAgdHlwZQoKTm90ZSB0aGF0IHVzaW5nIHRoZSBgdHlwZWAga2V5d29yZCBkb2VzIG5vdCB3b3JrIGhlcmUgYmVjYXVzZSBgdHlwZWAgb25seQppbnRyb2R1Y2VzIGEgdHlwZSBhbGlhczoKCmBgYGNvbXBpbGVfZmFpbCxFMDExNgp0eXBlIEJ5dGVzID0gVmVjPHU4PjsKCmltcGwgQnl0ZXMgeyB9IC8vIGVycm9yLCBzYW1lIGFzIGFib3ZlCmBgYApFMDExN09ubHkgdHJhaXRzIGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgY3JhdGUgY2FuIGJlIGltcGxlbWVudGVkIGZvciBhcmJpdHJhcnkgdHlwZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTE3CmltcGwgRHJvcCBmb3IgdTMyIHt9CmBgYAoKVGhpcyBlcnJvciBpbmRpY2F0ZXMgYSB2aW9sYXRpb24gb2Ygb25lIG9mIFJ1c3QncyBvcnBoYW4gcnVsZXMgZm9yIHRyYWl0CmltcGxlbWVudGF0aW9ucy4gVGhlIHJ1bGUgcHJvaGliaXRzIGFueSBpbXBsZW1lbnRhdGlvbiBvZiBhIGZvcmVpZ24gdHJhaXQgKGEKdHJhaXQgZGVmaW5lZCBpbiBhbm90aGVyIGNyYXRlKSB3aGVyZQoKIC0gdGhlIHR5cGUgdGhhdCBpcyBpbXBsZW1lbnRpbmcgdGhlIHRyYWl0IGlzIGZvcmVpZ24KIC0gYWxsIG9mIHRoZSBwYXJhbWV0ZXJzIGJlaW5nIHBhc3NlZCB0byB0aGUgdHJhaXQgKGlmIHRoZXJlIGFyZSBhbnkpIGFyZSBhbHNvCiAgIGZvcmVpZ24uCgpUbyBhdm9pZCB0aGlzIGtpbmQgb2YgZXJyb3IsIGVuc3VyZSB0aGF0IGF0IGxlYXN0IG9uZSBsb2NhbCB0eXBlIGlzIHJlZmVyZW5jZWQKYnkgdGhlIGBpbXBsYDoKCmBgYApwdWIgc3RydWN0IEZvbzsgLy8geW91IGRlZmluZSB5b3VyIHR5cGUgaW4geW91ciBjcmF0ZQoKaW1wbCBEcm9wIGZvciBGb28geyAvLyBhbmQgeW91IGNhbiBpbXBsZW1lbnQgdGhlIHRyYWl0IG9uIGl0IQogICAgLy8gY29kZSBvZiB0cmFpdCBpbXBsZW1lbnRhdGlvbiBoZXJlCiMgICBmbiBkcm9wKCZtdXQgc2VsZikgeyB9Cn0KCmltcGwgRnJvbTxGb28+IGZvciBpMzIgeyAvLyBvciB5b3UgdXNlIGEgdHlwZSBmcm9tIHlvdXIgY3JhdGUgYXMKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgdHlwZSBwYXJhbWV0ZXIKICAgIGZuIGZyb20oaTogRm9vKSAtPiBpMzIgewogICAgICAgIDAKICAgIH0KfQpgYGAKCkFsdGVybmF0aXZlbHksIGRlZmluZSBhIHRyYWl0IGxvY2FsbHkgYW5kIGltcGxlbWVudCB0aGF0IGluc3RlYWQ6CgpgYGAKdHJhaXQgQmFyIHsKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemU7Cn0KCmltcGwgQmFyIGZvciB1MzIgewogICAgZm4gZ2V0KCZzZWxmKSAtPiB1c2l6ZSB7IDAgfQp9CmBgYAoKRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBkZXNpZ24gb2YgdGhlIG9ycGhhbiBydWxlcywgc2VlIFtSRkMgMTAyM10uCgpbUkZDIDEwMjNdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8xMDIzLXJlYmFsYW5jaW5nLWNvaGVyZW5jZS5tZApFMDExOEFuIGluaGVyZW50IGltcGxlbWVudGF0aW9uIHdhcyBkZWZpbmVkIGZvciBzb21ldGhpbmcgd2hpY2ggaXNuJ3QgYSBzdHJ1Y3Qgbm9yCmFuIGVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTE4CmltcGwgKHU4LCB1OCkgeyAvLyBlcnJvcjogbm8gYmFzZSB0eXBlIGZvdW5kIGZvciBpbmhlcmVudCBpbXBsZW1lbnRhdGlvbgogICAgZm4gZ2V0X3N0YXRlKCZzZWxmKSAtPiBTdHJpbmcgewogICAgICAgIC8vIC4uLgogICAgfQp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHBsZWFzZSBpbXBsZW1lbnQgYSB0cmFpdCBvbiB0aGUgdHlwZSBvciB3cmFwIGl0IGluIGEgc3RydWN0LgpFeGFtcGxlOgoKYGBgCi8vIHdlIGNyZWF0ZSBhIHRyYWl0IGhlcmUKdHJhaXQgTGl2ZUxvbmdBbmRQcm9zcGVyIHsKICAgIGZuIGdldF9zdGF0ZSgmc2VsZikgLT4gU3RyaW5nOwp9CgovLyBhbmQgbm93IHlvdSBjYW4gaW1wbGVtZW50IGl0IG9uICh1OCwgdTgpCmltcGwgTGl2ZUxvbmdBbmRQcm9zcGVyIGZvciAodTgsIHU4KSB7CiAgICBmbiBnZXRfc3RhdGUoJnNlbGYpIC0+IFN0cmluZyB7CiAgICAgICAgIkhlJ3MgZGVhZCwgSmltISIudG9fb3duZWQoKQogICAgfQp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBjcmVhdGUgYSBuZXd0eXBlLiBBIG5ld3R5cGUgaXMgYSB3cmFwcGluZyB0dXBsZS1zdHJ1Y3QuCkZvciBleGFtcGxlLCBgTmV3VHlwZWAgaXMgYSBuZXd0eXBlIG92ZXIgYEZvb2AgaW4gYHN0cnVjdCBOZXdUeXBlKEZvbylgLgpFeGFtcGxlOgoKYGBgCnN0cnVjdCBUeXBlV3JhcHBlcigodTgsIHU4KSk7CgppbXBsIFR5cGVXcmFwcGVyIHsKICAgIGZuIGdldF9zdGF0ZSgmc2VsZikgLT4gU3RyaW5nIHsKICAgICAgICAiRmFzY2luYXRpbmchIi50b19vd25lZCgpCiAgICB9Cn0KYGBgCkUwMTE5VGhlcmUgYXJlIGNvbmZsaWN0aW5nIHRyYWl0IGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIHNhbWUgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMTkKdHJhaXQgTXlUcmFpdCB7CiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplOwp9CgppbXBsPFQ+IE15VHJhaXQgZm9yIFQgewogICAgZm4gZ2V0KCZzZWxmKSAtPiB1c2l6ZSB7IDAgfQp9CgpzdHJ1Y3QgRm9vIHsKICAgIHZhbHVlOiB1c2l6ZQp9CgppbXBsIE15VHJhaXQgZm9yIEZvbyB7IC8vIGVycm9yOiBjb25mbGljdGluZyBpbXBsZW1lbnRhdGlvbnMgb2YgdHJhaXQKICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYE15VHJhaXRgIGZvciB0eXBlIGBGb29gCiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplIHsgc2VsZi52YWx1ZSB9Cn0KYGBgCgpXaGVuIGxvb2tpbmcgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHRyYWl0LCB0aGUgY29tcGlsZXIgZmluZHMKYm90aCB0aGUgYGltcGw8VD4gTXlUcmFpdCBmb3IgVGAgd2hlcmUgVCBpcyBhbGwgdHlwZXMgYW5kIHRoZSBgaW1wbApNeVRyYWl0IGZvciBGb29gLiBTaW5jZSBhIHRyYWl0IGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBtdWx0aXBsZSB0aW1lcywKdGhpcyBpcyBhbiBlcnJvci4gU28sIHdoZW4geW91IHdyaXRlOgoKYGBgCnRyYWl0IE15VHJhaXQgewogICAgZm4gZ2V0KCZzZWxmKSAtPiB1c2l6ZTsKfQoKaW1wbDxUPiBNeVRyYWl0IGZvciBUIHsKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemUgeyAwIH0KfQpgYGAKClRoaXMgbWFrZXMgdGhlIHRyYWl0IGltcGxlbWVudGVkIG9uIGFsbCB0eXBlcyBpbiB0aGUgc2NvcGUuIFNvIGlmIHlvdQp0cnkgdG8gaW1wbGVtZW50IGl0IG9uIGFub3RoZXIgb25lIGFmdGVyIHRoYXQsIHRoZSBpbXBsZW1lbnRhdGlvbnMgd2lsbApjb25mbGljdC4gRXhhbXBsZToKCmBgYAp0cmFpdCBNeVRyYWl0IHsKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemU7Cn0KCmltcGw8VD4gTXlUcmFpdCBmb3IgVCB7CiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplIHsgMCB9Cn0KCnN0cnVjdCBGb287CgpmbiBtYWluKCkgewogICAgbGV0IGYgPSBGb287CgogICAgZi5nZXQoKTsgLy8gdGhlIHRyYWl0IGlzIGltcGxlbWVudGVkIHNvIHdlIGNhbiB1c2UgaXQKfQpgYGAKRTAxMjBEcm9wIHdhcyBpbXBsZW1lbnRlZCBvbiBhIHRyYWl0LCB3aGljaCBpcyBub3QgYWxsb3dlZDogb25seSBzdHJ1Y3RzIGFuZAplbnVtcyBjYW4gaW1wbGVtZW50IERyb3AuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTIwCnRyYWl0IE15VHJhaXQge30KCmltcGwgRHJvcCBmb3IgTXlUcmFpdCB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQpgYGAKCkEgd29ya2Fyb3VuZCBmb3IgdGhpcyBwcm9ibGVtIGlzIHRvIHdyYXAgdGhlIHRyYWl0IHVwIGluIGEgc3RydWN0LCBhbmQgaW1wbGVtZW50CkRyb3Agb24gdGhhdDoKCmBgYAp0cmFpdCBNeVRyYWl0IHt9CnN0cnVjdCBNeVdyYXBwZXI8VDogTXlUcmFpdD4geyBmb286IFQgfQoKaW1wbCA8VDogTXlUcmFpdD4gRHJvcCBmb3IgTXlXcmFwcGVyPFQ+IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CgpgYGAKCkFsdGVybmF0aXZlbHksIHdyYXBwaW5nIHRyYWl0IG9iamVjdHMgcmVxdWlyZXMgc29tZXRoaW5nOgoKYGBgCnRyYWl0IE15VHJhaXQge30KCi8vb3IgQm94PE15VHJhaXQ+LCBpZiB5b3Ugd2FudGVkIGFuIG93bmVkIHRyYWl0IG9iamVjdApzdHJ1Y3QgTXlXcmFwcGVyPCdhPiB7IGZvbzogJidhIE15VHJhaXQgfQoKaW1wbCA8J2E+IERyb3AgZm9yIE15V3JhcHBlcjwnYT4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KYGBgCkUwMTIxVGhlIHR5cGUgcGxhY2Vob2xkZXIgYF9gIHdhcyB1c2VkIHdpdGhpbiBhIHR5cGUgb24gYW4gaXRlbSdzIHNpZ25hdHVyZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMjEKZm4gZm9vKCkgLT4gXyB7IDUgfSAvLyBlcnJvcgoKc3RhdGljIEJBUjogXyA9ICJ0ZXN0IjsgLy8gZXJyb3IKYGBgCgpJbiB0aG9zZSBjYXNlcywgeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgdHlwZSBleHBsaWNpdGx5OgoKYGBgCmZuIGZvbygpIC0+IGkzMiB7IDUgfSAvLyBvayEKCnN0YXRpYyBCQVI6ICZzdHIgPSAidGVzdCI7IC8vIG9rIQpgYGAKClRoZSB0eXBlIHBsYWNlaG9sZGVyIGBfYCBjYW4gYmUgdXNlZCBvdXRzaWRlIGl0ZW0ncyBzaWduYXR1cmUgYXMgZm9sbG93czoKCmBgYApsZXQgeCA9ICJhNGEiLnNwbGl0KCc0JykKICAgIC5jb2xsZWN0Ojo8VmVjPF8+PigpOyAvLyBObyBuZWVkIHRvIHByZWNpc2UgdGhlIFZlYydzIGdlbmVyaWMgdHlwZS4KYGBgCkUwMTI0QSBzdHJ1Y3Qgd2FzIGRlY2xhcmVkIHdpdGggdHdvIGZpZWxkcyBoYXZpbmcgdGhlIHNhbWUgbmFtZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMjQKc3RydWN0IEZvbyB7CiAgICBmaWVsZDE6IGkzMiwKICAgIGZpZWxkMTogaTMyLCAvLyBlcnJvcjogZmllbGQgaXMgYWxyZWFkeSBkZWNsYXJlZAp9CmBgYAoKUGxlYXNlIHZlcmlmeSB0aGF0IHRoZSBmaWVsZCBuYW1lcyBoYXZlIGJlZW4gY29ycmVjdGx5IHNwZWxsZWQuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbyB7CiAgICBmaWVsZDE6IGkzMiwKICAgIGZpZWxkMjogaTMyLCAvLyBvayEKfQpgYGAKRTAxMjhBIHR5cGUgcGFyYW1ldGVyIHdpdGggZGVmYXVsdCB2YWx1ZSBpcyB1c2luZyBmb3J3YXJkIGRlY2xhcmVkIGlkZW50aWZpZXIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTI4CnN0cnVjdCBGb288VCA9IFUsIFUgPSAoKT4gewogICAgZmllbGQxOiBULAogICAgZmllbGQyOiBVLAp9Ci8vIGVycm9yOiB0eXBlIHBhcmFtZXRlcnMgd2l0aCBhIGRlZmF1bHQgY2Fubm90IHVzZSBmb3J3YXJkIGRlY2xhcmVkCi8vICAgICAgICBpZGVudGlmaWVycwpgYGAKClR5cGUgcGFyYW1ldGVyIGRlZmF1bHRzIGNhbiBvbmx5IHVzZSBwYXJhbWV0ZXJzIHRoYXQgb2NjdXIgYmVmb3JlIHRoZW0uIFNpbmNlCnR5cGUgcGFyYW1ldGVycyBhcmUgZXZhbHVhdGVkIGluLW9yZGVyLCB0aGlzIGlzc3VlIGNvdWxkIGJlIGZpeGVkIGJ5IGRvaW5nOgoKYGBgCnN0cnVjdCBGb288VSA9ICgpLCBUID0gVT4gewogICAgZmllbGQxOiBULAogICAgZmllbGQyOiBVLAp9CmBgYAoKUGxlYXNlIGFsc28gdmVyaWZ5IHRoYXQgdGhpcyB3YXNuJ3QgYmVjYXVzZSBvZiBhIG5hbWUtY2xhc2ggYW5kIHJlbmFtZSB0aGUgdHlwZQpwYXJhbWV0ZXIgaWYgc28uCkUwMTMwQSBwYXR0ZXJuIHdhcyBkZWNsYXJlZCBhcyBhbiBhcmd1bWVudCBpbiBhIGZvcmVpZ24gZnVuY3Rpb24gZGVjbGFyYXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTMwCmV4dGVybiB7CiAgICBmbiBmb28oKGEsIGIpOiAodTMyLCB1MzIpKTsgLy8gZXJyb3I6IHBhdHRlcm5zIGFyZW4ndCBhbGxvd2VkIGluIGZvcmVpZ24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZnVuY3Rpb24gZGVjbGFyYXRpb25zCn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcmVwbGFjZSB0aGUgcGF0dGVybiBhcmd1bWVudCB3aXRoIGEgcmVndWxhciBvbmUuIEV4YW1wbGU6CgpgYGAKc3RydWN0IFNvbWVTdHJ1Y3QgewogICAgYTogdTMyLAogICAgYjogdTMyLAp9CgpleHRlcm4gewogICAgZm4gZm9vKHM6IFNvbWVTdHJ1Y3QpOyAvLyBvayEKfQpgYGAKCk9yOgoKYGBgCmV4dGVybiB7CiAgICBmbiBmb28oYTogKHUzMiwgdTMyKSk7IC8vIG9rIQp9CmBgYApFMDEzMVRoZSBgbWFpbmAgZnVuY3Rpb24gd2FzIGRlZmluZWQgd2l0aCBnZW5lcmljIHBhcmFtZXRlcnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTMxCmZuIG1haW48VD4oKSB7IC8vIGVycm9yOiBtYWluIGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkIHRvIGhhdmUgZ2VuZXJpYyBwYXJhbWV0ZXJzCn0KYGBgCgpJdCBpcyBub3QgcG9zc2libGUgdG8gZGVmaW5lIHRoZSBgbWFpbmAgZnVuY3Rpb24gd2l0aCBnZW5lcmljIHBhcmFtZXRlcnMuCkl0IG11c3Qgbm90IHRha2UgYW55IGFyZ3VtZW50cy4KRTAxMzJBIGZ1bmN0aW9uIHdpdGggdGhlIGBzdGFydGAgYXR0cmlidXRlIHdhcyBkZWNsYXJlZCB3aXRoIHR5cGUgcGFyYW1ldGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMzIKIyFbZmVhdHVyZShzdGFydCldCgojW3N0YXJ0XQpmbiBmPFQ+KCkge30KYGBgCgpJdCBpcyBub3QgcG9zc2libGUgdG8gZGVjbGFyZSB0eXBlIHBhcmFtZXRlcnMgb24gYSBmdW5jdGlvbiB0aGF0IGhhcyB0aGUgYHN0YXJ0YAphdHRyaWJ1dGUuIFN1Y2ggYSBmdW5jdGlvbiBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyB0eXBlIHNpZ25hdHVyZSAoZm9yIG1vcmUKaW5mb3JtYXRpb24sIHZpZXcgW3RoZSB1bnN0YWJsZSBib29rXVsxXSk6CgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvdW5zdGFibGUtYm9vay9sYW5ndWFnZS1mZWF0dXJlcy9sYW5nLWl0ZW1zLmh0bWwjd3JpdGluZy1hbi1leGVjdXRhYmxlLXdpdGhvdXQtc3RkbGliCgpgYGAKIyBsZXQgXzoKZm4oaXNpemUsICpjb25zdCAqY29uc3QgdTgpIC0+IGlzaXplOwpgYGAKCkV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShzdGFydCldCgojW3N0YXJ0XQpmbiBteV9zdGFydChhcmdjOiBpc2l6ZSwgYXJndjogKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemUgewogICAgMAp9CmBgYApFMDEzM1Vuc2FmZSBjb2RlIHdhcyB1c2VkIG91dHNpZGUgb2YgYW4gdW5zYWZlIGZ1bmN0aW9uIG9yIGJsb2NrLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEzMwp1bnNhZmUgZm4gZigpIHsgcmV0dXJuOyB9IC8vIFRoaXMgaXMgdGhlIHVuc2FmZSBjb2RlCgpmbiBtYWluKCkgewogICAgZigpOyAvLyBlcnJvcjogY2FsbCB0byB1bnNhZmUgZnVuY3Rpb24gcmVxdWlyZXMgdW5zYWZlIGZ1bmN0aW9uIG9yIGJsb2NrCn0KYGBgCgpVc2luZyB1bnNhZmUgZnVuY3Rpb25hbGl0eSBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMgYW5kIGRpc2FsbG93ZWQgYnkgc2FmZXR5CmNoZWNrcy4gRXhhbXBsZXM6CgoqIERlcmVmZXJlbmNpbmcgcmF3IHBvaW50ZXJzCiogQ2FsbGluZyBmdW5jdGlvbnMgdmlhIEZGSQoqIENhbGxpbmcgZnVuY3Rpb25zIG1hcmtlZCB1bnNhZmUKClRoZXNlIHNhZmV0eSBjaGVja3MgY2FuIGJlIHJlbGF4ZWQgZm9yIGEgc2VjdGlvbiBvZiB0aGUgY29kZSBieSB3cmFwcGluZyB0aGUKdW5zYWZlIGluc3RydWN0aW9ucyB3aXRoIGFuIGB1bnNhZmVgIGJsb2NrLiBGb3IgaW5zdGFuY2U6CgpgYGAKdW5zYWZlIGZuIGYoKSB7IHJldHVybjsgfQoKZm4gbWFpbigpIHsKICAgIHVuc2FmZSB7IGYoKTsgfSAvLyBvayEKfQpgYGAKClNlZSB0aGUgW3Vuc2FmZSBzZWN0aW9uXVt1bnNhZmUtc2VjdGlvbl0gb2YgdGhlIEJvb2sgZm9yIG1vcmUgZGV0YWlscy4KClt1bnNhZmUtc2VjdGlvbl06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDE5LTAxLXVuc2FmZS1ydXN0Lmh0bWwKRTAxMzZNb3JlIHRoYW4gb25lIGBtYWluYCBmdW5jdGlvbiB3YXMgZm91bmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTM2CmZuIG1haW4oKSB7CiAgICAvLyAuLi4KfQoKLy8gLi4uCgpmbiBtYWluKCkgeyAvLyBlcnJvciEKICAgIC8vIC4uLgp9CmBgYAoKQSBiaW5hcnkgY2FuIG9ubHkgaGF2ZSBvbmUgZW50cnkgcG9pbnQsIGFuZCBieSBkZWZhdWx0IHRoYXQgZW50cnkgcG9pbnQgaXMgdGhlCmBtYWluKClgIGZ1bmN0aW9uLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMgZnVuY3Rpb24sIHBsZWFzZQpyZW5hbWUgb25lIG9mIHRoZW0uCkUwMTM3TW9yZSB0aGFuIG9uZSBmdW5jdGlvbiB3YXMgZGVjbGFyZWQgd2l0aCB0aGUgYCNbbWFpbl1gIGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMzcKIyFbZmVhdHVyZShtYWluKV0KCiNbbWFpbl0KZm4gZm9vKCkge30KCiNbbWFpbl0KZm4gZigpIHt9IC8vIGVycm9yOiBtdWx0aXBsZSBmdW5jdGlvbnMgd2l0aCBhIGAjW21haW5dYCBhdHRyaWJ1dGUKYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBjb21waWxlciBmb3VuZCBtdWx0aXBsZSBmdW5jdGlvbnMgd2l0aCB0aGUKYCNbbWFpbl1gIGF0dHJpYnV0ZS4gVGhpcyBpcyBhbiBlcnJvciBiZWNhdXNlIHRoZXJlIG11c3QgYmUgYSB1bmlxdWUgZW50cnkKcG9pbnQgaW50byBhIFJ1c3QgcHJvZ3JhbS4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKG1haW4pXQoKI1ttYWluXQpmbiBmKCkge30gLy8gb2shCmBgYApFMDEzOE1vcmUgdGhhbiBvbmUgZnVuY3Rpb24gd2FzIGRlY2xhcmVkIHdpdGggdGhlIGAjW3N0YXJ0XWAgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEzOAojIVtmZWF0dXJlKHN0YXJ0KV0KCiNbc3RhcnRdCmZuIGZvbyhhcmdjOiBpc2l6ZSwgYXJndjogKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemUge30KCiNbc3RhcnRdCmZuIGYoYXJnYzogaXNpemUsIGFyZ3Y6ICpjb25zdCAqY29uc3QgdTgpIC0+IGlzaXplIHt9Ci8vIGVycm9yOiBtdWx0aXBsZSAnc3RhcnQnIGZ1bmN0aW9ucwpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbXBpbGVyIGZvdW5kIG11bHRpcGxlIGZ1bmN0aW9ucyB3aXRoIHRoZQpgI1tzdGFydF1gIGF0dHJpYnV0ZS4gVGhpcyBpcyBhbiBlcnJvciBiZWNhdXNlIHRoZXJlIG11c3QgYmUgYSB1bmlxdWUgZW50cnkKcG9pbnQgaW50byBhIFJ1c3QgcHJvZ3JhbS4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHN0YXJ0KV0KCiNbc3RhcnRdCmZuIGZvbyhhcmdjOiBpc2l6ZSwgYXJndjogKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemUgeyAwIH0gLy8gb2shCmBgYApFMDEzOSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoZXJlIGFyZSB2YXJpb3VzIHJlc3RyaWN0aW9ucyBvbiB0cmFuc211dGluZyBiZXR3ZWVuIHR5cGVzIGluIFJ1c3Q7IGZvciBleGFtcGxlCnR5cGVzIGJlaW5nIHRyYW5zbXV0ZWQgbXVzdCBoYXZlIHRoZSBzYW1lIHNpemUuIFRvIGFwcGx5IGFsbCB0aGVzZSByZXN0cmljdGlvbnMsCnRoZSBjb21waWxlciBtdXN0IGtub3cgdGhlIGV4YWN0IHR5cGVzIHRoYXQgbWF5IGJlIHRyYW5zbXV0ZWQuIFdoZW4gdHlwZQpwYXJhbWV0ZXJzIGFyZSBpbnZvbHZlZCwgdGhpcyBjYW5ub3QgYWx3YXlzIGJlIGRvbmUuCgpTbywgZm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgaXMgbm90IGFsbG93ZWQ6CgpgYGAKdXNlIHN0ZDo6bWVtOjp0cmFuc211dGU7CgpzdHJ1Y3QgRm9vPFQ+KFZlYzxUPik7CgpmbiBmb288VD4oeDogVmVjPFQ+KSB7CiAgICAvLyB3ZSBhcmUgdHJhbnNtdXRpbmcgYmV0d2VlbiBWZWM8VD4gYW5kIEZvbzxGPiBoZXJlCiAgICBsZXQgeTogRm9vPFQ+ID0gdW5zYWZlIHsgdHJhbnNtdXRlKHgpIH07CiAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB5Cn0KYGBgCgpJbiB0aGlzIHNwZWNpZmljIGNhc2UgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgdGhlIHRyYW5zbXV0ZSBpcyBoYXJtbGVzcyAoYnV0CnRoaXMgaXMgbm90IGd1YXJhbnRlZWQgYnkgUnVzdCkuIEhvd2V2ZXIsIHdoZW4gYWxpZ25tZW50IGFuZCBlbnVtIG9wdGltaXphdGlvbnMKY29tZSBpbnRvIHRoZSBwaWN0dXJlLCBpdCdzIHF1aXRlIGxpa2VseSB0aGF0IHRoZSBzaXplcyBtYXkgb3IgbWF5IG5vdCBtYXRjaAp3aXRoIGRpZmZlcmVudCB0eXBlIHBhcmFtZXRlciBzdWJzdGl0dXRpb25zLiBJdCdzIG5vdCBwb3NzaWJsZSB0byBjaGVjayB0aGlzIGZvcgpfYWxsXyBwb3NzaWJsZSB0eXBlcywgc28gYHRyYW5zbXV0ZSgpYCBzaW1wbHkgb25seSBhY2NlcHRzIHR5cGVzIHdpdGhvdXQgYW55CnVuc3Vic3RpdHV0ZWQgdHlwZSBwYXJhbWV0ZXJzLgoKSWYgeW91IG5lZWQgdGhpcywgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHlvdSdyZSBkb2luZyBzb21ldGhpbmcgd3JvbmcuIEtlZXAgaW4KbWluZCB0aGF0IFJ1c3QgZG9lc24ndCBndWFyYW50ZWUgbXVjaCBhYm91dCB0aGUgbGF5b3V0IG9mIGRpZmZlcmVudCBzdHJ1Y3RzCihldmVuIHR3byBzdHJ1Y3RzIHdpdGggaWRlbnRpY2FsIGRlY2xhcmF0aW9ucyBtYXkgaGF2ZSBkaWZmZXJlbnQgbGF5b3V0cykuIElmCnRoZXJlIGlzIGEgc29sdXRpb24gdGhhdCBhdm9pZHMgdGhlIHRyYW5zbXV0ZSBlbnRpcmVseSwgdHJ5IGl0IGluc3RlYWQuCgpJZiBpdCdzIHBvc3NpYmxlLCBoYW5kLW1vbm9tb3JwaGl6ZSB0aGUgY29kZSBieSB3cml0aW5nIHRoZSBmdW5jdGlvbiBmb3IgZWFjaApwb3NzaWJsZSB0eXBlIHN1YnN0aXR1dGlvbi4gSXQncyBwb3NzaWJsZSB0byB1c2UgdHJhaXRzIHRvIGRvIHRoaXMgY2xlYW5seSwKZm9yIGV4YW1wbGU6CgpgYGAKdXNlIHN0ZDo6bWVtOjp0cmFuc211dGU7CgpzdHJ1Y3QgRm9vPFQ+KFZlYzxUPik7Cgp0cmFpdCBNeVRyYW5zbXV0YWJsZVR5cGU6IFNpemVkIHsKICAgIGZuIHRyYW5zbXV0ZShfOiBWZWM8U2VsZj4pIC0+IEZvbzxTZWxmPjsKfQoKaW1wbCBNeVRyYW5zbXV0YWJsZVR5cGUgZm9yIHU4IHsKICAgIGZuIHRyYW5zbXV0ZSh4OiBWZWM8dTg+KSAtPiBGb288dTg+IHsKICAgICAgICB1bnNhZmUgeyB0cmFuc211dGUoeCkgfQogICAgfQp9CgppbXBsIE15VHJhbnNtdXRhYmxlVHlwZSBmb3IgU3RyaW5nIHsKICAgIGZuIHRyYW5zbXV0ZSh4OiBWZWM8U3RyaW5nPikgLT4gRm9vPFN0cmluZz4gewogICAgICAgIHVuc2FmZSB7IHRyYW5zbXV0ZSh4KSB9CiAgICB9Cn0KCi8vIC4uLiBtb3JlIGltcGxzIGZvciB0aGUgdHlwZXMgeW91IGludGVuZCB0byB0cmFuc211dGUKCmZuIGZvbzxUOiBNeVRyYW5zbXV0YWJsZVR5cGU+KHg6IFZlYzxUPikgewogICAgbGV0IHk6IEZvbzxUPiA9IDxUIGFzIE15VHJhbnNtdXRhYmxlVHlwZT46OnRyYW5zbXV0ZSh4KTsKICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHkKfQpgYGAKCkVhY2ggaW1wbCB3aWxsIGJlIGNoZWNrZWQgZm9yIGEgc2l6ZSBtYXRjaCBpbiB0aGUgdHJhbnNtdXRlIGFzIHVzdWFsLCBhbmQgc2luY2UKdGhlcmUgYXJlIG5vIHVuYm91bmQgdHlwZSBwYXJhbWV0ZXJzIGludm9sdmVkLCB0aGlzIHNob3VsZCBjb21waWxlIHVubGVzcyB0aGVyZQppcyBhIHNpemUgbWlzbWF0Y2ggaW4gb25lIG9mIHRoZSBpbXBscy4KCkl0IGlzIGFsc28gcG9zc2libGUgdG8gbWFudWFsbHkgdHJhbnNtdXRlOgoKYGBgCiMgdXNlIHN0ZDo6cHRyOwojIGxldCB2ID0gU29tZSgidmFsdWUiKTsKIyB0eXBlIFNvbWVUeXBlID0gJidzdGF0aWMgW3U4XTsKdW5zYWZlIHsKICAgIHB0cjo6cmVhZCgmdiBhcyAqY29uc3QgXyBhcyAqY29uc3QgU29tZVR5cGUpIC8vIGB2YCB0cmFuc211dGVkIHRvIGBTb21lVHlwZWAKfQojIDsKYGBgCgpOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBtb3ZlIGB2YCAodW5saWtlIGB0cmFuc211dGVgKSwgYW5kIG1heSBuZWVkIGEKY2FsbCB0byBgbWVtOjpmb3JnZXQodilgIGluIGNhc2UgeW91IHdhbnQgdG8gYXZvaWQgZGVzdHJ1Y3RvcnMgYmVpbmcgY2FsbGVkLgpFMDE1MkEgbGFuZyBpdGVtIHdhcyByZWRlZmluZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTUyCiMhW2ZlYXR1cmUobGFuZ19pdGVtcyldCgojW2xhbmcgPSAib3duZWRfYm94Il0Kc3RydWN0IEZvbzsgLy8gZXJyb3I6IGR1cGxpY2F0ZSBsYW5nIGl0ZW0gZm91bmQ6IGBvd25lZF9ib3hgCmBgYAoKTGFuZyBpdGVtcyBhcmUgYWxyZWFkeSBpbXBsZW1lbnRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeS4gVW5sZXNzIHlvdSBhcmUKd3JpdGluZyBhIGZyZWUtc3RhbmRpbmcgYXBwbGljYXRpb24gKGUuZy4sIGEga2VybmVsKSwgeW91IGRvIG5vdCBuZWVkIHRvIHByb3ZpZGUKdGhlbSB5b3Vyc2VsZi4KCllvdSBjYW4gYnVpbGQgYSBmcmVlLXN0YW5kaW5nIGNyYXRlIGJ5IGFkZGluZyBgIyFbbm9fc3RkXWAgdG8gdGhlIGNyYXRlCmF0dHJpYnV0ZXM6CgpgYGBpZ25vcmUgKG9ubHktZm9yLXN5bnRheC1oaWdobGlnaHQpCiMhW25vX3N0ZF0KYGBgCgpTZWUgYWxzbyB0aGUgW3Vuc3RhYmxlIGJvb2tdWzFdLgoKWzFdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3Vuc3RhYmxlLWJvb2svbGFuZ3VhZ2UtZmVhdHVyZXMvbGFuZy1pdGVtcy5odG1sI3dyaXRpbmctYW4tZXhlY3V0YWJsZS13aXRob3V0LXN0ZGxpYgpFMDE1NCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkltcG9ydHMgKGB1c2VgIHN0YXRlbWVudHMpIGFyZSBub3QgYWxsb3dlZCBhZnRlciBub24taXRlbSBzdGF0ZW1lbnRzLCBzdWNoIGFzCnZhcmlhYmxlIGRlY2xhcmF0aW9ucyBhbmQgZXhwcmVzc2lvbiBzdGF0ZW1lbnRzLgoKSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgZGVtb25zdHJhdGVzIHRoZSBlcnJvcjoKCmBgYApmbiBmKCkgewogICAgLy8gVmFyaWFibGUgZGVjbGFyYXRpb24gYmVmb3JlIGltcG9ydAogICAgbGV0IHggPSAwOwogICAgdXNlIHN0ZDo6aW86OlJlYWQ7CiAgICAvLyAuLi4KfQpgYGAKClRoZSBzb2x1dGlvbiBpcyB0byBkZWNsYXJlIHRoZSBpbXBvcnRzIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2NrLCBmdW5jdGlvbiwgb3IKZmlsZS4KCkhlcmUgaXMgdGhlIHByZXZpb3VzIGV4YW1wbGUgYWdhaW4sIHdpdGggdGhlIGNvcnJlY3Qgb3JkZXI6CgpgYGAKZm4gZigpIHsKICAgIHVzZSBzdGQ6OmlvOjpSZWFkOwogICAgbGV0IHggPSAwOwogICAgLy8gLi4uCn0KYGBgCgpTZWUgdGhlIFtEZWNsYXJhdGlvbiBTdGF0ZW1lbnRzXVtkZWNsYXJhdGlvbi1zdGF0ZW1lbnRzXSBzZWN0aW9uIG9mIHRoZQpyZWZlcmVuY2UgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBjb25zdGl0dXRlcyBhbiBpdGVtIGRlY2xhcmF0aW9uCmFuZCB3aGF0IGRvZXMgbm90LgoKW2RlY2xhcmF0aW9uLXN0YXRlbWVudHNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9zdGF0ZW1lbnRzLmh0bWwjZGVjbGFyYXRpb24tc3RhdGVtZW50cwpFMDE1OEFuIGFzc29jaWF0ZWQgY29uc3QgaGFzIGJlZW4gcmVmZXJlbmNlZCBpbiBhIHBhdHRlcm4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTU4CmVudW0gRUZvbyB7IEEsIEIsIEMsIEQgfQoKdHJhaXQgRm9vIHsKICAgIGNvbnN0IFg6IEVGb287Cn0KCmZuIHRlc3Q8QTogRm9vPihhcmc6IEVGb28pIHsKICAgIG1hdGNoIGFyZyB7CiAgICAgICAgQTo6WCA9PiB7IC8vIGVycm9yIQogICAgICAgICAgICBwcmludGxuISgiQTo6WCIpOwogICAgICAgIH0KICAgIH0KfQpgYGAKCmBjb25zdGAgYW5kIGBzdGF0aWNgIG1lYW4gZGlmZmVyZW50IHRoaW5ncy4gQSBgY29uc3RgIGlzIGEgY29tcGlsZS10aW1lCmNvbnN0YW50LCBhbiBhbGlhcyBmb3IgYSBsaXRlcmFsIHZhbHVlLiBUaGlzIHByb3BlcnR5IG1lYW5zIHlvdSBjYW4gbWF0Y2ggaXQKZGlyZWN0bHkgd2l0aGluIGEgcGF0dGVybi4KClRoZSBgc3RhdGljYCBrZXl3b3JkLCBvbiB0aGUgb3RoZXIgaGFuZCwgZ3VhcmFudGVlcyBhIGZpeGVkIGxvY2F0aW9uIGluIG1lbW9yeS4KVGhpcyBkb2VzIG5vdCBhbHdheXMgbWVhbiB0aGF0IHRoZSB2YWx1ZSBpcyBjb25zdGFudC4gRm9yIGV4YW1wbGUsIGEgZ2xvYmFsCm11dGV4IGNhbiBiZSBkZWNsYXJlZCBgc3RhdGljYCBhcyB3ZWxsLgoKSWYgeW91IHdhbnQgdG8gbWF0Y2ggYWdhaW5zdCBhIGBzdGF0aWNgLCBjb25zaWRlciB1c2luZyBhIGd1YXJkIGluc3RlYWQ6CgpgYGAKc3RhdGljIEZPUlRZX1RXTzogaTMyID0gNDI7CgptYXRjaCBTb21lKDQyKSB7CiAgICBTb21lKHgpIGlmIHggPT0gRk9SVFlfVFdPID0+IHt9CiAgICBfID0+IHt9Cn0KYGBgCkUwMTYxQSB2YWx1ZSB3YXMgbW92ZWQgd2hvc2Ugc2l6ZSB3YXMgbm90IGtub3duIGF0IGNvbXBpbGUgdGltZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxNjEKIyFbZmVhdHVyZShib3hfc3ludGF4KV0KCmZuIG1haW4oKSB7CiAgICBsZXQgYXJyYXk6ICZbaXNpemVdID0gJlsxLCAyLCAzXTsKICAgIGxldCBfeDogQm94PFtpc2l6ZV0+ID0gYm94ICphcnJheTsKICAgIC8vIGVycm9yOiBjYW5ub3QgbW92ZSBhIHZhbHVlIG9mIHR5cGUgW2lzaXplXTogdGhlIHNpemUgb2YgW2lzaXplXSBjYW5ub3QKICAgIC8vICAgICAgICBiZSBzdGF0aWNhbGx5IGRldGVybWluZWQKfQpgYGAKCkluIFJ1c3QsIHlvdSBjYW4gb25seSBtb3ZlIGEgdmFsdWUgd2hlbiBpdHMgc2l6ZSBpcyBrbm93biBhdCBjb21waWxlIHRpbWUuCgpUbyB3b3JrIGFyb3VuZCB0aGlzIHJlc3RyaWN0aW9uLCBjb25zaWRlciAiaGlkaW5nIiB0aGUgdmFsdWUgYmVoaW5kIGEgcmVmZXJlbmNlOgplaXRoZXIgYCZ4YCBvciBgJm11dCB4YC4gU2luY2UgYSByZWZlcmVuY2UgaGFzIGEgZml4ZWQgc2l6ZSwgdGhpcyBsZXRzIHlvdSBtb3ZlCml0IGFyb3VuZCBhcyB1c3VhbC4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGJveF9zeW50YXgpXQoKZm4gbWFpbigpIHsKICAgIGxldCBhcnJheTogJltpc2l6ZV0gPSAmWzEsIDIsIDNdOwogICAgbGV0IF94OiBCb3g8Jltpc2l6ZV0+ID0gYm94IGFycmF5OyAvLyBvayEKfQpgYGAKRTAxNjIjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpBbiBpZi1sZXQgcGF0dGVybiBhdHRlbXB0cyB0byBtYXRjaCB0aGUgcGF0dGVybiwgYW5kIGVudGVycyB0aGUgYm9keSBpZiB0aGUKbWF0Y2ggd2FzIHN1Y2Nlc3NmdWwuIElmIHRoZSBtYXRjaCBpcyBpcnJlZnV0YWJsZSAod2hlbiBpdCBjYW5ub3QgZmFpbCB0bwptYXRjaCksIHVzZSBhIHJlZ3VsYXIgYGxldGAtYmluZGluZyBpbnN0ZWFkLiBGb3IgaW5zdGFuY2U6CgpgYGAKc3RydWN0IElycmVmdXRhYmxlKGkzMik7CmxldCBpcnIgPSBJcnJlZnV0YWJsZSgwKTsKCi8vIFRoaXMgZmFpbHMgdG8gY29tcGlsZSBiZWNhdXNlIHRoZSBtYXRjaCBpcyBpcnJlZnV0YWJsZS4KaWYgbGV0IElycmVmdXRhYmxlKHgpID0gaXJyIHsKICAgIC8vIFRoaXMgYm9keSB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZC4KICAgIC8vIC4uLgp9CmBgYAoKVHJ5IHRoaXMgaW5zdGVhZDoKCmBgYApzdHJ1Y3QgSXJyZWZ1dGFibGUoaTMyKTsKbGV0IGlyciA9IElycmVmdXRhYmxlKDApOwoKbGV0IElycmVmdXRhYmxlKHgpID0gaXJyOwpwcmludGxuISgie30iLCB4KTsKYGBgCkUwMTY0U29tZXRoaW5nIHdoaWNoIGlzIG5laXRoZXIgYSB0dXBsZSBzdHJ1Y3Qgbm9yIGEgdHVwbGUgdmFyaWFudCB3YXMgdXNlZCBhcyBhCnBhdHRlcm4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTY0CmVudW0gQSB7CiAgICBCLAogICAgQywKfQoKaW1wbCBBIHsKICAgIGZuIG5ldygpIHt9Cn0KCmZuIGJhcihmb286IEEpIHsKICAgIG1hdGNoIGZvbyB7CiAgICAgICAgQTo6bmV3KCkgPT4gKCksIC8vIGVycm9yIQogICAgICAgIF8gPT4ge30KICAgIH0KfQpgYGAKClRoaXMgZXJyb3IgbWVhbnMgdGhhdCBhbiBhdHRlbXB0IHdhcyBtYWRlIHRvIG1hdGNoIHNvbWV0aGluZyB3aGljaCBpcyBuZWl0aGVyIGEKdHVwbGUgc3RydWN0IG5vciBhIHR1cGxlIHZhcmlhbnQuIE9ubHkgdGhlc2UgdHdvIGVsZW1lbnRzIGFyZSBhbGxvd2VkIGFzIGEKcGF0dGVybjoKCmBgYAplbnVtIEEgewogICAgQiwKICAgIEMsCn0KCmltcGwgQSB7CiAgICBmbiBuZXcoKSB7fQp9CgpmbiBiYXIoZm9vOiBBKSB7CiAgICBtYXRjaCBmb28gewogICAgICAgIEE6OkIgPT4gKCksIC8vIG9rIQogICAgICAgIF8gPT4ge30KICAgIH0KfQpgYGAKRTAxNjUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpBIHdoaWxlLWxldCBwYXR0ZXJuIGF0dGVtcHRzIHRvIG1hdGNoIHRoZSBwYXR0ZXJuLCBhbmQgZW50ZXJzIHRoZSBib2R5IGlmIHRoZQptYXRjaCB3YXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIG1hdGNoIGlzIGlycmVmdXRhYmxlICh3aGVuIGl0IGNhbm5vdCBmYWlsIHRvCm1hdGNoKSwgdXNlIGEgcmVndWxhciBgbGV0YC1iaW5kaW5nIGluc2lkZSBhIGBsb29wYCBpbnN0ZWFkLiBGb3IgaW5zdGFuY2U6CgpgYGBub19ydW4Kc3RydWN0IElycmVmdXRhYmxlKGkzMik7CmxldCBpcnIgPSBJcnJlZnV0YWJsZSgwKTsKCi8vIFRoaXMgZmFpbHMgdG8gY29tcGlsZSBiZWNhdXNlIHRoZSBtYXRjaCBpcyBpcnJlZnV0YWJsZS4Kd2hpbGUgbGV0IElycmVmdXRhYmxlKHgpID0gaXJyIHsKICAgIC8vIC4uLgp9CmBgYAoKVHJ5IHRoaXMgaW5zdGVhZDoKCmBgYG5vX3J1bgpzdHJ1Y3QgSXJyZWZ1dGFibGUoaTMyKTsKbGV0IGlyciA9IElycmVmdXRhYmxlKDApOwoKbG9vcCB7CiAgICBsZXQgSXJyZWZ1dGFibGUoeCkgPSBpcnI7CiAgICAvLyAuLi4KfQpgYGAKRTAxNzBBIHBhdHRlcm4gYmluZGluZyBpcyB1c2luZyB0aGUgc2FtZSBuYW1lIGFzIG9uZSBvZiB0aGUgdmFyaWFudHMgb2YgYSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE3MAojICMhW2Rlbnkod2FybmluZ3MpXQplbnVtIE1ldGhvZCB7CiAgICBHRVQsCiAgICBQT1NULAp9CgpmbiBpc19lbXB0eShzOiBNZXRob2QpIC0+IGJvb2wgewogICAgbWF0Y2ggcyB7CiAgICAgICAgR0VUID0+IHRydWUsCiAgICAgICAgXyA9PiBmYWxzZQogICAgfQp9CgpmbiBtYWluKCkge30KYGBgCgpFbnVtIHZhcmlhbnRzIGFyZSBxdWFsaWZpZWQgYnkgZGVmYXVsdC4gRm9yIGV4YW1wbGUsIGdpdmVuIHRoaXMgdHlwZToKCmBgYAplbnVtIE1ldGhvZCB7CiAgICBHRVQsCiAgICBQT1NULAp9CmBgYAoKWW91IHdvdWxkIG1hdGNoIGl0IHVzaW5nOgoKYGBgCmVudW0gTWV0aG9kIHsKICAgIEdFVCwKICAgIFBPU1QsCn0KCmxldCBtID0gTWV0aG9kOjpHRVQ7CgptYXRjaCBtIHsKICAgIE1ldGhvZDo6R0VUID0+IHt9LAogICAgTWV0aG9kOjpQT1NUID0+IHt9LAp9CmBgYAoKSWYgeW91IGRvbid0IHF1YWxpZnkgdGhlIG5hbWVzLCB0aGUgY29kZSB3aWxsIGJpbmQgbmV3IHZhcmlhYmxlcyBuYW1lZCAiR0VUIiBhbmQKIlBPU1QiIGluc3RlYWQuIFRoaXMgYmVoYXZpb3IgaXMgbGlrZWx5IG5vdCB3aGF0IHlvdSB3YW50LCBzbyBgcnVzdGNgIHdhcm5zIHdoZW4KdGhhdCBoYXBwZW5zLgoKUXVhbGlmaWVkIG5hbWVzIGFyZSBnb29kIHByYWN0aWNlLCBhbmQgbW9zdCBjb2RlIHdvcmtzIHdlbGwgd2l0aCB0aGVtLiBCdXQgaWYKeW91IHByZWZlciB0aGVtIHVucXVhbGlmaWVkLCB5b3UgY2FuIGltcG9ydCB0aGUgdmFyaWFudHMgaW50byBzY29wZToKCmBgYAp1c2UgTWV0aG9kOjoqOwplbnVtIE1ldGhvZCB7IEdFVCwgUE9TVCB9CiMgZm4gbWFpbigpIHt9CmBgYAoKSWYgeW91IHdhbnQgb3RoZXJzIHRvIGJlIGFibGUgdG8gaW1wb3J0IHZhcmlhbnRzIGZyb20geW91ciBtb2R1bGUgZGlyZWN0bHksIHVzZQpgcHViIHVzZWA6CgpgYGAKcHViIHVzZSBNZXRob2Q6Oio7CnB1YiBlbnVtIE1ldGhvZCB7IEdFVCwgUE9TVCB9CiMgZm4gbWFpbigpIHt9CmBgYApFMDE3OFRoZSBgK2AgdHlwZSBvcGVyYXRvciB3YXMgdXNlZCBpbiBhbiBhbWJpZ3VvdXMgY29udGV4dC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxNzgKdHJhaXQgRm9vIHt9CgpzdHJ1Y3QgQmFyPCdhPiB7CiAgICB4OiAmJ2EgRm9vICsgJ2EsICAgICAvLyBlcnJvciEKICAgIHk6ICYnYSBtdXQgRm9vICsgJ2EsIC8vIGVycm9yIQogICAgejogZm4oKSAtPiBGb28gKyAnYSwgLy8gZXJyb3IhCn0KYGBgCgpJbiB0eXBlcywgdGhlIGArYCB0eXBlIG9wZXJhdG9yIGhhcyBsb3cgcHJlY2VkZW5jZSwgc28gaXQgaXMgb2Z0ZW4gbmVjZXNzYXJ5CnRvIHVzZSBwYXJlbnRoZXNlczoKCmBgYAp0cmFpdCBGb28ge30KCnN0cnVjdCBCYXI8J2E+IHsKICAgIHg6ICYnYSAoRm9vICsgJ2EpLCAgICAgLy8gb2shCiAgICB5OiAmJ2EgbXV0IChGb28gKyAnYSksIC8vIG9rIQogICAgejogZm4oKSAtPiAoRm9vICsgJ2EpLCAvLyBvayEKfQpgYGAKCk1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gW1JGQyA0MzhdLgoKW1JGQyA0MzhdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvcHVsbC80MzgKRTAxODRUaGUgYENvcHlgIHRyYWl0IHdhcyBpbXBsZW1lbnRlZCBvbiBhIHR5cGUgd2l0aCBhIGBEcm9wYCBpbXBsZW1lbnRhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxODQKI1tkZXJpdmUoQ29weSldCnN0cnVjdCBGb287IC8vIGVycm9yIQoKaW1wbCBEcm9wIGZvciBGb28gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsKICAgIH0KfQpgYGAKCkV4cGxpY2l0bHkgaW1wbGVtZW50aW5nIGJvdGggYERyb3BgIGFuZCBgQ29weWAgdHJhaXQgb24gYSB0eXBlIGlzIGN1cnJlbnRseQpkaXNhbGxvd2VkLiBUaGlzIGZlYXR1cmUgY2FuIG1ha2Ugc29tZSBzZW5zZSBpbiB0aGVvcnksIGJ1dCB0aGUgY3VycmVudAppbXBsZW1lbnRhdGlvbiBpcyBpbmNvcnJlY3QgYW5kIGNhbiBsZWFkIHRvIG1lbW9yeSB1bnNhZmV0eSAoc2VlCltpc3N1ZSAjMjAxMjZdW2lzczIwMTI2XSksIHNvIGl0IGhhcyBiZWVuIGRpc2FibGVkIGZvciBub3cuCgpbaXNzMjAxMjZdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzIwMTI2CkUwMTg1QW4gYXNzb2NpYXRlZCBmdW5jdGlvbiBmb3IgYSB0cmFpdCB3YXMgZGVmaW5lZCB0byBiZSBzdGF0aWMsIGJ1dCBhbgppbXBsZW1lbnRhdGlvbiBvZiB0aGUgdHJhaXQgZGVjbGFyZWQgdGhlIHNhbWUgZnVuY3Rpb24gdG8gYmUgYSBtZXRob2QgKGkuZS4sIHRvCnRha2UgYSBgc2VsZmAgcGFyYW1ldGVyKS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxODUKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICAvLyBlcnJvciwgbWV0aG9kIGBmb29gIGhhcyBhIGAmc2VsZmAgZGVjbGFyYXRpb24gaW4gdGhlIGltcGwsIGJ1dCBub3QgaW4KICAgIC8vIHRoZSB0cmFpdAogICAgZm4gZm9vKCZzZWxmKSB7fQp9CmBgYAoKV2hlbiBhIHR5cGUgaW1wbGVtZW50cyBhIHRyYWl0J3MgYXNzb2NpYXRlZCBmdW5jdGlvbiwgaXQgaGFzIHRvIHVzZSB0aGUgc2FtZQpzaWduYXR1cmUuIFNvIGluIHRoaXMgY2FzZSwgc2luY2UgYEZvbzo6Zm9vYCBkb2VzIG5vdCB0YWtlIGFueSBhcmd1bWVudCBhbmQKZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLCBpdHMgaW1wbGVtZW50YXRpb24gb24gYEJhcmAgc2hvdWxkIGJlIHRoZSBzYW1lOgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCkge30gLy8gb2shCn0KYGBgCkUwMTg2QW4gYXNzb2NpYXRlZCBmdW5jdGlvbiBmb3IgYSB0cmFpdCB3YXMgZGVmaW5lZCB0byBiZSBhIG1ldGhvZCAoaS5lLiwgdG8gdGFrZSBhCmBzZWxmYCBwYXJhbWV0ZXIpLCBidXQgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHRyYWl0IGRlY2xhcmVkIHRoZSBzYW1lIGZ1bmN0aW9uCnRvIGJlIHN0YXRpYy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxODYKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygmc2VsZik7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIC8vIGVycm9yLCBtZXRob2QgYGZvb2AgaGFzIGEgYCZzZWxmYCBkZWNsYXJhdGlvbiBpbiB0aGUgdHJhaXQsIGJ1dCBub3QgaW4KICAgIC8vIHRoZSBpbXBsCiAgICBmbiBmb28oKSB7fQp9CmBgYAoKV2hlbiBhIHR5cGUgaW1wbGVtZW50cyBhIHRyYWl0J3MgYXNzb2NpYXRlZCBmdW5jdGlvbiwgaXQgaGFzIHRvIHVzZSB0aGUgc2FtZQpzaWduYXR1cmUuIFNvIGluIHRoaXMgY2FzZSwgc2luY2UgYEZvbzo6Zm9vYCB0YWtlcyBgc2VsZmAgYXMgYXJndW1lbnQgYW5kCmRvZXMgbm90IHJldHVybiBhbnl0aGluZywgaXRzIGltcGxlbWVudGF0aW9uIG9uIGBCYXJgIHNob3VsZCBiZSB0aGUgc2FtZToKCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vKCZzZWxmKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCZzZWxmKSB7fSAvLyBvayEKfQpgYGAKRTAxOTFBbiBhc3NvY2lhdGVkIHR5cGUgd2Fzbid0IHNwZWNpZmllZCBmb3IgYSB0cmFpdCBvYmplY3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTkxCnRyYWl0IFRyYWl0IHsKICAgIHR5cGUgQmFyOwp9Cgp0eXBlIEZvbyA9IFRyYWl0OyAvLyBlcnJvcjogdGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIHR5cGUgYEJhcmAgKGZyb20KICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHRoZSB0cmFpdCBgVHJhaXRgKSBtdXN0IGJlIHNwZWNpZmllZApgYGAKClRyYWl0IG9iamVjdHMgbmVlZCB0byBoYXZlIGFsbCBhc3NvY2lhdGVkIHR5cGVzIHNwZWNpZmllZC4gUGxlYXNlIHZlcmlmeSB0aGF0CmFsbCBhc3NvY2lhdGVkIHR5cGVzIG9mIHRoZSB0cmFpdCB3ZXJlIHNwZWNpZmllZCBhbmQgdGhlIGNvcnJlY3QgdHJhaXQgd2FzIHVzZWQuCkV4YW1wbGU6CgpgYGAKdHJhaXQgVHJhaXQgewogICAgdHlwZSBCYXI7Cn0KCnR5cGUgRm9vID0gVHJhaXQ8QmFyPWkzMj47IC8vIG9rIQpgYGAKRTAxOTMjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpgd2hlcmVgIGNsYXVzZXMgbXVzdCB1c2UgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnM6IGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gdXNlCnRoZW0gb3RoZXJ3aXNlLiBBbiBleGFtcGxlIGNhdXNpbmcgdGhpcyBlcnJvcjoKCmBgYAp0cmFpdCBGb28gewogICAgZm4gYmFyKCZzZWxmKTsKfQoKI1tkZXJpdmUoQ29weSxDbG9uZSldCnN0cnVjdCBXcmFwcGVyPFQ+IHsKICAgIFdyYXBwZWQ6IFQKfQoKaW1wbCBGb28gZm9yIFdyYXBwZXI8dTMyPiB3aGVyZSBXcmFwcGVyPHUzMj46IENsb25lIHsKICAgIGZuIGJhcigmc2VsZikgeyB9Cn0KYGBgCgpUaGlzIHVzZSBvZiBhIGB3aGVyZWAgY2xhdXNlIGlzIHN0cmFuZ2UgLSBhIG1vcmUgY29tbW9uIHVzYWdlIHdvdWxkIGxvb2sKc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxvd2luZzoKCmBgYAp0cmFpdCBGb28gewogICAgZm4gYmFyKCZzZWxmKTsKfQoKI1tkZXJpdmUoQ29weSxDbG9uZSldCnN0cnVjdCBXcmFwcGVyPFQ+IHsKICAgIFdyYXBwZWQ6IFQKfQppbXBsIDxUPiBGb28gZm9yIFdyYXBwZXI8VD4gd2hlcmUgV3JhcHBlcjxUPjogQ2xvbmUgewogICAgZm4gYmFyKCZzZWxmKSB7IH0KfQpgYGAKCkhlcmUsIHdlJ3JlIHNheWluZyB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBleGlzdHMgb24gV3JhcHBlciBvbmx5IHdoZW4gdGhlCndyYXBwZWQgdHlwZSBgVGAgaW1wbGVtZW50cyBgQ2xvbmVgLiBUaGUgYHdoZXJlYCBjbGF1c2UgaXMgaW1wb3J0YW50IGJlY2F1c2UKc29tZSB0eXBlcyB3aWxsIG5vdCBpbXBsZW1lbnQgYENsb25lYCwgYW5kIHRodXMgd2lsbCBub3QgZ2V0IHRoaXMgbWV0aG9kLgoKSW4gb3VyIGVycm9uZW91cyBleGFtcGxlLCBob3dldmVyLCB3ZSdyZSByZWZlcmVuY2luZyBhIHNpbmdsZSBjb25jcmV0ZSB0eXBlLgpTaW5jZSB3ZSBrbm93IGZvciBjZXJ0YWluIHRoYXQgYFdyYXBwZXI8dTMyPmAgaW1wbGVtZW50cyBgQ2xvbmVgLCB0aGVyZSdzIG5vCnJlYXNvbiB0byBhbHNvIHNwZWNpZnkgaXQgaW4gYSBgd2hlcmVgIGNsYXVzZS4KRTAxOTVUaGUgbGlmZXRpbWUgcGFyYW1ldGVycyBvZiB0aGUgbWV0aG9kIGRvIG5vdCBtYXRjaCB0aGUgdHJhaXQgZGVjbGFyYXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTk1CnRyYWl0IFRyYWl0IHsKICAgIGZuIGJhcjwnYSwnYjonYT4oeDogJidhIHN0ciwgeTogJidiIHN0cik7Cn0KCnN0cnVjdCBGb287CgppbXBsIFRyYWl0IGZvciBGb28gewogICAgZm4gYmFyPCdhLCdiPih4OiAmJ2Egc3RyLCB5OiAmJ2Igc3RyKSB7CiAgICAvLyBlcnJvcjogbGlmZXRpbWUgcGFyYW1ldGVycyBvciBib3VuZHMgb24gbWV0aG9kIGBiYXJgCiAgICAvLyBkbyBub3QgbWF0Y2ggdGhlIHRyYWl0IGRlY2xhcmF0aW9uCiAgICB9Cn0KYGBgCgpUaGUgbGlmZXRpbWUgY29uc3RyYWludCBgJ2JgIGZvciBgYmFyKClgIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IG1hdGNoIHRoZQp0cmFpdCBkZWNsYXJhdGlvbi4gRW5zdXJlIGxpZmV0aW1lIGRlY2xhcmF0aW9ucyBtYXRjaCBleGFjdGx5IGluIGJvdGggdHJhaXQKZGVjbGFyYXRpb24gYW5kIGltcGxlbWVudGF0aW9uLiBFeGFtcGxlOgoKYGBgCnRyYWl0IFRyYWl0IHsKICAgIGZuIHQ8J2EsJ2I6J2E+KHg6ICYnYSBzdHIsIHk6ICYnYiBzdHIpOwp9CgpzdHJ1Y3QgRm9vOwoKaW1wbCBUcmFpdCBmb3IgRm9vIHsKICAgIGZuIHQ8J2EsJ2I6J2E+KHg6ICYnYSBzdHIsIHk6ICYnYiBzdHIpIHsgLy8gb2shCiAgICB9Cn0KYGBgCkUwMTk3QW4gaW5oZXJlbnQgaW1wbGVtZW50YXRpb24gd2FzIG1hcmtlZCB1bnNhZmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTk3CnN0cnVjdCBGb287Cgp1bnNhZmUgaW1wbCBGb28geyB9IC8vIGVycm9yIQpgYGAKCkluaGVyZW50IGltcGxlbWVudGF0aW9ucyAob25lIHRoYXQgZG8gbm90IGltcGxlbWVudCBhIHRyYWl0IGJ1dCBwcm92aWRlCm1ldGhvZHMgYXNzb2NpYXRlZCB3aXRoIGEgdHlwZSkgYXJlIGFsd2F5cyBzYWZlIGJlY2F1c2UgdGhleSBhcmUgbm90CmltcGxlbWVudGluZyBhbiB1bnNhZmUgdHJhaXQuIFJlbW92aW5nIHRoZSBgdW5zYWZlYCBrZXl3b3JkIGZyb20gdGhlIGluaGVyZW50CmltcGxlbWVudGF0aW9uIHdpbGwgcmVzb2x2ZSB0aGlzIGVycm9yLgoKYGBgCnN0cnVjdCBGb287CgppbXBsIEZvbyB7IH0gLy8gb2shCmBgYApFMDE5OEEgbmVnYXRpdmUgaW1wbGVtZW50YXRpb24gd2FzIG1hcmtlZCBhcyB1bnNhZmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTk4CnN0cnVjdCBGb287Cgp1bnNhZmUgaW1wbCAhQ2xvbmUgZm9yIEZvbyB7IH0gLy8gZXJyb3IhCmBgYAoKQSBuZWdhdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyBvbmUgdGhhdCBleGNsdWRlcyBhIHR5cGUgZnJvbSBpbXBsZW1lbnRpbmcgYQpwYXJ0aWN1bGFyIHRyYWl0LiBOb3QgYmVpbmcgYWJsZSB0byB1c2UgYSB0cmFpdCBpcyBhbHdheXMgYSBzYWZlIG9wZXJhdGlvbiwKc28gbmVnYXRpdmUgaW1wbGVtZW50YXRpb25zIGFyZSBhbHdheXMgc2FmZSBhbmQgbmV2ZXIgbmVlZCB0byBiZSBtYXJrZWQgYXMKdW5zYWZlLgoKVGhpcyB3aWxsIGNvbXBpbGU6CgpgYGBpZ25vcmUgKGlnbm9yZSBhdXRvX3RyYWl0IGZ1dHVyZSBjb21wYXRpYmlsaXR5IHdhcm5pbmcpCiMhW2ZlYXR1cmUob3B0aW5fYnVpbHRpbl90cmFpdHMpXQoKc3RydWN0IEZvbzsKCmF1dG8gdHJhaXQgRW50ZXJwcmlzZSB7fQoKaW1wbCAhRW50ZXJwcmlzZSBmb3IgRm9vIHsgfQpgYGAKClBsZWFzZSBub3RlIHRoYXQgbmVnYXRpdmUgaW1wbHMgYXJlIG9ubHkgYWxsb3dlZCBmb3IgYXV0byB0cmFpdHMuCkUwMTk5QSB0cmFpdCBpbXBsZW1lbnRhdGlvbiB3YXMgbWFya2VkIGFzIHVuc2FmZSB3aGlsZSB0aGUgdHJhaXQgaXMgc2FmZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxOTkKc3RydWN0IEZvbzsKCnRyYWl0IEJhciB7IH0KCnVuc2FmZSBpbXBsIEJhciBmb3IgRm9vIHsgfSAvLyBlcnJvciEKYGBgCgpTYWZlIHRyYWl0cyBzaG91bGQgbm90IGhhdmUgdW5zYWZlIGltcGxlbWVudGF0aW9ucywgdGhlcmVmb3JlIG1hcmtpbmcgYW4KaW1wbGVtZW50YXRpb24gZm9yIGEgc2FmZSB0cmFpdCB1bnNhZmUgd2lsbCBjYXVzZSBhIGNvbXBpbGVyIGVycm9yLiBSZW1vdmluZwp0aGUgdW5zYWZlIG1hcmtlciBvbiB0aGUgdHJhaXQgbm90ZWQgaW4gdGhlIGVycm9yIHdpbGwgcmVzb2x2ZSB0aGlzIHByb2JsZW06CgpgYGAKc3RydWN0IEZvbzsKCnRyYWl0IEJhciB7IH0KCmltcGwgQmFyIGZvciBGb28geyB9IC8vIG9rIQpgYGAKRTAyMDBBbiB1bnNhZmUgdHJhaXQgd2FzIGltcGxlbWVudGVkIHdpdGhvdXQgYW4gdW5zYWZlIGltcGxlbWVudGF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIwMApzdHJ1Y3QgRm9vOwoKdW5zYWZlIHRyYWl0IEJhciB7IH0KCmltcGwgQmFyIGZvciBGb28geyB9IC8vIGVycm9yIQpgYGAKClVuc2FmZSB0cmFpdHMgbXVzdCBoYXZlIHVuc2FmZSBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4KaW1wbGVtZW50YXRpb24gZm9yIGFuIHVuc2FmZSB0cmFpdCBpc24ndCBtYXJrZWQgYXMgdW5zYWZlLiBUaGlzIG1heSBiZSByZXNvbHZlZApieSBtYXJraW5nIHRoZSB1bnNhZmUgaW1wbGVtZW50YXRpb24gYXMgdW5zYWZlLgoKYGBgCnN0cnVjdCBGb287Cgp1bnNhZmUgdHJhaXQgQmFyIHsgfQoKdW5zYWZlIGltcGwgQmFyIGZvciBGb28geyB9IC8vIG9rIQpgYGAKRTAyMDFUd28gYXNzb2NpYXRlZCBpdGVtcyAobGlrZSBtZXRob2RzLCBhc3NvY2lhdGVkIHR5cGVzLCBhc3NvY2lhdGVkIGZ1bmN0aW9ucywKZXRjLikgd2VyZSBkZWZpbmVkIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDEKc3RydWN0IEZvbyh1OCk7CgppbXBsIEZvbyB7CiAgICBmbiBiYXIoJnNlbGYpIC0+IGJvb2wgeyBzZWxmLjAgPiA1IH0KICAgIGZuIGJhcigpIHt9IC8vIGVycm9yOiBkdXBsaWNhdGUgYXNzb2NpYXRlZCBmdW5jdGlvbgp9Cgp0cmFpdCBCYXogewogICAgdHlwZSBRdXV4OwogICAgZm4gYmF6KCZzZWxmKSAtPiBib29sOwp9CgppbXBsIEJheiBmb3IgRm9vIHsKICAgIHR5cGUgUXV1eCA9IHUzMjsKCiAgICBmbiBiYXooJnNlbGYpIC0+IGJvb2wgeyB0cnVlIH0KCiAgICAvLyBlcnJvcjogZHVwbGljYXRlIG1ldGhvZAogICAgZm4gYmF6KCZzZWxmKSAtPiBib29sIHsgc2VsZi4wID4gNSB9CgogICAgLy8gZXJyb3I6IGR1cGxpY2F0ZSBhc3NvY2lhdGVkIHR5cGUKICAgIHR5cGUgUXV1eCA9IHUzMjsKfQpgYGAKCk5vdGUsIGhvd2V2ZXIsIHRoYXQgaXRlbXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFyZSBhbGxvd2VkIGZvciBpbmhlcmVudCBgaW1wbGAKYmxvY2tzIHRoYXQgZG9uJ3Qgb3ZlcmxhcDoKCmBgYApzdHJ1Y3QgRm9vPFQ+KFQpOwoKaW1wbCBGb288dTg+IHsKICAgIGZuIGJhcigmc2VsZikgLT4gYm9vbCB7IHNlbGYuMCA+IDUgfQp9CgppbXBsIEZvbzxib29sPiB7CiAgICBmbiBiYXIoJnNlbGYpIC0+IGJvb2wgeyBzZWxmLjAgfQp9CmBgYApFMDIwMkluaGVyZW50IGFzc29jaWF0ZWQgdHlwZXMgd2VyZSBwYXJ0IG9mIFtSRkMgMTk1XSBidXQgYXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuClNlZSBbdGhlIHRyYWNraW5nIGlzc3VlXVtpc3M4OTk1XSBmb3IgdGhlIHN0YXR1cyBvZiB0aGlzIGltcGxlbWVudGF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIwMgpzdHJ1Y3QgRm9vOwoKaW1wbCBGb28gewogICAgdHlwZSBCYXIgPSBpc2l6ZTsgLy8gZXJyb3IhCn0KYGBgCgpbUkZDIDE5NV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzAxOTUtYXNzb2NpYXRlZC1pdGVtcy5tZApbaXNzODk5NV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvODk5NQpFMDIwM0hhdmluZyBtdWx0aXBsZSByZWxheGVkIGRlZmF1bHQgYm91bmRzIGlzIHVuc3VwcG9ydGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIwMwpzdHJ1Y3QgQmFkPFQ6ID9TaXplZCArID9TZW5kPnsKICAgIGlubmVyOiBUCn0KYGBgCgpIZXJlIHRoZSB0eXBlIGBUYCBjYW5ub3QgaGF2ZSBhIHJlbGF4ZWQgYm91bmQgZm9yIG11bHRpcGxlIGRlZmF1bHQgdHJhaXRzCihgU2l6ZWRgIGFuZCBgU2VuZGApLiBUaGlzIGNhbiBiZSBmaXhlZCBieSBvbmx5IHVzaW5nIG9uZSByZWxheGVkIGJvdW5kLgoKYGBgCnN0cnVjdCBHb29kPFQ6ID9TaXplZD57CiAgICBpbm5lcjogVAp9CmBgYApFMDIwNFRoZSBgQ29weWAgdHJhaXQgd2FzIGltcGxlbWVudGVkIG9uIGEgdHlwZSB3aGljaCBjb250YWlucyBhIGZpZWxkIHRoYXQgZG9lc24ndAppbXBsZW1lbnQgdGhlIGBDb3B5YCB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDQKc3RydWN0IEZvbyB7CiAgICBmb286IFZlYzx1MzI+LAp9CgppbXBsIENvcHkgZm9yIEZvbyB7IH0gLy8gZXJyb3IhCmBgYAoKVGhlIGBDb3B5YCB0cmFpdCBpcyBpbXBsZW1lbnRlZCBieSBkZWZhdWx0IG9ubHkgb24gcHJpbWl0aXZlIHR5cGVzLiBJZiB5b3VyCnR5cGUgb25seSBjb250YWlucyBwcmltaXRpdmUgdHlwZXMsIHlvdSdsbCBiZSBhYmxlIHRvIGltcGxlbWVudCBgQ29weWAgb24gaXQuCk90aGVyd2lzZSwgaXQgd29uJ3QgYmUgcG9zc2libGUuCgpIZXJlJ3MgYW5vdGhlciBleGFtcGxlIHRoYXQgd2lsbCBmYWlsOgoKYGBgY29tcGlsZV9mYWlsLEUwMjA0CiNbZGVyaXZlKENvcHkpXSAvLyBlcnJvciEKc3RydWN0IEZvbzwnYT4gewogICAgdHk6ICYnYSBtdXQgYm9vbCwKfQpgYGAKClRoaXMgZmFpbHMgYmVjYXVzZSBgJm11dCBUYCBpcyBub3QgYENvcHlgLCBldmVuIHdoZW4gYFRgIGlzIGBDb3B5YCAodGhpcwpkaWZmZXJzIGZyb20gdGhlIGJlaGF2aW9yIGZvciBgJlRgLCB3aGljaCBpcyBhbHdheXMgYENvcHlgKS4KRTAyMDUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpBbiBhdHRlbXB0IHRvIGltcGxlbWVudCB0aGUgYENvcHlgIHRyYWl0IGZvciBhbiBlbnVtIGZhaWxlZCBiZWNhdXNlIG9uZSBvZiB0aGUKdmFyaWFudHMgZG9lcyBub3QgaW1wbGVtZW50IGBDb3B5YC4gVG8gZml4IHRoaXMsIHlvdSBtdXN0IGltcGxlbWVudCBgQ29weWAgZm9yCnRoZSBtZW50aW9uZWQgdmFyaWFudC4gTm90ZSB0aGF0IHRoaXMgbWF5IG5vdCBiZSBwb3NzaWJsZSwgYXMgaW4gdGhlIGV4YW1wbGUgb2YKCmBgYGNvbXBpbGVfZmFpbCxFMDIwNAplbnVtIEZvbyB7CiAgICBCYXIoVmVjPHUzMj4pLAogICAgQmF6LAp9CgppbXBsIENvcHkgZm9yIEZvbyB7IH0KYGBgCgpUaGlzIGZhaWxzIGJlY2F1c2UgYFZlYzxUPmAgZG9lcyBub3QgaW1wbGVtZW50IGBDb3B5YCBmb3IgYW55IGBUYC4KCkhlcmUncyBhbm90aGVyIGV4YW1wbGUgdGhhdCB3aWxsIGZhaWw6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDQKI1tkZXJpdmUoQ29weSldCmVudW0gRm9vPCdhPiB7CiAgICBCYXIoJidhIG11dCBib29sKSwKICAgIEJheiwKfQpgYGAKClRoaXMgZmFpbHMgYmVjYXVzZSBgJm11dCBUYCBpcyBub3QgYENvcHlgLCBldmVuIHdoZW4gYFRgIGlzIGBDb3B5YCAodGhpcwpkaWZmZXJzIGZyb20gdGhlIGJlaGF2aW9yIGZvciBgJlRgLCB3aGljaCBpcyBhbHdheXMgYENvcHlgKS4KRTAyMDZUaGUgYENvcHlgIHRyYWl0IHdhcyBpbXBsZW1lbnRlZCBvbiBhIHR5cGUgd2hpY2ggaXMgbmVpdGhlciBhIHN0cnVjdCBub3IgYW4KZW51bS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDYKdHlwZSBGb28gPSBbdTg7IDI1Nl07CmltcGwgQ29weSBmb3IgRm9vIHsgfSAvLyBlcnJvciEKCiNbZGVyaXZlKENvcHksIENsb25lKV0Kc3RydWN0IEJhcjsKCmltcGwgQ29weSBmb3IgJidzdGF0aWMgbXV0IEJhciB7IH0gLy8gZXJyb3IhCmBgYAoKWW91IGNhbiBvbmx5IGltcGxlbWVudCBgQ29weWAgZm9yIGEgc3RydWN0IG9yIGFuIGVudW0uIEJvdGggb2YgdGhlIHByZXZpb3VzCmV4YW1wbGVzIHdpbGwgZmFpbCwgYmVjYXVzZSBuZWl0aGVyIGBbdTg7IDI1Nl1gIG5vciBgJidzdGF0aWMgbXV0IEJhcmAKKG11dGFibGUgcmVmZXJlbmNlIHRvIGBCYXJgKSBpcyBhIHN0cnVjdCBvciBlbnVtLgpFMDIwN0EgdHlwZSBwYXJhbWV0ZXIgdGhhdCBpcyBzcGVjaWZpZWQgZm9yIGBpbXBsYCBpcyBub3QgY29uc3RyYWluZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjA3CnN0cnVjdCBGb287CgppbXBsPFQ6IERlZmF1bHQ+IEZvbyB7CiAgICAvLyBlcnJvcjogdGhlIHR5cGUgcGFyYW1ldGVyIGBUYCBpcyBub3QgY29uc3RyYWluZWQgYnkgdGhlIGltcGwgdHJhaXQsIHNlbGYKICAgIC8vIHR5cGUsIG9yIHByZWRpY2F0ZXMgW0UwMjA3XQogICAgZm4gZ2V0KCZzZWxmKSAtPiBUIHsKICAgICAgICA8VCBhcyBEZWZhdWx0Pjo6ZGVmYXVsdCgpCiAgICB9Cn0KYGBgCgpBbnkgdHlwZSBwYXJhbWV0ZXIgcGFyYW1ldGVyIG9mIGFuIGBpbXBsYCBtdXN0IG1lZXQgYXQgbGVhc3Qgb25lIG9mCnRoZSBmb2xsb3dpbmcgY3JpdGVyaWE6CgogLSBpdCBhcHBlYXJzIGluIHRoZSBfaW1wbGVtZW50aW5nIHR5cGVfIG9mIHRoZSBpbXBsLCBlLmcuIGBpbXBsPFQ+IEZvbzxUPmAKIC0gZm9yIGEgdHJhaXQgaW1wbCwgaXQgYXBwZWFycyBpbiB0aGUgX2ltcGxlbWVudGVkIHRyYWl0XywgZS5nLgogICBgaW1wbDxUPiBTb21lVHJhaXQ8VD4gZm9yIEZvb2AKIC0gaXQgaXMgYm91bmQgYXMgYW4gYXNzb2NpYXRlZCB0eXBlLCBlLmcuIGBpbXBsPFQsIFU+IFNvbWVUcmFpdCBmb3IgVAogICB3aGVyZSBUOiBBbm90aGVyVHJhaXQ8QXNzb2NUeXBlPVU+YAoKIyMjIEVycm9yIGV4YW1wbGUgMQoKU3VwcG9zZSB3ZSBoYXZlIGEgc3RydWN0IGBGb29gIGFuZCB3ZSB3b3VsZCBsaWtlIHRvIGRlZmluZSBzb21lIG1ldGhvZHMgZm9yIGl0LgpUaGUgcHJldmlvdXMgY29kZSBleGFtcGxlIGhhcyBhIGRlZmluaXRpb24gd2hpY2ggbGVhZHMgdG8gYSBjb21waWxlciBlcnJvcjoKClRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIHBhcmFtZXRlciBgVGAgZG9lcyBub3QgYXBwZWFyIGluIHRoZSBpbXBsZW1lbnRpbmcgdHlwZQooYEZvb2ApIG9mIHRoZSBpbXBsLiBJbiB0aGlzIGNhc2UsIHdlIGNhbiBmaXggdGhlIGVycm9yIGJ5IG1vdmluZyB0aGUgdHlwZQpwYXJhbWV0ZXIgZnJvbSB0aGUgYGltcGxgIHRvIHRoZSBtZXRob2QgYGdldGA6CgoKYGBgCnN0cnVjdCBGb287CgovLyBNb3ZlIHRoZSB0eXBlIHBhcmFtZXRlciBmcm9tIHRoZSBpbXBsIHRvIHRoZSBtZXRob2QKaW1wbCBGb28gewogICAgZm4gZ2V0PFQ6IERlZmF1bHQ+KCZzZWxmKSAtPiBUIHsKICAgICAgICA8VCBhcyBEZWZhdWx0Pjo6ZGVmYXVsdCgpCiAgICB9Cn0KYGBgCgojIyMgRXJyb3IgZXhhbXBsZSAyCgpBcyBhbm90aGVyIGV4YW1wbGUsIHN1cHBvc2Ugd2UgaGF2ZSBhIGBNYWtlcmAgdHJhaXQgYW5kIHdhbnQgdG8gZXN0YWJsaXNoIGEKdHlwZSBgRm9vTWFrZXJgIHRoYXQgbWFrZXMgYEZvb2BzOgoKYGBgY29tcGlsZV9mYWlsLEUwMjA3CnRyYWl0IE1ha2VyIHsKICAgIHR5cGUgSXRlbTsKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBTZWxmOjpJdGVtOwp9CgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGZvbzogVAp9CgpzdHJ1Y3QgRm9vTWFrZXI7CgppbXBsPFQ6IERlZmF1bHQ+IE1ha2VyIGZvciBGb29NYWtlciB7Ci8vIGVycm9yOiB0aGUgdHlwZSBwYXJhbWV0ZXIgYFRgIGlzIG5vdCBjb25zdHJhaW5lZCBieSB0aGUgaW1wbCB0cmFpdCwgc2VsZgovLyB0eXBlLCBvciBwcmVkaWNhdGVzIFtFMDIwN10KICAgIHR5cGUgSXRlbSA9IEZvbzxUPjsKCiAgICBmbiBtYWtlKCZtdXQgc2VsZikgLT4gRm9vPFQ+IHsKICAgICAgICBGb28geyBmb286IDxUIGFzIERlZmF1bHQ+OjpkZWZhdWx0KCkgfQogICAgfQp9CmBgYAoKVGhpcyBmYWlscyB0byBjb21waWxlIGJlY2F1c2UgYFRgIGRvZXMgbm90IGFwcGVhciBpbiB0aGUgdHJhaXQgb3IgaW4gdGhlCmltcGxlbWVudGluZyB0eXBlLgoKT25lIHdheSB0byB3b3JrIGFyb3VuZCB0aGlzIGlzIHRvIGludHJvZHVjZSBhIHBoYW50b20gdHlwZSBwYXJhbWV0ZXIgaW50bwpgRm9vTWFrZXJgLCBsaWtlIHNvOgoKYGBgCnVzZSBzdGQ6Om1hcmtlcjo6UGhhbnRvbURhdGE7Cgp0cmFpdCBNYWtlciB7CiAgICB0eXBlIEl0ZW07CiAgICBmbiBtYWtlKCZtdXQgc2VsZikgLT4gU2VsZjo6SXRlbTsKfQoKc3RydWN0IEZvbzxUPiB7CiAgICBmb286IFQKfQoKLy8gQWRkIGEgdHlwZSBwYXJhbWV0ZXIgdG8gYEZvb01ha2VyYApzdHJ1Y3QgRm9vTWFrZXI8VD4gewogICAgcGhhbnRvbTogUGhhbnRvbURhdGE8VD4sCn0KCmltcGw8VDogRGVmYXVsdD4gTWFrZXIgZm9yIEZvb01ha2VyPFQ+IHsKICAgIHR5cGUgSXRlbSA9IEZvbzxUPjsKCiAgICBmbiBtYWtlKCZtdXQgc2VsZikgLT4gRm9vPFQ+IHsKICAgICAgICBGb28gewogICAgICAgICAgICBmb286IDxUIGFzIERlZmF1bHQ+OjpkZWZhdWx0KCksCiAgICAgICAgfQogICAgfQp9CmBgYAoKQW5vdGhlciB3YXkgaXMgdG8gZG8gYXdheSB3aXRoIHRoZSBhc3NvY2lhdGVkIHR5cGUgaW4gYE1ha2VyYCBhbmQgdXNlIGFuIGlucHV0CnR5cGUgcGFyYW1ldGVyIGluc3RlYWQ6CgpgYGAKLy8gVXNlIGEgdHlwZSBwYXJhbWV0ZXIgaW5zdGVhZCBvZiBhbiBhc3NvY2lhdGVkIHR5cGUgaGVyZQp0cmFpdCBNYWtlcjxJdGVtPiB7CiAgICBmbiBtYWtlKCZtdXQgc2VsZikgLT4gSXRlbTsKfQoKc3RydWN0IEZvbzxUPiB7CiAgICBmb286IFQKfQoKc3RydWN0IEZvb01ha2VyOwoKaW1wbDxUOiBEZWZhdWx0PiBNYWtlcjxGb288VD4+IGZvciBGb29NYWtlciB7CiAgICBmbiBtYWtlKCZtdXQgc2VsZikgLT4gRm9vPFQ+IHsKICAgICAgICBGb28geyBmb286IDxUIGFzIERlZmF1bHQ+OjpkZWZhdWx0KCkgfQogICAgfQp9CmBgYAoKIyMjIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24KCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIFtSRkMgNDQ3XS4KCltSRkMgNDQ3XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMDQ0Ny1uby11bnVzZWQtaW1wbC1wYXJhbWV0ZXJzLm1kCkUwMjEwVGhpcyBlcnJvciBpbmRpY2F0ZXMgYSB2aW9sYXRpb24gb2Ygb25lIG9mIFJ1c3QncyBvcnBoYW4gcnVsZXMgZm9yIHRyYWl0CmltcGxlbWVudGF0aW9ucy4gVGhlIHJ1bGUgY29uY2VybnMgdGhlIHVzZSBvZiB0eXBlIHBhcmFtZXRlcnMgaW4gYW4KaW1wbGVtZW50YXRpb24gb2YgYSBmb3JlaWduIHRyYWl0IChhIHRyYWl0IGRlZmluZWQgaW4gYW5vdGhlciBjcmF0ZSksIGFuZApzdGF0ZXMgdGhhdCB0eXBlIHBhcmFtZXRlcnMgbXVzdCBiZSAiY292ZXJlZCIgYnkgYSBsb2NhbCB0eXBlLgoKV2hlbiBpbXBsZW1lbnRpbmcgYSBmb3JlaWduIHRyYWl0IGZvciBhIGZvcmVpZ24gdHlwZSwKdGhlIHRyYWl0IG11c3QgaGF2ZSBvbmUgb3IgbW9yZSB0eXBlIHBhcmFtZXRlcnMuCkEgdHlwZSBsb2NhbCB0byB5b3VyIGNyYXRlIG11c3QgYXBwZWFyIGJlZm9yZSBhbnkgdXNlIG9mIGFueSB0eXBlIHBhcmFtZXRlcnMuCgpUbyB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtZWFucywgaXQgaXMgcGVyaGFwcyBlYXNpZXIgdG8gY29uc2lkZXIgYSBmZXcgZXhhbXBsZXMuCgpJZiBgRm9yZWlnblRyYWl0YCBpcyBhIHRyYWl0IGRlZmluZWQgaW4gc29tZSBleHRlcm5hbCBjcmF0ZSBgZm9vYCwgdGhlbiB0aGUKZm9sbG93aW5nIHRyYWl0IGBpbXBsYCBpcyBhbiBlcnJvcjoKCmBgYGNvbXBpbGVfZmFpbCxFMDIxMAojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQpleHRlcm4gY3JhdGUgZm9vOwojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQp1c2UgZm9vOjpGb3JlaWduVHJhaXQ7CiMgdXNlIHN0ZDo6cGFuaWM6OlVud2luZFNhZmUgYXMgRm9yZWlnblRyYWl0OwoKaW1wbDxUPiBGb3JlaWduVHJhaXQgZm9yIFQgeyB9IC8vIGVycm9yCiMgZm4gbWFpbigpIHt9CmBgYAoKVG8gd29yayBhcm91bmQgdGhpcywgaXQgY2FuIGJlIGNvdmVyZWQgd2l0aCBhIGxvY2FsIHR5cGUsIGBNeVR5cGVgOgoKYGBgCiMgdXNlIHN0ZDo6cGFuaWM6OlVud2luZFNhZmUgYXMgRm9yZWlnblRyYWl0OwpzdHJ1Y3QgTXlUeXBlPFQ+KFQpOwppbXBsPFQ+IEZvcmVpZ25UcmFpdCBmb3IgTXlUeXBlPFQ+IHsgfSAvLyBPawpgYGAKClBsZWFzZSBub3RlIHRoYXQgYSB0eXBlIGFsaWFzIGlzIG5vdCBzdWZmaWNpZW50LgoKRm9yIGFub3RoZXIgZXhhbXBsZSBvZiBhbiBlcnJvciwgc3VwcG9zZSB0aGVyZSdzIGFub3RoZXIgdHJhaXQgZGVmaW5lZCBpbiBgZm9vYApuYW1lZCBgRm9yZWlnblRyYWl0MmAgdGhhdCB0YWtlcyB0d28gdHlwZSBwYXJhbWV0ZXJzLiBUaGVuIHRoaXMgYGltcGxgIHJlc3VsdHMKaW4gdGhlIHNhbWUgcnVsZSB2aW9sYXRpb246CgpgYGBpZ25vcmUgKGNhbm5vdC1kb2N0ZXN0LW11bHRpY3JhdGUtcHJvamVjdCkKc3RydWN0IE15VHlwZTI7CmltcGw8VD4gRm9yZWlnblRyYWl0MjxULCBNeVR5cGU8VD4+IGZvciBNeVR5cGUyIHsgfSAvLyBlcnJvcgpgYGAKClRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGVyZSBhcmUgdHdvIGFwcGVhcmFuY2VzIG9mIHR5cGUgcGFyYW1ldGVyIGBUYCBpbgp0aGUgYGltcGxgIGhlYWRlciwgYm90aCBhcyBwYXJhbWV0ZXJzIGZvciBgRm9yZWlnblRyYWl0MmAuIFRoZSBmaXJzdCBhcHBlYXJhbmNlCmlzIHVuY292ZXJlZCwgYW5kIHNvIHJ1bnMgYWZvdWwgb2YgdGhlIG9ycGhhbiBydWxlLgoKQ29uc2lkZXIgb25lIG1vcmUgZXhhbXBsZToKCmBgYGlnbm9yZSAoY2Fubm90LWRvY3Rlc3QtbXVsdGljcmF0ZS1wcm9qZWN0KQppbXBsPFQ+IEZvcmVpZ25UcmFpdDI8TXlUeXBlPFQ+LCBUPiBmb3IgTXlUeXBlMiB7IH0gLy8gT2sKYGBgCgpUaGlzIG9ubHkgZGlmZmVycyBmcm9tIHRoZSBwcmV2aW91cyBgaW1wbGAgaW4gdGhhdCB0aGUgcGFyYW1ldGVycyBgVGAgYW5kCmBNeVR5cGU8VD5gIGZvciBgRm9yZWlnblRyYWl0MmAgaGF2ZSBiZWVuIHN3YXBwZWQuIFRoaXMgZXhhbXBsZSBkb2VzICpub3QqCnZpb2xhdGUgdGhlIG9ycGhhbiBydWxlOyBpdCBpcyBwZXJtaXR0ZWQuCgpUbyBzZWUgd2h5IHRoYXQgbGFzdCBleGFtcGxlIHdhcyBhbGxvd2VkLCB5b3UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBnZW5lcmFsCnJ1bGUuIFVuZm9ydHVuYXRlbHkgdGhpcyBydWxlIGlzIGEgYml0IHRyaWNreSB0byBzdGF0ZS4gQ29uc2lkZXIgYW4gYGltcGxgOgoKYGBgaWdub3JlIChvbmx5LWZvci1zeW50YXgtaGlnaGxpZ2h0KQppbXBsPFAxLCAuLi4sIFBtPiBGb3JlaWduVHJhaXQ8VDEsIC4uLiwgVG4+IGZvciBUMCB7IC4uLiB9CmBgYAoKd2hlcmUgYFAxLCAuLi4sIFBtYCBhcmUgdGhlIHR5cGUgcGFyYW1ldGVycyBvZiB0aGUgYGltcGxgIGFuZCBgVDAsIC4uLiwgVG5gCmFyZSB0eXBlcy4gT25lIG9mIHRoZSB0eXBlcyBgVDAsIC4uLiwgVG5gIG11c3QgYmUgYSBsb2NhbCB0eXBlICh0aGlzIGlzIGFub3RoZXIKb3JwaGFuIHJ1bGUsIHNlZSB0aGUgZXhwbGFuYXRpb24gZm9yIEUwMTE3KS4KCkJvdGggb2YgdGhlIGZvbGxvd2luZyBtdXN0IGJlIHRydWU6CjEuIEF0IGxlYXN0IG9uZSBvZiB0aGUgdHlwZXMgYFQwLi49VG5gIG11c3QgYmUgYSBsb2NhbCB0eXBlLgpMZXQgYFRpYCBiZSB0aGUgZmlyc3Qgc3VjaCB0eXBlLgoyLiBObyB1bmNvdmVyZWQgdHlwZSBwYXJhbWV0ZXJzIGBQMS4uPVBtYCBtYXkgYXBwZWFyIGluIGBUMC4uVGlgCihleGNsdWRpbmcgYFRpYCkuCgpGb3IgaW5mb3JtYXRpb24gb24gdGhlIGRlc2lnbiBvZiB0aGUgb3JwaGFuIHJ1bGVzLApzZWUgW1JGQyAyNDUxXSBhbmQgW1JGQyAxMDIzXS4KCkZvciBpbmZvcm1hdGlvbiBvbiB0aGUgZGVzaWduIG9mIHRoZSBvcnBoYW4gcnVsZXMsIHNlZSBbUkZDIDEwMjNdLgoKW1JGQyAyNDUxXTogaHR0cHM6Ly9ydXN0LWxhbmcuZ2l0aHViLmlvL3JmY3MvMjQ1MS1yZS1yZWJhbGFuY2luZy1jb2hlcmVuY2UuaHRtbApbUkZDIDEwMjNdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8xMDIzLXJlYmFsYW5jaW5nLWNvaGVyZW5jZS5tZApFMDIxMSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCllvdSB1c2VkIGEgZnVuY3Rpb24gb3IgdHlwZSB3aGljaCBkb2Vzbid0IGZpdCB0aGUgcmVxdWlyZW1lbnRzIGZvciB3aGVyZSBpdCB3YXMKdXNlZC4gRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIGZuIHNpemVfb2Y8VD4oKTsgLy8gZXJyb3I6IGludHJpbnNpYyBoYXMgd3JvbmcgdHlwZQp9CgovLyBvcjoKCmZuIG1haW4oKSAtPiBpMzIgeyAwIH0KLy8gZXJyb3I6IG1haW4gZnVuY3Rpb24gZXhwZWN0cyB0eXBlOiBgZm4oKSB7bWFpbn1gOiBleHBlY3RlZCAoKSwgZm91bmQgaTMyCgovLyBvcjoKCmxldCB4ID0gMXU4OwptYXRjaCB4IHsKICAgIDB1OC4uPTNpOCA9PiAoKSwKICAgIC8vIGVycm9yOiBtaXNtYXRjaGVkIHR5cGVzIGluIHJhbmdlOiBleHBlY3RlZCB1OCwgZm91bmQgaTgKICAgIF8gPT4gKCkKfQoKLy8gb3I6Cgp1c2Ugc3RkOjpyYzo6UmM7CnN0cnVjdCBGb287CgppbXBsIEZvbyB7CiAgICBmbiB4KHNlbGY6IFJjPEZvbz4pIHt9CiAgICAvLyBlcnJvcjogbWlzbWF0Y2hlZCBzZWxmIHR5cGU6IGV4cGVjdGVkIGBGb29gOiBleHBlY3RlZCBzdHJ1Y3QKICAgIC8vICAgICAgICBgRm9vYCwgZm91bmQgc3RydWN0IGBhbGxvYzo6cmM6OlJjYAp9CmBgYAoKRm9yIHRoZSBmaXJzdCBjb2RlIGV4YW1wbGUsIHBsZWFzZSBjaGVjayB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGludHJpbnNpY3MpXQoKZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgZm4gc2l6ZV9vZjxUPigpIC0+IHVzaXplOyAvLyBvayEKfQpgYGAKClRoZSBzZWNvbmQgY2FzZSBleGFtcGxlIGlzIGEgYml0IHBhcnRpY3VsYXI6IHRoZSBtYWluIGZ1bmN0aW9uIG11c3QgYWx3YXlzCmhhdmUgdGhpcyBkZWZpbml0aW9uOgoKYGBgY29tcGlsZV9mYWlsCmZuIG1haW4oKTsKYGBgCgpUaGV5IG5ldmVyIHRha2UgcGFyYW1ldGVycyBhbmQgbmV2ZXIgcmV0dXJuIHR5cGVzLgoKRm9yIHRoZSB0aGlyZCBleGFtcGxlLCB3aGVuIHlvdSBtYXRjaCwgYWxsIHBhdHRlcm5zIG11c3QgaGF2ZSB0aGUgc2FtZSB0eXBlCmFzIHRoZSB0eXBlIHlvdSdyZSBtYXRjaGluZyBvbi4gRXhhbXBsZToKCmBgYApsZXQgeCA9IDF1ODsKCm1hdGNoIHggewogICAgMHU4Li49M3U4ID0+ICgpLCAvLyBvayEKICAgIF8gPT4gKCkKfQpgYGAKCkFuZCBmaW5hbGx5LCBmb3IgdGhlIGxhc3QgZXhhbXBsZSwgb25seSBgQm94PFNlbGY+YCwgYCZTZWxmYCwgYFNlbGZgLApvciBgJm11dCBTZWxmYCB3b3JrIGFzIGV4cGxpY2l0IHNlbGYgcGFyYW1ldGVycy4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vOwoKaW1wbCBGb28gewogICAgZm4geChzZWxmOiBCb3g8Rm9vPikge30gLy8gb2shCn0KYGBgCkUwMjE0QSBnZW5lcmljIHR5cGUgd2FzIGRlc2NyaWJlZCB1c2luZyBwYXJlbnRoZXNlcyByYXRoZXIgdGhhbiBhbmdsZSBicmFja2V0cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMTQKbGV0IHY6IFZlYygmc3RyKSA9IHZlYyFbImZvbyJdOwpgYGAKClRoaXMgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQ6IGB2YCBzaG91bGQgYmUgZGVmaW5lZCBhcyBgVmVjPCZzdHI+YC4KUGFyZW50aGVzZXMgYXJlIGN1cnJlbnRseSBvbmx5IHVzZWQgd2l0aCBnZW5lcmljIHR5cGVzIHdoZW4gZGVmaW5pbmcgcGFyYW1ldGVycwpmb3IgYEZuYC1mYW1pbHkgdHJhaXRzLgoKVGhlIHByZXZpb3VzIGNvZGUgZXhhbXBsZSBmaXhlZDoKCmBgYApsZXQgdjogVmVjPCZzdHI+ID0gdmVjIVsiZm9vIl07CmBgYApFMDIyMFRoZSBhc3NvY2lhdGVkIHR5cGUgdXNlZCB3YXMgbm90IGRlZmluZWQgaW4gdGhlIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyMAp0cmFpdCBUMSB7CiAgICB0eXBlIEJhcjsKfQoKdHlwZSBGb28gPSBUMTxGPWkzMj47IC8vIGVycm9yOiBhc3NvY2lhdGVkIHR5cGUgYEZgIG5vdCBmb3VuZCBmb3IgYFQxYAoKLy8gb3I6Cgp0cmFpdCBUMiB7CiAgICB0eXBlIEJhcjsKCiAgICAvLyBlcnJvcjogQmF6IGlzIHVzZWQgYnV0IG5vdCBkZWNsYXJlZAogICAgZm4gcmV0dXJuX2Jvb2woJnNlbGYsIF86ICZTZWxmOjpCYXIsIF86ICZTZWxmOjpCYXopIC0+IGJvb2w7Cn0KYGBgCgpNYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBkZWZpbmVkIHRoZSBhc3NvY2lhdGVkIHR5cGUgaW4gdGhlIHRyYWl0IGJvZHkuCkFsc28sIHZlcmlmeSB0aGF0IHlvdSB1c2VkIHRoZSByaWdodCB0cmFpdCBvciB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZQphc3NvY2lhdGVkIHR5cGUgbmFtZS4gRXhhbXBsZToKCmBgYAp0cmFpdCBUMSB7CiAgICB0eXBlIEJhcjsKfQoKdHlwZSBGb28gPSBUMTxCYXI9aTMyPjsgLy8gb2shCgovLyBvcjoKCnRyYWl0IFQyIHsKICAgIHR5cGUgQmFyOwogICAgdHlwZSBCYXo7IC8vIHdlIGRlY2xhcmUgYEJhemAgaW4gb3VyIHRyYWl0LgoKICAgIC8vIGFuZCBub3cgd2UgY2FuIHVzZSBpdCBoZXJlOgogICAgZm4gcmV0dXJuX2Jvb2woJnNlbGYsIF86ICZTZWxmOjpCYXIsIF86ICZTZWxmOjpCYXopIC0+IGJvb2w7Cn0KYGBgCkUwMjIxQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byByZXRyaWV2ZSBhbiBhc3NvY2lhdGVkIHR5cGUsIGJ1dCB0aGUgdHlwZSB3YXMgYW1iaWd1b3VzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyMQp0cmFpdCBUMSB7fQp0cmFpdCBUMiB7fQoKdHJhaXQgRm9vIHsKICAgIHR5cGUgQTogVDE7Cn0KCnRyYWl0IEJhciA6IEZvbyB7CiAgICB0eXBlIEE6IFQyOwogICAgZm4gZG9fc29tZXRoaW5nKCkgewogICAgICAgIGxldCBfOiBTZWxmOjpBOwogICAgfQp9CmBgYAoKSW4gdGhpcyBleGFtcGxlLCBgRm9vYCBkZWZpbmVzIGFuIGFzc29jaWF0ZWQgdHlwZSBgQWAuIGBCYXJgIGluaGVyaXRzIHRoYXQgdHlwZQpmcm9tIGBGb29gLCBhbmQgZGVmaW5lcyBhbm90aGVyIGFzc29jaWF0ZWQgdHlwZSBvZiB0aGUgc2FtZSBuYW1lLiBBcyBhIHJlc3VsdCwKd2hlbiB3ZSBhdHRlbXB0IHRvIHVzZSBgU2VsZjo6QWAsIGl0J3MgYW1iaWd1b3VzIHdoZXRoZXIgd2UgbWVhbiB0aGUgYEFgIGRlZmluZWQKYnkgYEZvb2Agb3IgdGhlIG9uZSBkZWZpbmVkIGJ5IGBCYXJgLgoKVGhlcmUgYXJlIHR3byBvcHRpb25zIHRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUuIFRoZSBmaXJzdCBpcyBzaW1wbHkgdG8gcmVuYW1lCm9uZSBvZiB0aGUgdHlwZXMuIEFsdGVybmF0aXZlbHksIG9uZSBjYW4gc3BlY2lmeSB0aGUgaW50ZW5kZWQgdHlwZSB1c2luZyB0aGUKZm9sbG93aW5nIHN5bnRheDoKCmBgYAp0cmFpdCBUMSB7fQp0cmFpdCBUMiB7fQoKdHJhaXQgRm9vIHsKICAgIHR5cGUgQTogVDE7Cn0KCnRyYWl0IEJhciA6IEZvbyB7CiAgICB0eXBlIEE6IFQyOwogICAgZm4gZG9fc29tZXRoaW5nKCkgewogICAgICAgIGxldCBfOiA8U2VsZiBhcyBCYXI+OjpBOwogICAgfQp9CmBgYApFMDIyMkFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gY29uc3RyYWluIGFuIGFzc29jaWF0ZWQgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjIKcHViIHRyYWl0IFZlaGljbGUgewogICAgdHlwZSBDb2xvcjsKfQoKcHViIHRyYWl0IEJveCB7CiAgICB0eXBlIENvbG9yOwp9CgpwdWIgdHJhaXQgQm94Q2FyIDogQm94ICsgVmVoaWNsZSB7fQoKZm4gZGVudF9vYmplY3Q8Q09MT1I+KGM6IGR5biBCb3hDYXI8Q29sb3I9Q09MT1I+KSB7fSAvLyBJbnZhbGlkIGNvbnN0cmFpbnQKYGBgCgpJbiB0aGlzIGV4YW1wbGUsIGBCb3hDYXJgIGhhcyB0d28gc3VwZXItdHJhaXRzOiBgVmVoaWNsZWAgYW5kIGBCb3hgLiBCb3RoIG9mCnRoZXNlIHRyYWl0cyBkZWZpbmUgYW4gYXNzb2NpYXRlZCB0eXBlIGBDb2xvcmAuIGBCb3hDYXJgIGluaGVyaXRzIHR3byB0eXBlcwp3aXRoIHRoYXQgbmFtZSBmcm9tIGJvdGggc3VwZXItdHJhaXRzLiBCZWNhdXNlIG9mIHRoaXMsIHdlIG5lZWQgdG8gdXNlIHRoZQpmdWxseSBxdWFsaWZpZWQgcGF0aCBzeW50YXggdG8gcmVmZXIgdG8gdGhlIGFwcHJvcHJpYXRlIGBDb2xvcmAgYXNzb2NpYXRlZAp0eXBlLCBlaXRoZXIgYDxCb3hDYXIgYXMgVmVoaWNsZT46OkNvbG9yYCBvciBgPEJveENhciBhcyBCb3g+OjpDb2xvcmAsIGJ1dCB0aGlzCnN5bnRheCBpcyBub3QgYWxsb3dlZCB0byBiZSB1c2VkIGluIGEgZnVuY3Rpb24gc2lnbmF0dXJlLgoKSW4gb3JkZXIgdG8gZW5jb2RlIHRoaXMga2luZCBvZiBjb25zdHJhaW50LCBhIGB3aGVyZWAgY2xhdXNlIGFuZCBhIG5ldyB0eXBlCnBhcmFtZXRlciBhcmUgbmVlZGVkOgoKYGBgCnB1YiB0cmFpdCBWZWhpY2xlIHsKICAgIHR5cGUgQ29sb3I7Cn0KCnB1YiB0cmFpdCBCb3ggewogICAgdHlwZSBDb2xvcjsKfQoKcHViIHRyYWl0IEJveENhciA6IEJveCArIFZlaGljbGUge30KCi8vIEludHJvZHVjZSBhIG5ldyBgQ0FSYCB0eXBlIHBhcmFtZXRlcgpmbiBmb288Q0FSLCBDT0xPUj4oCiAgICBjOiBDQVIsCikgd2hlcmUKICAgIC8vIEJpbmQgdGhlIHR5cGUgcGFyYW1ldGVyIGBDQVJgIHRvIHRoZSB0cmFpdCBgQm94Q2FyYAogICAgQ0FSOiBCb3hDYXIsCiAgICAvLyBGdXJ0aGVyIHJlc3RyaWN0IGA8Qm94Q2FyIGFzIFZlaGljbGU+OjpDb2xvcmAgdG8gYmUgdGhlIHNhbWUgYXMgdGhlCiAgICAvLyB0eXBlIHBhcmFtZXRlciBgQ09MT1JgCiAgICBDQVI6IFZlaGljbGU8Q29sb3IgPSBDT0xPUj4sCiAgICAvLyBXZSBjYW4gYWxzbyBzaW11bHRhbmVvdXNseSByZXN0cmljdCB0aGUgb3RoZXIgdHJhaXQncyBhc3NvY2lhdGVkIHR5cGUKICAgIENBUjogQm94PENvbG9yID0gQ09MT1I+Cnt9CmBgYApFMDIyM0FuIGF0dGVtcHQgd2FzIG1hZGUgdG8gcmV0cmlldmUgYW4gYXNzb2NpYXRlZCB0eXBlLCBidXQgdGhlIHR5cGUgd2FzIGFtYmlndW91cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjMKdHJhaXQgTXlUcmFpdCB7dHlwZSBYOyB9CgpmbiBtYWluKCkgewogICAgbGV0IGZvbzogTXlUcmFpdDo6WDsKfQpgYGAKClRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCB3ZSdyZSBhdHRlbXB0aW5nIHRvIHRha2UgdGhlIHR5cGUgb2YgWCBmcm9tIE15VHJhaXQuClVuZm9ydHVuYXRlbHksIHRoZSB0eXBlIG9mIFggaXMgbm90IGRlZmluZWQsIGJlY2F1c2UgaXQncyBvbmx5IG1hZGUgY29uY3JldGUgaW4KaW1wbGVtZW50YXRpb25zIG9mIHRoZSB0cmFpdC4gQSB3b3JraW5nIHZlcnNpb24gb2YgdGhpcyBjb2RlIG1pZ2h0IGxvb2sgbGlrZToKCmBgYAp0cmFpdCBNeVRyYWl0IHt0eXBlIFg7IH0Kc3RydWN0IE15U3RydWN0OwoKaW1wbCBNeVRyYWl0IGZvciBNeVN0cnVjdCB7CiAgICB0eXBlIFggPSB1MzI7Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgZm9vOiA8TXlTdHJ1Y3QgYXMgTXlUcmFpdD46Olg7Cn0KYGBgCgpUaGlzIHN5bnRheCBzcGVjaWZpZXMgdGhhdCB3ZSB3YW50IHRoZSBYIHR5cGUgZnJvbSBNeVRyYWl0LCBhcyBtYWRlIGNvbmNyZXRlIGluCk15U3RydWN0LiBUaGUgcmVhc29uIHRoYXQgd2UgY2Fubm90IHNpbXBseSB1c2UgYE15U3RydWN0OjpYYCBpcyB0aGF0IE15U3RydWN0Cm1pZ2h0IGltcGxlbWVudCB0d28gZGlmZmVyZW50IHRyYWl0cyB3aXRoIGlkZW50aWNhbGx5LW5hbWVkIGFzc29jaWF0ZWQgdHlwZXMuClRoaXMgc3ludGF4IGFsbG93cyBkaXNhbWJpZ3VhdGlvbiBiZXR3ZWVuIHRoZSB0d28uCkUwMjI0QSB0cmFpdCBvYmplY3Qgd2FzIGRlY2xhaXJlZCB3aXRoIG5vIHRyYWl0cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjQKdHlwZSBGb28gPSBkeW4gJ3N0YXRpYyArOwpgYGAKClJ1c3QgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhpcy4KClRvIHNvbHZlIGVuc3VyZSB0aGUgdGhlIHRyYWl0IG9iamVjdCBoYXMgYXQgbGVhc3Qgb25lIHRyYWl0OgoKYGBgCnR5cGUgRm9vID0gZHluICdzdGF0aWMgKyBDb3B5OwpgYGAKRTAyMjVNdWx0aXBsZSB0eXBlcyB3ZXJlIHVzZWQgYXMgYm91bmRzIGZvciBhIGNsb3N1cmUgb3IgdHJhaXQgb2JqZWN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyNQpmbiBtYWluKCkgewogICAgbGV0IF86IEJveDxkeW4gc3RkOjppbzo6UmVhZCArIHN0ZDo6aW86OldyaXRlPjsKfQpgYGAKClJ1c3QgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhpcy4KCkF1dG8gdHJhaXRzIHN1Y2ggYXMgU2VuZCBhbmQgU3luYyBhcmUgYW4gZXhjZXB0aW9uIHRvIHRoaXMgcnVsZToKSXQncyBwb3NzaWJsZSB0byBoYXZlIGJvdW5kcyBvZiBvbmUgbm9uLWJ1aWx0aW4gdHJhaXQsIHBsdXMgYW55IG51bWJlciBvZgphdXRvIHRyYWl0cy4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tcGlsZXMgY29ycmVjdGx5OgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgXzogQm94PGR5biBzdGQ6OmlvOjpSZWFkICsgU2VuZCArIFN5bmM+Owp9CmBgYApFMDIyNk1vcmUgdGhhbiBvbmUgZXhwbGljaXQgbGlmZXRpbWUgYm91bmQgd2FzIHVzZWQgb24gYSB0cmFpdCBvYmplY3QuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjI2CnRyYWl0IEZvbyB7fQoKdHlwZSBUPCdhLCAnYj4gPSBkeW4gRm9vICsgJ2EgKyAnYjsgLy8gZXJyb3I6IFRyYWl0IG9iamVjdCBgYXJnYCBoYXMgdHdvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBsaWZldGltZSBib3VuZCwgJ2EgYW5kICdiLgpgYGAKCkhlcmUgYFRgIGlzIGEgdHJhaXQgb2JqZWN0IHdpdGggdHdvIGV4cGxpY2l0IGxpZmV0aW1lIGJvdW5kcywgJ2EgYW5kICdiLgoKT25seSBhIHNpbmdsZSBleHBsaWNpdCBsaWZldGltZSBib3VuZCBpcyBwZXJtaXR0ZWQgb24gdHJhaXQgb2JqZWN0cy4KVG8gZml4IHRoaXMgZXJyb3IsIGNvbnNpZGVyIHJlbW92aW5nIG9uZSBvZiB0aGUgbGlmZXRpbWUgYm91bmRzOgoKYGBgCnRyYWl0IEZvbyB7fQoKdHlwZSBUPCdhPiA9IGR5biBGb28gKyAnYTsKYGBgCkUwMjI4VGhlIGxpZmV0aW1lIGJvdW5kIGZvciB0aGlzIG9iamVjdCB0eXBlIGNhbm5vdCBiZSBkZWR1Y2VkIGZyb20gY29udGV4dCBhbmQgbXVzdApiZSBzcGVjaWZpZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjI4CnRyYWl0IFRyYWl0IHsgfQoKc3RydWN0IFR3b0JvdW5kczwnYSwgJ2IsIFQ6IFNpemVkICsgJ2EgKyAnYj4gewogICAgeDogJidhIGkzMiwKICAgIHk6ICYnYiBpMzIsCiAgICB6OiBULAp9Cgp0eXBlIEZvbzwnYSwgJ2I+ID0gVHdvQm91bmRzPCdhLCAnYiwgZHluIFRyYWl0PjsKYGBgCgpXaGVuIGEgdHJhaXQgb2JqZWN0IGlzIHVzZWQgYXMgYSB0eXBlIGFyZ3VtZW50IG9mIGEgZ2VuZXJpYyB0eXBlLCBSdXN0IHdpbGwgdHJ5CnRvIGluZmVyIGl0cyBsaWZldGltZSBpZiB1bnNwZWNpZmllZC4gSG93ZXZlciwgdGhpcyBpc24ndCBwb3NzaWJsZSB3aGVuIHRoZQpjb250YWluaW5nIHR5cGUgaGFzIG1vcmUgdGhhbiBvbmUgbGlmZXRpbWUgYm91bmQuCgpUaGUgYWJvdmUgZXhhbXBsZSBjYW4gYmUgcmVzb2x2ZWQgYnkgZWl0aGVyIHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgbGlmZXRpbWUKYm91bmRzIHRvIG9uZSBvciBieSBtYWtpbmcgdGhlIHRyYWl0IG9iamVjdCBsaWZldGltZSBleHBsaWNpdCwgbGlrZSBzbzoKCmBgYAp0cmFpdCBUcmFpdCB7IH0KCnN0cnVjdCBUd29Cb3VuZHM8J2EsICdiLCBUOiBTaXplZCArICdhICsgJ2I+IHsKICAgIHg6ICYnYSBpMzIsCiAgICB5OiAmJ2IgaTMyLAogICAgejogVCwKfQoKdHlwZSBGb288J2EsICdiPiA9IFR3b0JvdW5kczwnYSwgJ2IsIGR5biBUcmFpdCArICdiPjsKYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtSRkMgNTk5XSBhbmQgaXRzIGFtZW5kbWVudCBbUkZDIDExNTZdLgoKW1JGQyA1OTldOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8wNTk5LWRlZmF1bHQtb2JqZWN0LWJvdW5kLm1kCltSRkMgMTE1Nl06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzExNTYtYWRqdXN0LWRlZmF1bHQtb2JqZWN0LWJvdW5kcy5tZApFMDIyOUFuIGFzc29jaWF0ZWQgdHlwZSBiaW5kaW5nIHdhcyBkb25lIG91dHNpZGUgb2YgdGhlIHR5cGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uCmFuZCBgd2hlcmVgIGNsYXVzZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjkKcHViIHRyYWl0IEZvbyB7CiAgICB0eXBlIEE7CiAgICBmbiBib28oJnNlbGYpIC0+IDxTZWxmIGFzIEZvbz46OkE7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgaXNpemUgewogICAgdHlwZSBBID0gdXNpemU7CiAgICBmbiBib28oJnNlbGYpIC0+IHVzaXplIHsgNDIgfQp9CgpmbiBiYXo8ST4oeDogJjxJIGFzIEZvbzxBPUJhcj4+OjpBKSB7fQovLyBlcnJvcjogYXNzb2NpYXRlZCB0eXBlIGJpbmRpbmdzIGFyZSBub3QgYWxsb3dlZCBoZXJlCmBgYAoKVG8gc29sdmUgdGhpcyBlcnJvciwgcGxlYXNlIG1vdmUgdGhlIHR5cGUgYmluZGluZ3MgaW4gdGhlIHR5cGUgcGFyYW1ldGVyCmRlY2xhcmF0aW9uOgoKYGBgCiMgc3RydWN0IEJhcjsKIyB0cmFpdCBGb28geyB0eXBlIEE7IH0KZm4gYmF6PEk6IEZvbzxBPUJhcj4+KHg6ICY8SSBhcyBGb28+OjpBKSB7fSAvLyBvayEKYGBgCgpPciBpbiB0aGUgYHdoZXJlYCBjbGF1c2U6CgpgYGAKIyBzdHJ1Y3QgQmFyOwojIHRyYWl0IEZvbyB7IHR5cGUgQTsgfQpmbiBiYXo8ST4oeDogJjxJIGFzIEZvbz46OkEpIHdoZXJlIEk6IEZvbzxBPUJhcj4ge30KYGBgCkUwMjMwVGhlIGAjW3J1c3RjX29uX3VuaW1wbGVtZW50ZWRdYCBhdHRyaWJ1dGUgbGV0cyB5b3Ugc3BlY2lmeSBhIGN1c3RvbSBlcnJvcgptZXNzYWdlIGZvciB3aGVuIGEgcGFydGljdWxhciB0cmFpdCBpc24ndCBpbXBsZW1lbnRlZCBvbiBhIHR5cGUgcGxhY2VkIGluIGEKcG9zaXRpb24gdGhhdCBuZWVkcyB0aGF0IHRyYWl0LiBGb3IgZXhhbXBsZSwgd2hlbiB0aGUgZm9sbG93aW5nIGNvZGUgaXMKY29tcGlsZWQ6CgpgYGBjb21waWxlX2ZhaWwsRTAyMzAKIyFbZmVhdHVyZShydXN0Y19hdHRycyldCgojW3J1c3RjX29uX3VuaW1wbGVtZW50ZWQgPSAiZXJyb3Igb24gYHtTZWxmfWAgd2l0aCBwYXJhbXMgYDx7QX0se0J9PmAiXSAvLyBlcnJvcgp0cmFpdCBCYWRBbm5vdGF0aW9uPEE+IHt9CmBgYAoKVGhlcmUgd2lsbCBiZSBhbiBlcnJvciBhYm91dCBgYm9vbGAgbm90IGltcGxlbWVudGluZyBgSW5kZXg8dTg+YCwgZm9sbG93ZWQgYnkgYQpub3RlIHNheWluZyAidGhlIHR5cGUgYGJvb2xgIGNhbm5vdCBiZSBpbmRleGVkIGJ5IGB1OGAiLgoKQXMgeW91IGNhbiBzZWUsIHlvdSBjYW4gc3BlY2lmeSB0eXBlIHBhcmFtZXRlcnMgaW4gY3VybHkgYnJhY2VzIGZvcgpzdWJzdGl0dXRpb24gd2l0aCB0aGUgYWN0dWFsIHR5cGVzICh1c2luZyB0aGUgcmVndWxhciBmb3JtYXQgc3RyaW5nIHN5bnRheCkgaW4KYSBnaXZlbiBzaXR1YXRpb24uIEZ1cnRoZXJtb3JlLCBge1NlbGZ9YCB3aWxsIHN1YnN0aXR1dGUgdG8gdGhlIHR5cGUgKGluIHRoaXMKY2FzZSwgYGJvb2xgKSB0aGF0IHdlIHRyaWVkIHRvIHVzZS4KClRoaXMgZXJyb3IgYXBwZWFycyB3aGVuIHRoZSBjdXJseSBicmFjZXMgY29udGFpbiBhbiBpZGVudGlmaWVyIHdoaWNoIGRvZXNuJ3QKbWF0Y2ggd2l0aCBhbnkgb2YgdGhlIHR5cGUgcGFyYW1ldGVycyBvciB0aGUgc3RyaW5nIGBTZWxmYC4gVGhpcyBtaWdodCBoYXBwZW4KaWYgeW91IG1pc3NwZWxsZWQgYSB0eXBlIHBhcmFtZXRlciwgb3IgaWYgeW91IGludGVuZGVkIHRvIHVzZSBsaXRlcmFsIGN1cmx5CmJyYWNlcy4gSWYgaXQgaXMgdGhlIGxhdHRlciwgZXNjYXBlIHRoZSBjdXJseSBicmFjZXMgd2l0aCBhIHNlY29uZCBjdXJseSBicmFjZQpvZiB0aGUgc2FtZSB0eXBlOyBlLmcuLCBhIGxpdGVyYWwgYHtgIGlzIGB7e2AuCkUwMjMxVGhlIGAjW3J1c3RjX29uX3VuaW1wbGVtZW50ZWRdYCBhdHRyaWJ1dGUgbGV0cyB5b3Ugc3BlY2lmeSBhIGN1c3RvbSBlcnJvcgptZXNzYWdlIGZvciB3aGVuIGEgcGFydGljdWxhciB0cmFpdCBpc24ndCBpbXBsZW1lbnRlZCBvbiBhIHR5cGUgcGxhY2VkIGluIGEKcG9zaXRpb24gdGhhdCBuZWVkcyB0aGF0IHRyYWl0LiBGb3IgZXhhbXBsZSwgd2hlbiB0aGUgZm9sbG93aW5nIGNvZGUgaXMKY29tcGlsZWQ6CgpgYGBjb21waWxlX2ZhaWwsRTAyMzEKIyFbZmVhdHVyZShydXN0Y19hdHRycyldCgojW3J1c3RjX29uX3VuaW1wbGVtZW50ZWQgPSAiZXJyb3Igb24gYHtTZWxmfWAgd2l0aCBwYXJhbXMgYDx7QX0se30+YCJdIC8vIGVycm9yIQp0cmFpdCBCYWRBbm5vdGF0aW9uPEE+IHt9CmBgYAoKdGhlcmUgd2lsbCBiZSBhbiBlcnJvciBhYm91dCBgYm9vbGAgbm90IGltcGxlbWVudGluZyBgSW5kZXg8dTg+YCwgZm9sbG93ZWQgYnkgYQpub3RlIHNheWluZyAidGhlIHR5cGUgYGJvb2xgIGNhbm5vdCBiZSBpbmRleGVkIGJ5IGB1OGAiLgoKQXMgeW91IGNhbiBzZWUsIHlvdSBjYW4gc3BlY2lmeSB0eXBlIHBhcmFtZXRlcnMgaW4gY3VybHkgYnJhY2VzIGZvcgpzdWJzdGl0dXRpb24gd2l0aCB0aGUgYWN0dWFsIHR5cGVzICh1c2luZyB0aGUgcmVndWxhciBmb3JtYXQgc3RyaW5nIHN5bnRheCkgaW4KYSBnaXZlbiBzaXR1YXRpb24uIEZ1cnRoZXJtb3JlLCBge1NlbGZ9YCB3aWxsIHN1YnN0aXR1dGUgdG8gdGhlIHR5cGUgKGluIHRoaXMKY2FzZSwgYGJvb2xgKSB0aGF0IHdlIHRyaWVkIHRvIHVzZS4KClRoaXMgZXJyb3IgYXBwZWFycyB3aGVuIHRoZSBjdXJseSBicmFjZXMgZG8gbm90IGNvbnRhaW4gYW4gaWRlbnRpZmllci4gUGxlYXNlCmFkZCBvbmUgb2YgdGhlIHNhbWUgbmFtZSBhcyBhIHR5cGUgcGFyYW1ldGVyLiBJZiB5b3UgaW50ZW5kZWQgdG8gdXNlIGxpdGVyYWwKYnJhY2VzLCB1c2UgYHt7YCBhbmQgYH19YCB0byBlc2NhcGUgdGhlbS4KRTAyMzJUaGUgYCNbcnVzdGNfb25fdW5pbXBsZW1lbnRlZF1gIGF0dHJpYnV0ZSBsZXRzIHlvdSBzcGVjaWZ5IGEgY3VzdG9tIGVycm9yCm1lc3NhZ2UgZm9yIHdoZW4gYSBwYXJ0aWN1bGFyIHRyYWl0IGlzbid0IGltcGxlbWVudGVkIG9uIGEgdHlwZSBwbGFjZWQgaW4gYQpwb3NpdGlvbiB0aGF0IG5lZWRzIHRoYXQgdHJhaXQuIEZvciBleGFtcGxlLCB3aGVuIHRoZSBmb2xsb3dpbmcgY29kZSBpcwpjb21waWxlZDoKCmBgYGNvbXBpbGVfZmFpbCxFMDIzMgojIVtmZWF0dXJlKHJ1c3RjX2F0dHJzKV0KCiNbcnVzdGNfb25fdW5pbXBsZW1lbnRlZChsb3JlbT0iIildIC8vIGVycm9yIQp0cmFpdCBCYWRBbm5vdGF0aW9uIHt9CmBgYAoKdGhlcmUgd2lsbCBiZSBhbiBlcnJvciBhYm91dCBgYm9vbGAgbm90IGltcGxlbWVudGluZyBgSW5kZXg8dTg+YCwgZm9sbG93ZWQgYnkgYQpub3RlIHNheWluZyAidGhlIHR5cGUgYGJvb2xgIGNhbm5vdCBiZSBpbmRleGVkIGJ5IGB1OGAiLgoKRm9yIHRoaXMgdG8gd29yaywgc29tZSBub3RlIG11c3QgYmUgc3BlY2lmaWVkLiBBbiBlbXB0eSBhdHRyaWJ1dGUgd2lsbCBub3QgZG8KYW55dGhpbmcsIHBsZWFzZSByZW1vdmUgdGhlIGF0dHJpYnV0ZSBvciBhZGQgc29tZSBoZWxwZnVsIG5vdGUgZm9yIHVzZXJzIG9mIHRoZQp0cmFpdC4KRTAyNDMjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IG5vdCBlbm91Z2ggdHlwZSBwYXJhbWV0ZXJzIHdlcmUgZm91bmQgaW4gYSB0eXBlIG9yCnRyYWl0LgoKRm9yIGV4YW1wbGUsIHRoZSBgRm9vYCBzdHJ1Y3QgYmVsb3cgaXMgZGVmaW5lZCB0byBiZSBnZW5lcmljIGluIGBUYCwgYnV0IHRoZQp0eXBlIHBhcmFtZXRlciBpcyBtaXNzaW5nIGluIHRoZSBkZWZpbml0aW9uIG9mIGBCYXJgOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CnN0cnVjdCBGb288VD4geyB4OiBUIH0KCnN0cnVjdCBCYXIgeyB4OiBGb28gfQpgYGAKRTAyNDQjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRvbyBtYW55IHR5cGUgcGFyYW1ldGVycyB3ZXJlIGZvdW5kIGluIGEgdHlwZSBvcgp0cmFpdC4KCkZvciBleGFtcGxlLCB0aGUgYEZvb2Agc3RydWN0IGJlbG93IGhhcyBubyB0eXBlIHBhcmFtZXRlcnMsIGJ1dCBpcyBzdXBwbGllZAp3aXRoIHR3byBpbiB0aGUgZGVmaW5pdGlvbiBvZiBgQmFyYDoKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpzdHJ1Y3QgRm9vIHsgeDogYm9vbCB9CgpzdHJ1Y3QgQmFyPFMsIFQ+IHsgeDogRm9vPFMsIFQ+IH0KYGBgCkUwMjUxIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVHdvIGl0ZW1zIG9mIHRoZSBzYW1lIG5hbWUgY2Fubm90IGJlIGltcG9ydGVkIHdpdGhvdXQgcmViaW5kaW5nIG9uZSBvZiB0aGUKaXRlbXMgdW5kZXIgYSBuZXcgbG9jYWwgbmFtZS4KCkFuIGV4YW1wbGUgb2YgdGhpcyBlcnJvcjoKCmBgYAp1c2UgZm9vOjpiYXo7CnVzZSBiYXI6Oio7IC8vIGVycm9yLCBkbyBgdXNlIGZvbzo6YmF6IGFzIHF1dXhgIGluc3RlYWQgb24gdGhlIHByZXZpb3VzIGxpbmUKCmZuIG1haW4oKSB7fQoKbW9kIGZvbyB7CiAgICBwdWIgc3RydWN0IGJhejsKfQoKbW9kIGJhciB7CiAgICBwdWIgbW9kIGJheiB7fQp9CmBgYApFMDI1MlR3byBpdGVtcyBvZiB0aGUgc2FtZSBuYW1lIGNhbm5vdCBiZSBpbXBvcnRlZCB3aXRob3V0IHJlYmluZGluZyBvbmUgb2YgdGhlCml0ZW1zIHVuZGVyIGEgbmV3IGxvY2FsIG5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjUyCnVzZSBmb286OmJhejsKdXNlIGJhcjo6YmF6OyAvLyBlcnJvciwgZG8gYHVzZSBiYXI6OmJheiBhcyBxdXV4YCBpbnN0ZWFkCgpmbiBtYWluKCkge30KCm1vZCBmb28gewogICAgcHViIHN0cnVjdCBiYXo7Cn0KCm1vZCBiYXIgewogICAgcHViIG1vZCBiYXoge30KfQpgYGAKCllvdSBjYW4gdXNlIGFsaWFzZXMgaW4gb3JkZXIgdG8gZml4IHRoaXMgZXJyb3IuIEV4YW1wbGU6CgpgYGAKdXNlIGZvbzo6YmF6IGFzIGZvb19iYXo7CnVzZSBiYXI6OmJhejsgLy8gb2shCgpmbiBtYWluKCkge30KCm1vZCBmb28gewogICAgcHViIHN0cnVjdCBiYXo7Cn0KCm1vZCBiYXIgewogICAgcHViIG1vZCBiYXoge30KfQpgYGAKCk9yIHlvdSBjYW4gcmVmZXJlbmNlIHRoZSBpdGVtIHdpdGggaXRzIHBhcmVudDoKCmBgYAp1c2UgYmFyOjpiYXo7CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBmb286OmJhejsgLy8gb2shCn0KCm1vZCBmb28gewogICAgcHViIHN0cnVjdCBiYXo7Cn0KCm1vZCBiYXIgewogICAgcHViIG1vZCBiYXoge30KfQpgYGAKRTAyNTNBdHRlbXB0IHdhcyBtYWRlIHRvIGltcG9ydCBhbiB1bmltcG9ydGFibGUgdmFsdWUuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRyeWluZwp0byBpbXBvcnQgYSBtZXRob2QgZnJvbSBhIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI1Mwptb2QgZm9vIHsKICAgIHB1YiB0cmFpdCBNeVRyYWl0IHsKICAgICAgICBmbiBkb19zb21ldGhpbmcoKTsKICAgIH0KfQoKdXNlIGZvbzo6TXlUcmFpdDo6ZG9fc29tZXRoaW5nOwovLyBlcnJvcjogYGRvX3NvbWV0aGluZ2AgaXMgbm90IGRpcmVjdGx5IGltcG9ydGFibGUKCmZuIG1haW4oKSB7fQpgYGAKCkl0J3MgaW52YWxpZCB0byBkaXJlY3RseSBpbXBvcnQgbWV0aG9kcyBiZWxvbmdpbmcgdG8gYSB0cmFpdCBvciBjb25jcmV0ZSB0eXBlLgpFMDI1NEF0dGVtcHQgd2FzIG1hZGUgdG8gaW1wb3J0IGFuIGl0ZW0gd2hlcmVhcyBhbiBleHRlcm4gY3JhdGUgd2l0aCB0aGlzIG5hbWUgaGFzCmFscmVhZHkgYmVlbiBpbXBvcnRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNTQKZXh0ZXJuIGNyYXRlIGNvcmU7Cgptb2QgZm9vIHsKICAgIHB1YiB0cmFpdCBjb3JlIHsKICAgICAgICBmbiBkb19zb21ldGhpbmcoKTsKICAgIH0KfQoKdXNlIGZvbzo6Y29yZTsgIC8vIGVycm9yOiBhbiBleHRlcm4gY3JhdGUgbmFtZWQgYGNvcmVgIGhhcyBhbHJlYWR5CiAgICAgICAgICAgICAgICAvLyAgICAgICAgYmVlbiBpbXBvcnRlZCBpbiB0aGlzIG1vZHVsZQoKZm4gbWFpbigpIHt9CmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIHlvdSBoYXZlIHRvIHJlbmFtZSBhdCBsZWFzdCBvbmUgb2YgdGhlIHR3byBpbXBvcnRzLgpFeGFtcGxlOgoKYGBgCmV4dGVybiBjcmF0ZSBjb3JlIGFzIGxpYmNvcmU7IC8vIG9rIQoKbW9kIGZvbyB7CiAgICBwdWIgdHJhaXQgY29yZSB7CiAgICAgICAgZm4gZG9fc29tZXRoaW5nKCk7CiAgICB9Cn0KCnVzZSBmb286OmNvcmU7CgpmbiBtYWluKCkge30KYGBgCkUwMjU1WW91IGNhbid0IGltcG9ydCBhIHZhbHVlIHdob3NlIG5hbWUgaXMgdGhlIHNhbWUgYXMgYW5vdGhlciB2YWx1ZSBkZWZpbmVkIGluIHRoZQptb2R1bGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjU1CnVzZSBiYXI6OmZvbzsgLy8gZXJyb3I6IGFuIGl0ZW0gbmFtZWQgYGZvb2AgaXMgYWxyZWFkeSBpbiBzY29wZQoKZm4gZm9vKCkge30KCm1vZCBiYXIgewogICAgIHB1YiBmbiBmb28oKSB7fQp9CgpmbiBtYWluKCkge30KYGBgCgpZb3UgY2FuIHVzZSBhbGlhc2VzIGluIG9yZGVyIHRvIGZpeCB0aGlzIGVycm9yLiBFeGFtcGxlOgoKYGBgCnVzZSBiYXI6OmZvbyBhcyBiYXJfZm9vOyAvLyBvayEKCmZuIGZvbygpIHt9Cgptb2QgYmFyIHsKICAgICBwdWIgZm4gZm9vKCkge30KfQoKZm4gbWFpbigpIHt9CmBgYAoKT3IgeW91IGNhbiByZWZlcmVuY2UgdGhlIGl0ZW0gd2l0aCBpdHMgcGFyZW50OgoKYGBgCmZuIGZvbygpIHt9Cgptb2QgYmFyIHsKICAgICBwdWIgZm4gZm9vKCkge30KfQoKZm4gbWFpbigpIHsKICAgIGJhcjo6Zm9vKCk7IC8vIHdlIGdldCB0aGUgaXRlbSBieSByZWZlcnJpbmcgdG8gaXRzIHBhcmVudAp9CmBgYApFMDI1NiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCllvdSBjYW4ndCBpbXBvcnQgYSB0eXBlIG9yIG1vZHVsZSB3aGVuIHRoZSBuYW1lIG9mIHRoZSBpdGVtIGJlaW5nIGltcG9ydGVkIGlzCnRoZSBzYW1lIGFzIGFub3RoZXIgdHlwZSBvciBzdWJtb2R1bGUgZGVmaW5lZCBpbiB0aGUgbW9kdWxlLgoKQW4gZXhhbXBsZSBvZiB0aGlzIGVycm9yOgoKYGBgY29tcGlsZV9mYWlsCnVzZSBmb286OkJhcjsgLy8gZXJyb3IKCnR5cGUgQmFyID0gdTMyOwoKbW9kIGZvbyB7CiAgICBwdWIgbW9kIEJhciB7IH0KfQoKZm4gbWFpbigpIHt9CmBgYApFMDI1OVRoZSBuYW1lIGNob3NlbiBmb3IgYW4gZXh0ZXJuYWwgY3JhdGUgY29uZmxpY3RzIHdpdGggYW5vdGhlciBleHRlcm5hbCBjcmF0ZQp0aGF0IGhhcyBiZWVuIGltcG9ydGVkIGludG8gdGhlIGN1cnJlbnQgbW9kdWxlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI1OQpleHRlcm4gY3JhdGUgY29yZTsKZXh0ZXJuIGNyYXRlIHN0ZCBhcyBjb3JlOwoKZm4gbWFpbigpIHt9CmBgYAoKVGhlIHNvbHV0aW9uIGlzIHRvIGNob29zZSBhIGRpZmZlcmVudCBuYW1lIHRoYXQgZG9lc24ndCBjb25mbGljdCB3aXRoIGFueQpleHRlcm5hbCBjcmF0ZSBpbXBvcnRlZCBpbnRvIHRoZSBjdXJyZW50IG1vZHVsZS4KCkNvcnJlY3QgZXhhbXBsZToKCmBgYApleHRlcm4gY3JhdGUgY29yZTsKZXh0ZXJuIGNyYXRlIHN0ZCBhcyBvdGhlcl9uYW1lOwoKZm4gbWFpbigpIHt9CmBgYApFMDI2MFRoZSBuYW1lIGZvciBhbiBpdGVtIGRlY2xhcmF0aW9uIGNvbmZsaWN0cyB3aXRoIGFuIGV4dGVybmFsIGNyYXRlJ3MgbmFtZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjAKZXh0ZXJuIGNyYXRlIGNvcmU7CgpzdHJ1Y3QgY29yZTsKCmZuIG1haW4oKSB7fQpgYGAKClRoZXJlIGFyZSB0d28gcG9zc2libGUgc29sdXRpb25zOgoKU29sdXRpb24gIzE6IFJlbmFtZSB0aGUgaXRlbS4KCmBgYApleHRlcm4gY3JhdGUgY29yZTsKCnN0cnVjdCB4eXo7CmBgYAoKU29sdXRpb24gIzI6IEltcG9ydCB0aGUgY3JhdGUgd2l0aCBhIGRpZmZlcmVudCBuYW1lLgoKYGBgCmV4dGVybiBjcmF0ZSBjb3JlIGFzIHh5ejsKCnN0cnVjdCBhYmM7CmBgYAoKU2VlIHRoZSBbRGVjbGFyYXRpb24gU3RhdGVtZW50c11bZGVjbGFyYXRpb24tc3RhdGVtZW50c10gc2VjdGlvbiBvZiB0aGUKcmVmZXJlbmNlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgY29uc3RpdHV0ZXMgYW4gaXRlbSBkZWNsYXJhdGlvbgphbmQgd2hhdCBkb2VzIG5vdC4KCltkZWNsYXJhdGlvbi1zdGF0ZW1lbnRzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2Uvc3RhdGVtZW50cy5odG1sI2RlY2xhcmF0aW9uLXN0YXRlbWVudHMKRTAyNjFBbiB1bmRlY2xhcmVkIGxpZmV0aW1lIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI2MQovLyBlcnJvciwgdXNlIG9mIHVuZGVjbGFyZWQgbGlmZXRpbWUgbmFtZSBgJ2FgCmZuIGZvbyh4OiAmJ2Egc3RyKSB7IH0KCnN0cnVjdCBGb28gewogICAgLy8gZXJyb3IsIHVzZSBvZiB1bmRlY2xhcmVkIGxpZmV0aW1lIG5hbWUgYCdhYAogICAgeDogJidhIHN0ciwKfQpgYGAKClRoZXNlIGNhbiBiZSBmaXhlZCBieSBkZWNsYXJpbmcgbGlmZXRpbWUgcGFyYW1ldGVyczoKCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiAmJ2Egc3RyLAp9CgpmbiBmb288J2E+KHg6ICYnYSBzdHIpIHt9CmBgYAoKSW1wbCBibG9ja3MgZGVjbGFyZSBsaWZldGltZSBwYXJhbWV0ZXJzIHNlcGFyYXRlbHkuIFlvdSBuZWVkIHRvIGFkZCBsaWZldGltZQpwYXJhbWV0ZXJzIHRvIGFuIGltcGwgYmxvY2sgaWYgeW91J3JlIGltcGxlbWVudGluZyBhIHR5cGUgdGhhdCBoYXMgYSBsaWZldGltZQpwYXJhbWV0ZXIgb2YgaXRzIG93bi4KRm9yIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjEKc3RydWN0IEZvbzwnYT4gewogICAgeDogJidhIHN0ciwKfQoKLy8gZXJyb3IsICB1c2Ugb2YgdW5kZWNsYXJlZCBsaWZldGltZSBuYW1lIGAnYWAKaW1wbCBGb288J2E+IHsKICAgIGZuIGZvbzwnYT4oeDogJidhIHN0cikge30KfQpgYGAKClRoaXMgaXMgZml4ZWQgYnkgZGVjbGFyaW5nIHRoZSBpbXBsIGJsb2NrIGxpa2UgdGhpczoKCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiAmJ2Egc3RyLAp9CgovLyBjb3JyZWN0CmltcGw8J2E+IEZvbzwnYT4gewogICAgZm4gZm9vKHg6ICYnYSBzdHIpIHt9Cn0KYGBgCkUwMjYyQW4gaW52YWxpZCBuYW1lIHdhcyB1c2VkIGZvciBhIGxpZmV0aW1lIHBhcmFtZXRlci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjIKLy8gZXJyb3IsIGludmFsaWQgbGlmZXRpbWUgcGFyYW1ldGVyIG5hbWUgYCdzdGF0aWNgCmZuIGZvbzwnc3RhdGljPih4OiAmJ3N0YXRpYyBzdHIpIHsgfQpgYGAKCkRlY2xhcmluZyBjZXJ0YWluIGxpZmV0aW1lIG5hbWVzIGluIHBhcmFtZXRlcnMgaXMgZGlzYWxsb3dlZC4gRm9yIGV4YW1wbGUsCmJlY2F1c2UgdGhlIGAnc3RhdGljYCBsaWZldGltZSBpcyBhIHNwZWNpYWwgYnVpbHQtaW4gbGlmZXRpbWUgbmFtZSBkZW5vdGluZwp0aGUgbGlmZXRpbWUgb2YgdGhlIGVudGlyZSBwcm9ncmFtLCB0aGlzIGlzIGFuIGVycm9yOgpFMDI2M0EgbGlmZXRpbWUgd2FzIGRlY2xhcmVkIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBzYW1lIHNjb3BlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI2MwpmbiBmb288J2EsICdiLCAnYT4oeDogJidhIHN0ciwgeTogJidiIHN0ciwgejogJidhIHN0cikgeyAvLyBlcnJvciEKfQpgYGAKClR3byBsaWZldGltZXMgY2Fubm90IGhhdmUgdGhlIHNhbWUgbmFtZS4gVG8gZml4IHRoaXMgZXhhbXBsZSwgY2hhbmdlCnRoZSBzZWNvbmQgYCdhYCBsaWZldGltZSBpbnRvIHNvbWV0aGluZyBlbHNlIChgJ2NgIGZvciBleGFtcGxlKToKCmBgYApmbiBmb288J2EsICdiLCAnYz4oeDogJidhIHN0ciwgeTogJidiIHN0ciwgejogJidjIHN0cikgeyAvLyBvayEKfQpgYGAKRTAyNjRBbiB1bmtub3duIGV4dGVybmFsIGxhbmcgaXRlbSB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjQKIyFbZmVhdHVyZShsYW5nX2l0ZW1zKV0KCmV4dGVybiAiQyIgewogICAgI1tsYW5nID0gImNha2UiXSAvLyBlcnJvcjogdW5rbm93biBleHRlcm5hbCBsYW5nIGl0ZW06IGBjYWtlYAogICAgZm4gY2FrZSgpOwp9CmBgYAoKQSBsaXN0IG9mIGF2YWlsYWJsZSBleHRlcm5hbCBsYW5nIGl0ZW1zIGlzIGF2YWlsYWJsZSBpbgpgc3JjL2xpYnJ1c3RjX21pZGRsZS9taWRkbGUvd2Vha19sYW5nX2l0ZW1zLnJzYC4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGxhbmdfaXRlbXMpXQoKZXh0ZXJuICJDIiB7CiAgICAjW2xhbmcgPSAicGFuaWNfaW1wbCJdIC8vIG9rIQogICAgZm4gY2FrZSgpOwp9CmBgYApFMDI2N0EgbG9vcCBrZXl3b3JkIChgYnJlYWtgIG9yIGBjb250aW51ZWApIHdhcyB1c2VkIGluc2lkZSBhIGNsb3N1cmUgYnV0IG91dHNpZGUgb2YKYW55IGxvb3AuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjY3CmxldCB3ID0gfHwgeyBicmVhazsgfTsgLy8gZXJyb3I6IGBicmVha2AgaW5zaWRlIG9mIGEgY2xvc3VyZQpgYGAKCmBicmVha2AgYW5kIGBjb250aW51ZWAga2V5d29yZHMgY2FuIGJlIHVzZWQgYXMgbm9ybWFsIGluc2lkZSBjbG9zdXJlcyBhcyBsb25nIGFzCnRoZXkgYXJlIGFsc28gY29udGFpbmVkIHdpdGhpbiBhIGxvb3AuIFRvIGhhbHQgdGhlIGV4ZWN1dGlvbiBvZiBhIGNsb3N1cmUgeW91CnNob3VsZCBpbnN0ZWFkIHVzZSBhIHJldHVybiBzdGF0ZW1lbnQuIEV4YW1wbGU6CgpgYGAKbGV0IHcgPSB8fCB7CiAgICBmb3IgXyBpbiAwLi4xMCB7CiAgICAgICAgYnJlYWs7CiAgICB9Cn07Cgp3KCk7CmBgYApFMDI2OEEgbG9vcCBrZXl3b3JkIChgYnJlYWtgIG9yIGBjb250aW51ZWApIHdhcyB1c2VkIG91dHNpZGUgb2YgYSBsb29wLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI2OApmbiBzb21lX2Z1bmMoKSB7CiAgICBicmVhazsgLy8gZXJyb3I6IGBicmVha2Agb3V0c2lkZSBvZiBhIGxvb3AKfQpgYGAKCldpdGhvdXQgYSBsb29wIHRvIGJyZWFrIG91dCBvZiBvciBjb250aW51ZSBpbiwgbm8gc2Vuc2libGUgYWN0aW9uIGNhbiBiZSB0YWtlbi4KUGxlYXNlIHZlcmlmeSB0aGF0IHlvdSBhcmUgdXNpbmcgYGJyZWFrYCBhbmQgYGNvbnRpbnVlYCBvbmx5IGluIGxvb3BzLiBFeGFtcGxlOgoKYGBgCmZuIHNvbWVfZnVuYygpIHsKICAgIGZvciBfIGluIDAuLjEwIHsKICAgICAgICBicmVhazsgLy8gb2shCiAgICB9Cn0KYGBgCkUwMjcxQSB0eXBlIG1pc21hdGNoZWQgYW4gYXNzb2NpYXRlZCB0eXBlIG9mIGEgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjcxCnRyYWl0IFRyYWl0IHsgdHlwZSBBc3NvY2lhdGVkVHlwZTsgfQoKZm4gZm9vPFQ+KHQ6IFQpIHdoZXJlIFQ6IFRyYWl0PEFzc29jaWF0ZWRUeXBlPXUzMj4gewovLyAgICAgICAgICAgICAgICAgICAgfn5+fn5+fn4gfn5+fn5+fn5+fn5+fn5+fn5+Ci8vICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHwKLy8gICAgICAgICBUaGlzIHNheXMgYGZvb2AgY2FuICAgICAgICAgfAovLyAgICAgICAgICAgb25seSBiZSB1c2VkIHdpdGggICAgICAgICB8Ci8vICAgICAgICAgICAgICBzb21lIHR5cGUgdGhhdCAgICAgICAgIHwKLy8gICAgICAgICBpbXBsZW1lbnRzIGBUcmFpdGAuICAgICAgICAgfAovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIHNheXMgbm90IG9ubHkgbXVzdAovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFRgIGJlIGFuIGltcGwgb2YgYFRyYWl0YAovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGFsc28gdGhhdCB0aGUgaW1wbAovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBhc3NpZ24gdGhlIHR5cGUgYHUzMmAKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBhc3NvY2lhdGVkIHR5cGUuCiAgICBwcmludGxuISgiaW4gZm9vIik7Cn0KCmltcGwgVHJhaXQgZm9yIGk4IHsgdHlwZSBBc3NvY2lhdGVkVHlwZSA9ICYnc3RhdGljIHN0cjsgfQovL35+fn5+fn5+fn5+fn5+fiAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyBgaThgIGRvZXMgaGF2ZSAgICAgICAgICAgICAgICAgICAgIHwKLy8gaW1wbGVtZW50YXRpb24gICAgICAgICAgICAgICAgICAgICB8Ci8vIG9mIGBUcmFpdGAuLi4gICAgICAgICAgICAgICAgICAgICAgfAovLyAgICAgICAgICAgICAgICAgICAgIC4uLiBidXQgaXQgaXMgYW4gaW1wbGVtZW50YXRpb24KLy8gICAgICAgICAgICAgICAgICAgICB0aGF0IGFzc2lnbnMgYCYnc3RhdGljIHN0cmAgdG8KLy8gICAgICAgICAgICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCB0eXBlLgoKZm9vKDNfaTgpOwovLyBIZXJlLCB3ZSBpbnZva2UgYGZvb2Agd2l0aCBhbiBgaThgLCB3aGljaCBkb2VzIG5vdCBzYXRpc2Z5Ci8vIHRoZSBjb25zdHJhaW50IGA8aTggYXMgVHJhaXQ+OjpBc3NvY2lhdGVkVHlwZT11MzJgLCBhbmQKLy8gdGhlcmVmb3JlIHRoZSB0eXBlLWNoZWNrZXIgY29tcGxhaW5zIHdpdGggdGhpcyBlcnJvciBjb2RlLgpgYGAKClRoZSBpc3N1ZSBjYW4gYmUgcmVzb2x2ZWQgYnkgY2hhbmdpbmcgdGhlIGFzc29jaWF0ZWQgdHlwZToKMSkgaW4gdGhlIGBmb29gIGltcGxlbWVudGF0aW9uOgpgYGAKdHJhaXQgVHJhaXQgeyB0eXBlIEFzc29jaWF0ZWRUeXBlOyB9CgpmbiBmb288VD4odDogVCkgd2hlcmUgVDogVHJhaXQ8QXNzb2NpYXRlZFR5cGUgPSAmJ3N0YXRpYyBzdHI+IHsKICAgIHByaW50bG4hKCJpbiBmb28iKTsKfQoKaW1wbCBUcmFpdCBmb3IgaTggeyB0eXBlIEFzc29jaWF0ZWRUeXBlID0gJidzdGF0aWMgc3RyOyB9Cgpmb28oM19pOCk7CmBgYAoKMikgaW4gdGhlIGBUcmFpdGAgaW1wbGVtZW50YXRpb24gZm9yIGBpOGA6CmBgYAp0cmFpdCBUcmFpdCB7IHR5cGUgQXNzb2NpYXRlZFR5cGU7IH0KCmZuIGZvbzxUPih0OiBUKSB3aGVyZSBUOiBUcmFpdDxBc3NvY2lhdGVkVHlwZSA9IHUzMj4gewogICAgcHJpbnRsbiEoImluIGZvbyIpOwp9CgppbXBsIFRyYWl0IGZvciBpOCB7IHR5cGUgQXNzb2NpYXRlZFR5cGUgPSB1MzI7IH0KCmZvbygzX2k4KTsKYGBgCkUwMjc1QW4gZXZhbHVhdGlvbiBvZiBhIHRyYWl0IHJlcXVpcmVtZW50IG92ZXJmbG93ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjc1CnRyYWl0IEZvbyB7fQoKc3RydWN0IEJhcjxUPihUKTsKCmltcGw8VD4gRm9vIGZvciBUIHdoZXJlIEJhcjxUPjogRm9vIHt9CmBgYAoKVGhpcyBlcnJvciBvY2N1cnMgd2hlbiB0aGVyZSB3YXMgYSByZWN1cnNpdmUgdHJhaXQgcmVxdWlyZW1lbnQgdGhhdCBvdmVyZmxvd2VkCmJlZm9yZSBpdCBjb3VsZCBiZSBldmFsdWF0ZWQuIFRoaXMgb2Z0ZW4gbWVhbnMgdGhhdCB0aGVyZSBpcyBhbiB1bmJvdW5kZWQKcmVjdXJzaW9uIGluIHJlc29sdmluZyBzb21lIHR5cGUgYm91bmRzLgoKVG8gZGV0ZXJtaW5lIGlmIGEgYFRgIGlzIGBGb29gLCB3ZSBuZWVkIHRvIGNoZWNrIGlmIGBCYXI8VD5gIGlzIGBGb29gLiBIb3dldmVyLAp0byBkbyB0aGlzIGNoZWNrLCB3ZSBuZWVkIHRvIGRldGVybWluZSB0aGF0IGBCYXI8QmFyPFQ+PmAgaXMgYEZvb2AuIFRvCmRldGVybWluZSB0aGlzLCB3ZSBjaGVjayBpZiBgQmFyPEJhcjxCYXI8VD4+PmAgaXMgYEZvb2AsIGFuZCBzbyBvbi4gVGhpcyBpcwpjbGVhcmx5IGEgcmVjdXJzaXZlIHJlcXVpcmVtZW50IHRoYXQgY2FuJ3QgYmUgcmVzb2x2ZWQgZGlyZWN0bHkuCgpDb25zaWRlciBjaGFuZ2luZyB5b3VyIHRyYWl0IGJvdW5kcyBzbyB0aGF0IHRoZXkncmUgbGVzcyBzZWxmLXJlZmVyZW50aWFsLgpFMDI3NkEgdHJhaXQgaW1wbGVtZW50YXRpb24gaGFzIHN0cmljdGVyIHJlcXVpcmVtZW50cyB0aGFuIHRoZSB0cmFpdCBkZWZpbml0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI3Ngp0cmFpdCBGb28gewogICAgZm4gZm9vPFQ+KHg6IFQpOwp9CgppbXBsIEZvbyBmb3IgYm9vbCB7CiAgICBmbiBmb288VD4oeDogVCkgd2hlcmUgVDogQ29weSB7fQp9CmBgYAoKSGVyZSwgYWxsIHR5cGVzIGltcGxlbWVudGluZyBgRm9vYCBtdXN0IGhhdmUgYSBtZXRob2QgYGZvbzxUPih4OiBUKWAgd2hpY2ggY2FuCnRha2UgYW55IHR5cGUgYFRgLiBIb3dldmVyLCBpbiB0aGUgYGltcGxgIGZvciBgYm9vbGAsIHdlIGhhdmUgYWRkZWQgYW4gZXh0cmEKYm91bmQgdGhhdCBgVGAgaXMgYENvcHlgLCB3aGljaCBpc24ndCBjb21wYXRpYmxlIHdpdGggdGhlIG9yaWdpbmFsIHRyYWl0LgoKQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIGJvdW5kIGZyb20gdGhlIG1ldGhvZCBvciBhZGRpbmcgdGhlIGJvdW5kIHRvIHRoZSBvcmlnaW5hbAptZXRob2QgZGVmaW5pdGlvbiBpbiB0aGUgdHJhaXQuCkUwMjc3WW91IHRyaWVkIHRvIHVzZSBhIHR5cGUgd2hpY2ggZG9lc24ndCBpbXBsZW1lbnQgc29tZSB0cmFpdCBpbiBhIHBsYWNlIHdoaWNoCmV4cGVjdGVkIHRoYXQgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjc3Ci8vIGhlcmUgd2UgZGVjbGFyZSB0aGUgRm9vIHRyYWl0IHdpdGggYSBiYXIgbWV0aG9kCnRyYWl0IEZvbyB7CiAgICBmbiBiYXIoJnNlbGYpOwp9CgovLyB3ZSBub3cgZGVjbGFyZSBhIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGFuIG9iamVjdCBpbXBsZW1lbnRpbmcgdGhlIEZvbyB0cmFpdApmbiBzb21lX2Z1bmM8VDogRm9vPihmb286IFQpIHsKICAgIGZvby5iYXIoKTsKfQoKZm4gbWFpbigpIHsKICAgIC8vIHdlIG5vdyBjYWxsIHRoZSBtZXRob2Qgd2l0aCB0aGUgaTMyIHR5cGUsIHdoaWNoIGRvZXNuJ3QgaW1wbGVtZW50CiAgICAvLyB0aGUgRm9vIHRyYWl0CiAgICBzb21lX2Z1bmMoNWkzMik7IC8vIGVycm9yOiB0aGUgdHJhaXQgYm91bmQgYGkzMiA6IEZvb2AgaXMgbm90IHNhdGlzZmllZAp9CmBgYAoKSW4gb3JkZXIgdG8gZml4IHRoaXMgZXJyb3IsIHZlcmlmeSB0aGF0IHRoZSB0eXBlIHlvdSdyZSB1c2luZyBkb2VzIGltcGxlbWVudAp0aGUgdHJhaXQuIEV4YW1wbGU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGJhcigmc2VsZik7Cn0KCmZuIHNvbWVfZnVuYzxUOiBGb28+KGZvbzogVCkgewogICAgZm9vLmJhcigpOyAvLyB3ZSBjYW4gbm93IHVzZSB0aGlzIG1ldGhvZCBzaW5jZSBpMzIgaW1wbGVtZW50cyB0aGUKICAgICAgICAgICAgICAgLy8gRm9vIHRyYWl0Cn0KCi8vIHdlIGltcGxlbWVudCB0aGUgdHJhaXQgb24gdGhlIGkzMiB0eXBlCmltcGwgRm9vIGZvciBpMzIgewogICAgZm4gYmFyKCZzZWxmKSB7fQp9CgpmbiBtYWluKCkgewogICAgc29tZV9mdW5jKDVpMzIpOyAvLyBvayEKfQpgYGAKCk9yIGluIGEgZ2VuZXJpYyBjb250ZXh0LCBhbiBlcnJvbmVvdXMgY29kZSBleGFtcGxlIHdvdWxkIGxvb2sgbGlrZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI3NwpmbiBzb21lX2Z1bmM8VD4oZm9vOiBUKSB7CiAgICBwcmludGxuISgiezo/fSIsIGZvbyk7IC8vIGVycm9yOiB0aGUgdHJhaXQgYGNvcmU6OmZtdDo6RGVidWdgIGlzIG5vdAogICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgaW1wbGVtZW50ZWQgZm9yIHRoZSB0eXBlIGBUYAp9CgpmbiBtYWluKCkgewogICAgLy8gV2Ugbm93IGNhbGwgdGhlIG1ldGhvZCB3aXRoIHRoZSBpMzIgdHlwZSwKICAgIC8vIHdoaWNoICpkb2VzKiBpbXBsZW1lbnQgdGhlIERlYnVnIHRyYWl0LgogICAgc29tZV9mdW5jKDVpMzIpOwp9CmBgYAoKTm90ZSB0aGF0IHRoZSBlcnJvciBoZXJlIGlzIGluIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBnZW5lcmljIGZ1bmN0aW9uOiBBbHRob3VnaAp3ZSBvbmx5IGNhbGwgaXQgd2l0aCBhIHBhcmFtZXRlciB0aGF0IGRvZXMgaW1wbGVtZW50IGBEZWJ1Z2AsIHRoZSBjb21waWxlcgpzdGlsbCByZWplY3RzIHRoZSBmdW5jdGlvbjogSXQgbXVzdCB3b3JrIHdpdGggYWxsIHBvc3NpYmxlIGlucHV0IHR5cGVzLiBJbgpvcmRlciB0byBtYWtlIHRoaXMgZXhhbXBsZSBjb21waWxlLCB3ZSBuZWVkIHRvIHJlc3RyaWN0IHRoZSBnZW5lcmljIHR5cGUgd2UncmUKYWNjZXB0aW5nOgoKYGBgCnVzZSBzdGQ6OmZtdDsKCi8vIFJlc3RyaWN0IHRoZSBpbnB1dCB0eXBlIHRvIHR5cGVzIHRoYXQgaW1wbGVtZW50IERlYnVnLgpmbiBzb21lX2Z1bmM8VDogZm10OjpEZWJ1Zz4oZm9vOiBUKSB7CiAgICBwcmludGxuISgiezo/fSIsIGZvbyk7Cn0KCmZuIG1haW4oKSB7CiAgICAvLyBDYWxsaW5nIHRoZSBtZXRob2QgaXMgc3RpbGwgZmluZSwgYXMgaTMyIGltcGxlbWVudHMgRGVidWcuCiAgICBzb21lX2Z1bmMoNWkzMik7CgogICAgLy8gVGhpcyB3b3VsZCBmYWlsIHRvIGNvbXBpbGUgbm93OgogICAgLy8gc3RydWN0IFdpdGhvdXREZWJ1ZzsKICAgIC8vIHNvbWVfZnVuYyhXaXRob3V0RGVidWcpOwp9CmBgYAoKUnVzdCBvbmx5IGxvb2tzIGF0IHRoZSBzaWduYXR1cmUgb2YgdGhlIGNhbGxlZCBmdW5jdGlvbiwgYXMgc3VjaCBpdCBtdXN0CmFscmVhZHkgc3BlY2lmeSBhbGwgcmVxdWlyZW1lbnRzIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBldmVyeSB0eXBlIHBhcmFtZXRlci4KRTAyODEjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpZb3UgdHJpZWQgdG8gc3VwcGx5IGEgdHlwZSB3aGljaCBkb2Vzbid0IGltcGxlbWVudCBzb21lIHRyYWl0IGluIGEgbG9jYXRpb24Kd2hpY2ggZXhwZWN0ZWQgdGhhdCB0cmFpdC4gVGhpcyBlcnJvciB0eXBpY2FsbHkgb2NjdXJzIHdoZW4gd29ya2luZyB3aXRoCmBGbmAtYmFzZWQgdHlwZXMuIEVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKZm4gZm9vPEY6IEZuKHVzaXplKT4oeDogRikgeyB9CgpmbiBtYWluKCkgewogICAgLy8gdHlwZSBtaXNtYXRjaDogLi4uIGltcGxlbWVudHMgdGhlIHRyYWl0IGBjb3JlOjpvcHM6OkZuPChTdHJpbmcsKT5gLAogICAgLy8gYnV0IHRoZSB0cmFpdCBgY29yZTo6b3BzOjpGbjwodXNpemUsKT5gIGlzIHJlcXVpcmVkCiAgICAvLyBbRTAyODFdCiAgICBmb28ofHk6IFN0cmluZ3wgeyB9KTsKfQpgYGAKClRoZSBpc3N1ZSBpbiB0aGlzIGNhc2UgaXMgdGhhdCBgZm9vYCBpcyBkZWZpbmVkIGFzIGFjY2VwdGluZyBhIGBGbmAgd2l0aCBvbmUKYXJndW1lbnQgb2YgdHlwZSBgU3RyaW5nYCwgYnV0IHRoZSBjbG9zdXJlIHdlIGF0dGVtcHRlZCB0byBwYXNzIHRvIGl0IHJlcXVpcmVzCm9uZSBhcmd1bWVudHMgb2YgdHlwZSBgdXNpemVgLgpFMDI4MlRoZSBjb21waWxlciBjb3VsZCBub3QgaW5mZXIgYSB0eXBlIGFuZCBhc2tlZCBmb3IgYSB0eXBlIGFubm90YXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjgyCmxldCB4ID0gImhlbGxvIi5jaGFycygpLnJldigpLmNvbGxlY3QoKTsKYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHR5cGUgaW5mZXJlbmNlIGRpZCBub3QgcmVzdWx0IGluIG9uZSB1bmlxdWUgcG9zc2libGUKdHlwZSwgYW5kIGV4dHJhIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkLiBJbiBtb3N0IGNhc2VzIHRoaXMgY2FuIGJlIHByb3ZpZGVkCmJ5IGFkZGluZyBhIHR5cGUgYW5ub3RhdGlvbi4gU29tZXRpbWVzIHlvdSBuZWVkIHRvIHNwZWNpZnkgYSBnZW5lcmljIHR5cGUKcGFyYW1ldGVyIG1hbnVhbGx5LgoKQSBjb21tb24gZXhhbXBsZSBpcyB0aGUgYGNvbGxlY3RgIG1ldGhvZCBvbiBgSXRlcmF0b3JgLiBJdCBoYXMgYSBnZW5lcmljIHR5cGUKcGFyYW1ldGVyIHdpdGggYSBgRnJvbUl0ZXJhdG9yYCBib3VuZCwgd2hpY2ggZm9yIGEgYGNoYXJgIGl0ZXJhdG9yIGlzCmltcGxlbWVudGVkIGJ5IGBWZWNgIGFuZCBgU3RyaW5nYCBhbW9uZyBvdGhlcnMuIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgc25pcHBldAp0aGF0IHJldmVyc2VzIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3RyaW5nOgoKSW4gdGhlIGZpcnN0IGNvZGUgZXhhbXBsZSwgdGhlIGNvbXBpbGVyIGNhbm5vdCBpbmZlciB3aGF0IHRoZSB0eXBlIG9mIGB4YCBzaG91bGQKYmU6IGBWZWM8Y2hhcj5gIGFuZCBgU3RyaW5nYCBhcmUgYm90aCBzdWl0YWJsZSBjYW5kaWRhdGVzLiBUbyBzcGVjaWZ5IHdoaWNoIHR5cGUKdG8gdXNlLCB5b3UgY2FuIHVzZSBhIHR5cGUgYW5ub3RhdGlvbiBvbiBgeGA6CgpgYGAKbGV0IHg6IFZlYzxjaGFyPiA9ICJoZWxsbyIuY2hhcnMoKS5yZXYoKS5jb2xsZWN0KCk7CmBgYAoKSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBhbm5vdGF0ZSB0aGUgZnVsbCB0eXBlLiBPbmNlIHRoZSBhbWJpZ3VpdHkgaXMgcmVzb2x2ZWQsCnRoZSBjb21waWxlciBjYW4gaW5mZXIgdGhlIHJlc3Q6CgpgYGAKbGV0IHg6IFZlYzxfPiA9ICJoZWxsbyIuY2hhcnMoKS5yZXYoKS5jb2xsZWN0KCk7CmBgYAoKQW5vdGhlciB3YXkgdG8gcHJvdmlkZSB0aGUgY29tcGlsZXIgd2l0aCBlbm91Z2ggaW5mb3JtYXRpb24sIGlzIHRvIHNwZWNpZnkgdGhlCmdlbmVyaWMgdHlwZSBwYXJhbWV0ZXI6CgpgYGAKbGV0IHggPSAiaGVsbG8iLmNoYXJzKCkucmV2KCkuY29sbGVjdDo6PFZlYzxjaGFyPj4oKTsKYGBgCgpBZ2FpbiwgeW91IG5lZWQgbm90IHNwZWNpZnkgdGhlIGZ1bGwgdHlwZSBpZiB0aGUgY29tcGlsZXIgY2FuIGluZmVyIGl0OgoKYGBgCmxldCB4ID0gImhlbGxvIi5jaGFycygpLnJldigpLmNvbGxlY3Q6OjxWZWM8Xz4+KCk7CmBgYAoKQXBhcnQgZnJvbSBhIG1ldGhvZCBvciBmdW5jdGlvbiB3aXRoIGEgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlciwgdGhpcyBlcnJvciBjYW4Kb2NjdXIgd2hlbiBhIHR5cGUgcGFyYW1ldGVyIG9mIGEgc3RydWN0IG9yIHRyYWl0IGNhbm5vdCBiZSBpbmZlcnJlZC4gSW4gdGhhdApjYXNlIGl0IGlzIG5vdCBhbHdheXMgcG9zc2libGUgdG8gdXNlIGEgdHlwZSBhbm5vdGF0aW9uLCBiZWNhdXNlIGFsbCBjYW5kaWRhdGVzCmhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUuIEZvciBpbnN0YW5jZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI4MgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIG51bTogVCwKfQoKaW1wbDxUPiBGb288VD4gewogICAgZm4gYmFyKCkgLT4gaTMyIHsKICAgICAgICAwCiAgICB9CgogICAgZm4gYmF6KCkgewogICAgICAgIGxldCBudW1iZXIgPSBGb286OmJhcigpOwogICAgfQp9CmBgYAoKVGhpcyB3aWxsIGZhaWwgYmVjYXVzZSB0aGUgY29tcGlsZXIgZG9lcyBub3Qga25vdyB3aGljaCBpbnN0YW5jZSBvZiBgRm9vYCB0bwpjYWxsIGBiYXJgIG9uLiBDaGFuZ2UgYEZvbzo6YmFyKClgIHRvIGBGb286OjxUPjo6YmFyKClgIHRvIHJlc29sdmUgdGhlIGVycm9yLgpFMDI4M0FuIGltcGxlbWVudGF0aW9uIGNhbm5vdCBiZSBjaG9zZW4gdW5hbWJpZ3VvdXNseSBiZWNhdXNlIG9mIGxhY2sgb2YgaW5mb3JtYXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjgzCnRyYWl0IEdlbmVyYXRvciB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzI7Cn0KCnN0cnVjdCBJbXBsOwoKaW1wbCBHZW5lcmF0b3IgZm9yIEltcGwgewogICAgZm4gY3JlYXRlKCkgLT4gdTMyIHsgMSB9Cn0KCnN0cnVjdCBBbm90aGVySW1wbDsKCmltcGwgR2VuZXJhdG9yIGZvciBBbm90aGVySW1wbCB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzIgeyAyIH0KfQoKZm4gbWFpbigpIHsKICAgIGxldCBjb250OiB1MzIgPSBHZW5lcmF0b3I6OmNyZWF0ZSgpOwogICAgLy8gZXJyb3IsIGltcG9zc2libGUgdG8gY2hvb3NlIG9uZSBvZiBHZW5lcmF0b3IgdHJhaXQgaW1wbGVtZW50YXRpb24KICAgIC8vIFNob3VsZCBpdCBiZSBJbXBsIG9yIEFub3RoZXJJbXBsLCBtYXliZSBzb21ldGhpbmcgZWxzZT8KfQpgYGAKClRoaXMgZXJyb3IgY2FuIGJlIHNvbHZlZCBieSBhZGRpbmcgdHlwZSBhbm5vdGF0aW9ucyB0aGF0IHByb3ZpZGUgdGhlIG1pc3NpbmcKaW5mb3JtYXRpb24gdG8gdGhlIGNvbXBpbGVyLiBJbiB0aGlzIGNhc2UsIHRoZSBzb2x1dGlvbiBpcyB0byB1c2UgYSBjb25jcmV0ZQp0eXBlOgoKYGBgCnRyYWl0IEdlbmVyYXRvciB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzI7Cn0KCnN0cnVjdCBBbm90aGVySW1wbDsKCmltcGwgR2VuZXJhdG9yIGZvciBBbm90aGVySW1wbCB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzIgeyAyIH0KfQoKZm4gbWFpbigpIHsKICAgIGxldCBnZW4xID0gQW5vdGhlckltcGw6OmNyZWF0ZSgpOwoKICAgIC8vIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBtZXRob2RzIHdpdGggc2FtZSBuYW1lIChkaWZmZXJlbnQgdHJhaXRzKQogICAgbGV0IGdlbjIgPSA8QW5vdGhlckltcGwgYXMgR2VuZXJhdG9yPjo6Y3JlYXRlKCk7Cn0KYGBgCkUwMjg0VGhpcyBlcnJvciBvY2N1cnMgd2hlbiB0aGUgY29tcGlsZXIgaXMgdW5hYmxlIHRvIHVuYW1iaWd1b3VzbHkgaW5mZXIgdGhlCnJldHVybiB0eXBlIG9mIGEgZnVuY3Rpb24gb3IgbWV0aG9kIHdoaWNoIGlzIGdlbmVyaWMgb24gcmV0dXJuIHR5cGUsIHN1Y2gKYXMgdGhlIGBjb2xsZWN0YCBtZXRob2QgZm9yIGBJdGVyYXRvcmBzLgoKRm9yIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyODQKZm4gZm9vKCkgLT4gUmVzdWx0PGJvb2wsICgpPiB7CiAgICBsZXQgcmVzdWx0cyA9IFtPayh0cnVlKSwgT2soZmFsc2UpLCBFcnIoKCkpXS5pdGVyKCkuY2xvbmVkKCk7CiAgICBsZXQgdjogVmVjPGJvb2w+ID0gcmVzdWx0cy5jb2xsZWN0KCk/OwogICAgLy8gRG8gdGhpbmdzIHdpdGggdi4uLgogICAgT2sodHJ1ZSkKfQpgYGAKCkhlcmUgd2UgaGF2ZSBhbiBpdGVyYXRvciBgcmVzdWx0c2Agb3ZlciBgUmVzdWx0PGJvb2wsICgpPmAuCkhlbmNlLCBgcmVzdWx0cy5jb2xsZWN0KClgIGNhbiByZXR1cm4gYW55IHR5cGUgaW1wbGVtZW50aW5nCmBGcm9tSXRlcmF0b3I8UmVzdWx0PGJvb2wsICgpPj5gLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlCmA/YCBvcGVyYXRvciBjYW4gYWNjZXB0IGFueSB0eXBlIGltcGxlbWVudGluZyBgVHJ5YC4KClRoZSBhdXRob3Igb2YgdGhpcyBjb2RlIHByb2JhYmx5IHdhbnRzIGBjb2xsZWN0KClgIHRvIHJldHVybiBhCmBSZXN1bHQ8VmVjPGJvb2w+LCAoKT5gLCBidXQgdGhlIGNvbXBpbGVyIGNhbid0IGJlIHN1cmUKdGhhdCB0aGVyZSBpc24ndCBhbm90aGVyIHR5cGUgYFRgIGltcGxlbWVudGluZyBib3RoIGBUcnlgIGFuZApgRnJvbUl0ZXJhdG9yPFJlc3VsdDxib29sLCAoKT4+YCBpbiBzY29wZSBzdWNoIHRoYXQKYFQ6Ok9rID09IFZlYzxib29sPmAuIEhlbmNlLCB0aGlzIGNvZGUgaXMgYW1iaWd1b3VzIGFuZCBhbiBlcnJvcgppcyByZXR1cm5lZC4KClRvIHJlc29sdmUgdGhpcyBlcnJvciwgdXNlIGEgY29uY3JldGUgdHlwZSBmb3IgdGhlIGludGVybWVkaWF0ZSBleHByZXNzaW9uOgoKYGBgCmZuIGZvbygpIC0+IFJlc3VsdDxib29sLCAoKT4gewogICAgbGV0IHJlc3VsdHMgPSBbT2sodHJ1ZSksIE9rKGZhbHNlKSwgRXJyKCgpKV0uaXRlcigpLmNsb25lZCgpOwogICAgbGV0IHYgPSB7CiAgICAgICAgbGV0IHRlbXA6IFJlc3VsdDxWZWM8Ym9vbD4sICgpPiA9IHJlc3VsdHMuY29sbGVjdCgpOwogICAgICAgIHRlbXA/CiAgICB9OwogICAgLy8gRG8gdGhpbmdzIHdpdGggdi4uLgogICAgT2sodHJ1ZSkKfQpgYGAKCk5vdGUgdGhhdCB0aGUgdHlwZSBvZiBgdmAgY2FuIG5vdyBiZSBpbmZlcnJlZCBmcm9tIHRoZSB0eXBlIG9mIGB0ZW1wYC4KRTAyOTcjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpQYXR0ZXJucyB1c2VkIHRvIGJpbmQgbmFtZXMgbXVzdCBiZSBpcnJlZnV0YWJsZS4gVGhhdCBpcywgdGhleSBtdXN0IGd1YXJhbnRlZQp0aGF0IGEgbmFtZSB3aWxsIGJlIGV4dHJhY3RlZCBpbiBhbGwgY2FzZXMuIEluc3RlYWQgb2YgcGF0dGVybiBtYXRjaGluZyB0aGUKbG9vcCB2YXJpYWJsZSwgY29uc2lkZXIgdXNpbmcgYSBgbWF0Y2hgIG9yIGBpZiBsZXRgIGluc2lkZSB0aGUgbG9vcCBib2R5LiBGb3IKaW5zdGFuY2U6CgpgYGBjb21waWxlX2ZhaWwsRTAwMDUKbGV0IHhzIDogVmVjPE9wdGlvbjxpMzI+PiA9IHZlYyFbU29tZSgxKSwgTm9uZV07CgovLyBUaGlzIGZhaWxzIGJlY2F1c2UgYE5vbmVgIGlzIG5vdCBjb3ZlcmVkLgpmb3IgU29tZSh4KSBpbiB4cyB7CiAgICAvLyAuLi4KfQpgYGAKCk1hdGNoIGluc2lkZSB0aGUgbG9vcCBpbnN0ZWFkOgoKYGBgCmxldCB4cyA6IFZlYzxPcHRpb248aTMyPj4gPSB2ZWMhW1NvbWUoMSksIE5vbmVdOwoKZm9yIGl0ZW0gaW4geHMgewogICAgbWF0Y2ggaXRlbSB7CiAgICAgICAgU29tZSh4KSA9PiB7fSwKICAgICAgICBOb25lID0+IHt9LAogICAgfQp9CmBgYAoKT3IgdXNlIGBpZiBsZXRgOgoKYGBgCmxldCB4cyA6IFZlYzxPcHRpb248aTMyPj4gPSB2ZWMhW1NvbWUoMSksIE5vbmVdOwoKZm9yIGl0ZW0gaW4geHMgewogICAgaWYgbGV0IFNvbWUoeCkgPSBpdGVtIHsKICAgICAgICAvLyAuLi4KICAgIH0KfQpgYGAKRTAzMDEjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpNdXRhYmxlIGJvcnJvd3MgYXJlIG5vdCBhbGxvd2VkIGluIHBhdHRlcm4gZ3VhcmRzLCBiZWNhdXNlIG1hdGNoaW5nIGNhbm5vdCBoYXZlCnNpZGUgZWZmZWN0cy4gU2lkZSBlZmZlY3RzIGNvdWxkIGFsdGVyIHRoZSBtYXRjaGVkIG9iamVjdCBvciB0aGUgZW52aXJvbm1lbnQKb24gd2hpY2ggdGhlIG1hdGNoIGRlcGVuZHMgaW4gc3VjaCBhIHdheSwgdGhhdCB0aGUgbWF0Y2ggd291bGQgbm90IGJlCmV4aGF1c3RpdmUuIEZvciBpbnN0YW5jZSwgdGhlIGZvbGxvd2luZyB3b3VsZCBub3QgbWF0Y2ggYW55IGFybSBpZiBtdXRhYmxlCmJvcnJvd3Mgd2VyZSBhbGxvd2VkOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk2Cm1hdGNoIFNvbWUoKCkpIHsKICAgIE5vbmUgPT4geyB9LAogICAgb3B0aW9uIGlmIG9wdGlvbi50YWtlKCkuaXNfbm9uZSgpID0+IHsKICAgICAgICAvKiBpbXBvc3NpYmxlLCBvcHRpb24gaXMgYFNvbWVgICovCiAgICB9LAogICAgU29tZShfKSA9PiB7IH0gLy8gV2hlbiB0aGUgcHJldmlvdXMgbWF0Y2ggZmFpbGVkLCB0aGUgb3B0aW9uIGJlY2FtZSBgTm9uZWAuCn0KYGBgCkUwMzAyIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQXNzaWdubWVudHMgYXJlIG5vdCBhbGxvd2VkIGluIHBhdHRlcm4gZ3VhcmRzLCBiZWNhdXNlIG1hdGNoaW5nIGNhbm5vdCBoYXZlCnNpZGUgZWZmZWN0cy4gU2lkZSBlZmZlY3RzIGNvdWxkIGFsdGVyIHRoZSBtYXRjaGVkIG9iamVjdCBvciB0aGUgZW52aXJvbm1lbnQKb24gd2hpY2ggdGhlIG1hdGNoIGRlcGVuZHMgaW4gc3VjaCBhIHdheSwgdGhhdCB0aGUgbWF0Y2ggd291bGQgbm90IGJlCmV4aGF1c3RpdmUuIEZvciBpbnN0YW5jZSwgdGhlIGZvbGxvd2luZyB3b3VsZCBub3QgbWF0Y2ggYW55IGFybSBpZiBhc3NpZ25tZW50cwp3ZXJlIGFsbG93ZWQ6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTQKbWF0Y2ggU29tZSgoKSkgewogICAgTm9uZSA9PiB7IH0sCiAgICBvcHRpb24gaWYgeyBvcHRpb24gPSBOb25lOyBmYWxzZSB9ID0+IHsgfSwKICAgIFNvbWUoXykgPT4geyB9IC8vIFdoZW4gdGhlIHByZXZpb3VzIG1hdGNoIGZhaWxlZCwgdGhlIG9wdGlvbiBiZWNhbWUgYE5vbmVgLgp9CmBgYApFMDMwMyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClN1Yi1iaW5kaW5ncywgZS5nLiBgcmVmIHggQCBTb21lKHJlZiB5KWAgYXJlIG5vdyBhbGxvd2VkIHVuZGVyCmAjIVtmZWF0dXJlKGJpbmRpbmdzX2FmdGVyX2F0KV1gIGFuZCBjaGVja2VkIHRvIG1ha2Ugc3VyZSB0aGF0Cm1lbW9yeSBzYWZldHkgaXMgdXBoZWxkLgoKLS0tLS0tLS0tLS0tLS0KCkluIGNlcnRhaW4gY2FzZXMgaXQgaXMgcG9zc2libGUgZm9yIHN1Yi1iaW5kaW5ncyB0byB2aW9sYXRlIG1lbW9yeSBzYWZldHkuClVwZGF0ZXMgdG8gdGhlIGJvcnJvdyBjaGVja2VyIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUnVzdCBtYXkgcmVtb3ZlIHRoaXMKcmVzdHJpY3Rpb24sIGJ1dCBmb3Igbm93IHBhdHRlcm5zIG11c3QgYmUgcmV3cml0dGVuIHdpdGhvdXQgc3ViLWJpbmRpbmdzLgoKQmVmb3JlOgoKYGBgY29tcGlsZV9mYWlsCm1hdGNoIFNvbWUoImhpIi50b19zdHJpbmcoKSkgewogICAgcmVmIG9wX3N0cmluZ19yZWYgQCBTb21lKHMpID0+IHt9LAogICAgTm9uZSA9PiB7fSwKfQpgYGAKCkFmdGVyOgoKYGBgCm1hdGNoIFNvbWUoImhpIi50b19zdHJpbmcoKSkgewogICAgU29tZShyZWYgcykgPT4gewogICAgICAgIGxldCBvcF9zdHJpbmdfcmVmID0gJlNvbWUocyk7CiAgICAgICAgLy8gLi4uCiAgICB9LAogICAgTm9uZSA9PiB7fSwKfQpgYGAKClRoZSBgb3Bfc3RyaW5nX3JlZmAgYmluZGluZyBoYXMgdHlwZSBgJk9wdGlvbjwmU3RyaW5nPmAgaW4gYm90aCBjYXNlcy4KClNlZSBhbHNvIFtJc3N1ZSAxNDU4N11baXNzdWUtMTQ1ODddLgoKW2lzc3VlLTE0NTg3XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy8xNDU4NwpFMDMwN1RoZSBgc2VsZmAgcGFyYW1ldGVyIGluIGEgbWV0aG9kIGhhcyBhbiBpbnZhbGlkICJyZWNlaXZlciB0eXBlIi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMDcKc3RydWN0IEZvbzsKc3RydWN0IEJhcjsKCnRyYWl0IFRyYWl0IHsKICAgIGZuIGZvbygmc2VsZik7Cn0KCmltcGwgVHJhaXQgZm9yIEZvbyB7CiAgICBmbiBmb28oc2VsZjogJkJhcikge30KfQpgYGAKCk1ldGhvZHMgdGFrZSBhIHNwZWNpYWwgZmlyc3QgcGFyYW1ldGVyLCBvZiB3aGljaCB0aGVyZSBhcmUgdGhyZWUgdmFyaWFudHM6CmBzZWxmYCwgYCZzZWxmYCwgYW5kIGAmbXV0IHNlbGZgLiBUaGVzZSBhcmUgc3ludGFjdGljIHN1Z2FyIGZvcgpgc2VsZjogU2VsZmAsIGBzZWxmOiAmU2VsZmAsIGFuZCBgc2VsZjogJm11dCBTZWxmYCByZXNwZWN0aXZlbHkuCgpgYGAKIyBzdHJ1Y3QgRm9vOwp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpOwovLyAgICAgICAgIF5eXl5eIGBzZWxmYCBoZXJlIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSByZWNlaXZlciBvYmplY3QKfQoKaW1wbCBUcmFpdCBmb3IgRm9vIHsKICAgIGZuIGZvbygmc2VsZikge30KLy8gICAgICAgICBeXl5eXiB0aGUgcmVjZWl2ZXIgdHlwZSBpcyBgJkZvb2AKfQpgYGAKClRoZSB0eXBlIGBTZWxmYCBhY3RzIGFzIGFuIGFsaWFzIHRvIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IHRyYWl0CmltcGxlbWVudGVyLCBvciAicmVjZWl2ZXIgdHlwZSIuIEJlc2lkZXMgdGhlIGFscmVhZHkgbWVudGlvbmVkIGBTZWxmYCwKYCZTZWxmYCBhbmQgYCZtdXQgU2VsZmAgdmFsaWQgcmVjZWl2ZXIgdHlwZXMsIHRoZSBmb2xsb3dpbmcgYXJlIGFsc28gdmFsaWQ6CmBzZWxmOiBCb3g8U2VsZj5gLCBgc2VsZjogUmM8U2VsZj5gLCBgc2VsZjogQXJjPFNlbGY+YCwgYW5kIGBzZWxmOiBQaW48UD5gCih3aGVyZSBQIGlzIG9uZSBvZiB0aGUgcHJldmlvdXMgdHlwZXMgZXhjZXB0IGBTZWxmYCkuIE5vdGUgdGhhdCBgU2VsZmAgY2FuCmFsc28gYmUgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50aW5nIHR5cGUsIGxpa2UgYEZvb2AgaW4gdGhlIGZvbGxvd2luZwpleGFtcGxlOgoKYGBgCiMgc3RydWN0IEZvbzsKIyB0cmFpdCBUcmFpdCB7CiMgICAgIGZuIGZvbygmc2VsZik7CiMgfQppbXBsIFRyYWl0IGZvciBGb28gewogICAgZm4gZm9vKHNlbGY6ICZGb28pIHt9Cn0KYGBgCgpUaGlzIGVycm9yIHdpbGwgYmUgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIgd2hlbiB1c2luZyBhbiBpbnZhbGlkIHJlY2VpdmVyIHR5cGUsCmxpa2UgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzA3CiMgc3RydWN0IEZvbzsKIyBzdHJ1Y3QgQmFyOwojIHRyYWl0IFRyYWl0IHsKIyAgICAgZm4gZm9vKCZzZWxmKTsKIyB9CmltcGwgVHJhaXQgZm9yIEZvbyB7CiAgICBmbiBmb28oc2VsZjogJkJhcikge30KfQpgYGAKClRoZSBuaWdodGx5IGZlYXR1cmUgW0FyYml0cmFyeSBzZWxmIHR5cGVzXVtBU1RdIGV4dGVuZHMgdGhlIGFjY2VwdGVkCnNldCBvZiByZWNlaXZlciB0eXBlcyB0byBhbHNvIGluY2x1ZGUgYW55IHR5cGUgdGhhdCBjYW4gZGVyZWZlcmVuY2UgdG8KYFNlbGZgOgoKYGBgCiMhW2ZlYXR1cmUoYXJiaXRyYXJ5X3NlbGZfdHlwZXMpXQoKc3RydWN0IEZvbzsKc3RydWN0IEJhcjsKCi8vIEJlY2F1c2UgeW91IGNhbiBkZXJlZmVyZW5jZSBgQmFyYCBpbnRvIGBGb29gLi4uCmltcGwgc3RkOjpvcHM6OkRlcmVmIGZvciBCYXIgewogICAgdHlwZSBUYXJnZXQgPSBGb287CgogICAgZm4gZGVyZWYoJnNlbGYpIC0+ICZGb28gewogICAgICAgICZGb28KICAgIH0KfQoKaW1wbCBGb28gewogICAgZm4gZm9vKHNlbGY6IEJhcikge30KLy8gICAgICAgICBeXl5eXl5eXl4gLi4uaXQgY2FuIGJlIHVzZWQgYXMgdGhlIHJlY2VpdmVyIHR5cGUKfQpgYGAKCltBU1RdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3Vuc3RhYmxlLWJvb2svbGFuZ3VhZ2UtZmVhdHVyZXMvYXJiaXRyYXJ5LXNlbGYtdHlwZXMuaHRtbApFMDMwOEV4cGVjdGVkIHR5cGUgZGlkIG5vdCBtYXRjaCB0aGUgcmVjZWl2ZWQgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMDgKbGV0IHg6IGkzMiA9ICJJIGFtIG5vdCBhIG51bWJlciEiOwovLyAgICAgfn5+ICAgfn5+fn5+fn5+fn5+fn5+fn5+fn4KLy8gICAgICB8ICAgICAgICAgICAgIHwKLy8gICAgICB8ICAgIGluaXRpYWxpemluZyBleHByZXNzaW9uOwovLyAgICAgIHwgICAgY29tcGlsZXIgaW5mZXJzIHR5cGUgYCZzdHJgCi8vICAgICAgfAovLyAgICB0eXBlIGBpMzJgIGFzc2lnbmVkIHRvIHZhcmlhYmxlIGB4YApgYGAKClRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gdGhlIGNvbXBpbGVyIGlzIHVuYWJsZSB0byBpbmZlciB0aGUgY29uY3JldGUgdHlwZSBvZiBhCnZhcmlhYmxlLiBJdCBjYW4gb2NjdXIgaW4gc2V2ZXJhbCBjYXNlcywgdGhlIG1vc3QgY29tbW9uIGJlaW5nIGEgbWlzbWF0Y2gKYmV0d2VlbiB0d28gdHlwZXM6IHRoZSB0eXBlIHRoZSBhdXRob3IgZXhwbGljaXRseSBhc3NpZ25lZCwgYW5kIHRoZSB0eXBlIHRoZQpjb21waWxlciBpbmZlcnJlZC4KRTAzMDlBIHBhcmFtZXRlciB0eXBlIGlzIG1pc3NpbmcgYW4gZXhwbGljaXQgbGlmZXRpbWUgYm91bmQgYW5kIG1heSBub3QgbGl2ZSBsb25nCmVub3VnaC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMDkKLy8gVGhpcyB3b24ndCBjb21waWxlIGJlY2F1c2UgdGhlIGFwcGxpY2FibGUgaW1wbCBvZgovLyBgU29tZVRyYWl0YCAoYmVsb3cpIHJlcXVpcmVzIHRoYXQgYFQ6ICdhYCwgYnV0IHRoZSBzdHJ1Y3QgZG9lcwovLyBub3QgaGF2ZSBhIG1hdGNoaW5nIHdoZXJlLWNsYXVzZS4Kc3RydWN0IEZvbzwnYSwgVD4gewogICAgZm9vOiA8VCBhcyBTb21lVHJhaXQ8J2E+Pjo6T3V0cHV0LAp9Cgp0cmFpdCBTb21lVHJhaXQ8J2E+IHsKICAgIHR5cGUgT3V0cHV0Owp9CgppbXBsPCdhLCBUPiBTb21lVHJhaXQ8J2E+IGZvciBUCndoZXJlCiAgICBUOiAnYSwKewogICAgdHlwZSBPdXRwdXQgPSB1MzI7Cn0KYGBgCgpUaGUgdHlwZSBkZWZpbml0aW9uIGNvbnRhaW5zIHNvbWUgZmllbGQgd2hvc2UgdHlwZSByZXF1aXJlcyBhbiBvdXRsaXZlcwphbm5vdGF0aW9uLiBPdXRsaXZlcyBhbm5vdGF0aW9ucyAoZS5nLiwgYFQ6ICdhYCkgYXJlIHVzZWQgdG8gZ3VhcmFudGVlIHRoYXQgYWxsCnRoZSBkYXRhIGluIFQgaXMgdmFsaWQgZm9yIGF0IGxlYXN0IHRoZSBsaWZldGltZSBgJ2FgLiBUaGlzIHNjZW5hcmlvIG1vc3QKY29tbW9ubHkgYXJpc2VzIHdoZW4gdGhlIHR5cGUgY29udGFpbnMgYW4gYXNzb2NpYXRlZCB0eXBlIHJlZmVyZW5jZSBsaWtlCmA8VCBhcyBTb21lVHJhaXQ8J2E+Pjo6T3V0cHV0YCwgYXMgc2hvd24gaW4gdGhlIHByZXZpb3VzIGNvZGUuCgpUaGVyZSwgdGhlIHdoZXJlIGNsYXVzZSBgVDogJ2FgIHRoYXQgYXBwZWFycyBvbiB0aGUgaW1wbCBpcyBub3Qga25vd24gdG8gYmUKc2F0aXNmaWVkIG9uIHRoZSBzdHJ1Y3QuIFRvIG1ha2UgdGhpcyBleGFtcGxlIGNvbXBpbGUsIHlvdSBoYXZlIHRvIGFkZCBhCndoZXJlLWNsYXVzZSBsaWtlIGBUOiAnYWAgdG8gdGhlIHN0cnVjdCBkZWZpbml0aW9uOgoKYGBgCnN0cnVjdCBGb288J2EsIFQ+CndoZXJlCiAgICBUOiAnYSwKewogICAgZm9vOiA8VCBhcyBTb21lVHJhaXQ8J2E+Pjo6T3V0cHV0Cn0KCnRyYWl0IFNvbWVUcmFpdDwnYT4gewogICAgdHlwZSBPdXRwdXQ7Cn0KCmltcGw8J2EsIFQ+IFNvbWVUcmFpdDwnYT4gZm9yIFQKd2hlcmUKICAgIFQ6ICdhLAp7CiAgICB0eXBlIE91dHB1dCA9IHUzMjsKfQpgYGAKRTAzMTBBIHBhcmFtZXRlciB0eXBlIGlzIG1pc3NpbmcgYSBsaWZldGltZSBjb25zdHJhaW50IG9yIGhhcyBhIGxpZmV0aW1lIHRoYXQKZG9lcyBub3QgbGl2ZSBsb25nIGVub3VnaC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMTAKLy8gVGhpcyB3b24ndCBjb21waWxlIGJlY2F1c2UgVCBpcyBub3QgY29uc3RyYWluZWQgdG8gdGhlIHN0YXRpYyBsaWZldGltZQovLyB0aGUgcmVmZXJlbmNlIG5lZWRzCnN0cnVjdCBGb288VD4gewogICAgZm9vOiAmJ3N0YXRpYyBUCn0KYGBgCgpUeXBlIHBhcmFtZXRlcnMgaW4gdHlwZSBkZWZpbml0aW9ucyBoYXZlIGxpZmV0aW1lcyBhc3NvY2lhdGVkIHdpdGggdGhlbSB0aGF0CnJlcHJlc2VudCBob3cgbG9uZyB0aGUgZGF0YSBzdG9yZWQgd2l0aGluIHRoZW0gaXMgZ3VhcmFudGVlZCB0byBsaXZlLiBUaGlzCmxpZmV0aW1lIG11c3QgYmUgYXMgbG9uZyBhcyB0aGUgZGF0YSBuZWVkcyB0byBiZSBhbGl2ZSwgYW5kIG1pc3NpbmcgdGhlCmNvbnN0cmFpbnQgdGhhdCBkZW5vdGVzIHRoaXMgd2lsbCBjYXVzZSB0aGlzIGVycm9yLgoKVGhpcyB3aWxsIGNvbXBpbGUsIGJlY2F1c2UgaXQgaGFzIHRoZSBjb25zdHJhaW50IG9uIHRoZSB0eXBlIHBhcmFtZXRlcjoKCmBgYApzdHJ1Y3QgRm9vPFQ6ICdzdGF0aWM+IHsKICAgIGZvbzogJidzdGF0aWMgVAp9CmBgYApFMDMxMlJlZmVyZW5jZSdzIGxpZmV0aW1lIG9mIGJvcnJvd2VkIGNvbnRlbnQgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgbGlmZXRpbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzEyCnB1YiBmbiBvcHRfc3RyPCdhPihtYXliZXN0cjogJidhIE9wdGlvbjxTdHJpbmc+KSAtPiAmJ3N0YXRpYyBzdHIgewogICAgaWYgbWF5YmVzdHIuaXNfbm9uZSgpIHsKICAgICAgICAiKG5vbmUpIgogICAgfSBlbHNlIHsKICAgICAgICBsZXQgczogJidhIHN0ciA9IG1heWJlc3RyLmFzX3JlZigpLnVud3JhcCgpOwogICAgICAgIHMgIC8vIEludmFsaWQgbGlmZXRpbWUhCiAgICB9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZWl0aGVyIGxlc3NlbiB0aGUgZXhwZWN0ZWQgbGlmZXRpbWUgb3IgZmluZCBhIHdheSB0byBub3QgaGF2ZQp0byB1c2UgdGhpcyByZWZlcmVuY2Ugb3V0c2lkZSBvZiBpdHMgY3VycmVudCBzY29wZSAoYnkgcnVubmluZyB0aGUgY29kZSBkaXJlY3RseQppbiB0aGUgc2FtZSBibG9jayBmb3IgZXhhbXBsZT8pOgoKYGBgCi8vIEluIHRoaXMgY2FzZSwgd2UgY2FuIGZpeCB0aGUgaXNzdWUgYnkgc3dpdGNoaW5nIGZyb20gInN0YXRpYyIgbGlmZXRpbWUgdG8gJ2EKcHViIGZuIG9wdF9zdHI8J2E+KG1heWJlc3RyOiAmJ2EgT3B0aW9uPFN0cmluZz4pIC0+ICYnYSBzdHIgewogICAgaWYgbWF5YmVzdHIuaXNfbm9uZSgpIHsKICAgICAgICAiKG5vbmUpIgogICAgfSBlbHNlIHsKICAgICAgICBsZXQgczogJidhIHN0ciA9IG1heWJlc3RyLmFzX3JlZigpLnVud3JhcCgpOwogICAgICAgIHMgIC8vIE9rIQogICAgfQp9CmBgYApFMDMxN0FuIGBpZmAgZXhwcmVzc2lvbiBpcyBtaXNzaW5nIGFuIGBlbHNlYCBibG9jay4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMTcKbGV0IHggPSA1OwpsZXQgYSA9IGlmIHggPT0gNSB7CiAgICAxCn07CmBgYAoKVGhpcyBlcnJvciBvY2N1cnMgd2hlbiBhbiBgaWZgIGV4cHJlc3Npb24gd2l0aG91dCBhbiBgZWxzZWAgYmxvY2sgaXMgdXNlZCBpbiBhCmNvbnRleHQgd2hlcmUgYSB0eXBlIG90aGVyIHRoYW4gYCgpYCBpcyBleHBlY3RlZC4gSW4gdGhlIHByZXZpb3VzIGNvZGUgZXhhbXBsZSwKdGhlIGBsZXRgIGV4cHJlc3Npb24gd2FzIGV4cGVjdGluZyBhIHZhbHVlIGJ1dCBzaW5jZSB0aGVyZSB3YXMgbm8gYGVsc2VgLCBubwp2YWx1ZSB3YXMgcmV0dXJuZWQuCgpBbiBgaWZgIGV4cHJlc3Npb24gd2l0aG91dCBhbiBgZWxzZWAgYmxvY2sgaGFzIHRoZSB0eXBlIGAoKWAsIHNvIHRoaXMgaXMgYSB0eXBlCmVycm9yLiBUbyByZXNvbHZlIGl0LCBhZGQgYW4gYGVsc2VgIGJsb2NrIGhhdmluZyB0aGUgc2FtZSB0eXBlIGFzIHRoZSBgaWZgCmJsb2NrLgoKU28gdG8gZml4IHRoZSBwcmV2aW91cyBjb2RlIGV4YW1wbGU6CgpgYGAKbGV0IHggPSA1OwpsZXQgYSA9IGlmIHggPT0gNSB7CiAgICAxCn0gZWxzZSB7CiAgICAyCn07CmBgYApFMDMyMUEgY3Jvc3MtY3JhdGUgb3B0LW91dCB0cmFpdCB3YXMgaW1wbGVtZW50ZWQgb24gc29tZXRoaW5nIHdoaWNoIHdhc24ndCBhIHN0cnVjdApvciBlbnVtIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzIxCiMhW2ZlYXR1cmUob3B0aW5fYnVpbHRpbl90cmFpdHMpXQoKc3RydWN0IEZvbzsKCmltcGwgIVN5bmMgZm9yIEZvbyB7fQoKdW5zYWZlIGltcGwgU2VuZCBmb3IgJidzdGF0aWMgRm9vIHt9Ci8vIGVycm9yOiBjcm9zcy1jcmF0ZSB0cmFpdHMgd2l0aCBhIGRlZmF1bHQgaW1wbCwgbGlrZSBgY29yZTo6bWFya2VyOjpTZW5kYCwKLy8gICAgICAgIGNhbiBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBhIHN0cnVjdC9lbnVtIHR5cGUsIG5vdAovLyAgICAgICAgYCYnc3RhdGljIEZvb2AKYGBgCgpPbmx5IHN0cnVjdHMgYW5kIGVudW1zIGFyZSBwZXJtaXR0ZWQgdG8gaW1wbCBTZW5kLCBTeW5jLCBhbmQgb3RoZXIgb3B0LW91dAp0cmFpdCwgYW5kIHRoZSBzdHJ1Y3Qgb3IgZW51bSBtdXN0IGJlIGxvY2FsIHRvIHRoZSBjdXJyZW50IGNyYXRlLiBTbywgZm9yCmV4YW1wbGUsIGB1bnNhZmUgaW1wbCBTZW5kIGZvciBSYzxGb28+YCBpcyBub3QgYWxsb3dlZC4KRTAzMjJUaGUgYFNpemVkYCB0cmFpdCB3YXMgaW1wbGVtZW50ZWQgZXhwbGljaXRseS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMjIKc3RydWN0IEZvbzsKCmltcGwgU2l6ZWQgZm9yIEZvbyB7fSAvLyBlcnJvciEKYGBgCgpUaGUgYFNpemVkYCB0cmFpdCBpcyBhIHNwZWNpYWwgdHJhaXQgYnVpbHQtaW4gdG8gdGhlIGNvbXBpbGVyIGZvciB0eXBlcyB3aXRoIGEKY29uc3RhbnQgc2l6ZSBrbm93biBhdCBjb21waWxlLXRpbWUuIFRoaXMgdHJhaXQgaXMgYXV0b21hdGljYWxseSBpbXBsZW1lbnRlZApmb3IgdHlwZXMgYXMgbmVlZGVkIGJ5IHRoZSBjb21waWxlciwgYW5kIGl0IGlzIGN1cnJlbnRseSBkaXNhbGxvd2VkIHRvCmV4cGxpY2l0bHkgaW1wbGVtZW50IGl0IGZvciBhIHR5cGUuCkUwMzIzQW4gYXNzb2NpYXRlZCBjb25zdCB3YXMgaW1wbGVtZW50ZWQgd2hlbiBhbm90aGVyIHRyYWl0IGl0ZW0gd2FzIGV4cGVjdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMyMwp0cmFpdCBGb28gewogICAgdHlwZSBOOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBjb25zdCBOIDogdTMyID0gMDsKICAgIC8vIGVycm9yOiBpdGVtIGBOYCBpcyBhbiBhc3NvY2lhdGVkIGNvbnN0LCB3aGljaCBkb2Vzbid0IG1hdGNoIGl0cwogICAgLy8gICAgICAgIHRyYWl0IGA8QmFyIGFzIEZvbz5gCn0KYGBgCgpQbGVhc2UgdmVyaWZ5IHRoYXQgdGhlIGFzc29jaWF0ZWQgY29uc3Qgd2Fzbid0IG1pc3NwZWxsZWQgYW5kIHRoZSBjb3JyZWN0IHRyYWl0CndhcyBpbXBsZW1lbnRlZC4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIHR5cGUgTjsKfQoKaW1wbCBGb28gZm9yIEJhciB7CiAgICB0eXBlIE4gPSB1MzI7IC8vIG9rIQp9CmBgYAoKT3I6CgpgYGAKc3RydWN0IEJhcjsKCnRyYWl0IEZvbyB7CiAgICBjb25zdCBOIDogdTMyOwp9CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGNvbnN0IE4gOiB1MzIgPSAwOyAvLyBvayEKfQpgYGAKRTAzMjRBIG1ldGhvZCB3YXMgaW1wbGVtZW50ZWQgd2hlbiBhbm90aGVyIHRyYWl0IGl0ZW0gd2FzIGV4cGVjdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMyNApzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIGNvbnN0IE4gOiB1MzI7CgogICAgZm4gTSgpOwp9CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIE4oKSB7fQogICAgLy8gZXJyb3I6IGl0ZW0gYE5gIGlzIGFuIGFzc29jaWF0ZWQgbWV0aG9kLCB3aGljaCBkb2Vzbid0IG1hdGNoIGl0cwogICAgLy8gICAgICAgIHRyYWl0IGA8QmFyIGFzIEZvbz5gCn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIHZlcmlmeSB0aGF0IHRoZSBtZXRob2QgbmFtZSB3YXNuJ3QgbWlzc3BlbGxlZCBhbmQKdmVyaWZ5IHRoYXQgeW91IGFyZSBpbmRlZWQgaW1wbGVtZW50aW5nIHRoZSBjb3JyZWN0IHRyYWl0IGl0ZW1zLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgY29uc3QgTiA6IHUzMjsKCiAgICBmbiBNKCk7Cn0KCmltcGwgRm9vIGZvciBCYXIgewogICAgY29uc3QgTiA6IHUzMiA9IDA7CgogICAgZm4gTSgpIHt9IC8vIG9rIQp9CmBgYApFMDMyNUFuIGFzc29jaWF0ZWQgdHlwZSB3YXMgaW1wbGVtZW50ZWQgd2hlbiBhbm90aGVyIHRyYWl0IGl0ZW0gd2FzIGV4cGVjdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMyNQpzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIGNvbnN0IE4gOiB1MzI7Cn0KCmltcGwgRm9vIGZvciBCYXIgewogICAgdHlwZSBOID0gdTMyOwogICAgLy8gZXJyb3I6IGl0ZW0gYE5gIGlzIGFuIGFzc29jaWF0ZWQgdHlwZSwgd2hpY2ggZG9lc24ndCBtYXRjaCBpdHMKICAgIC8vICAgICAgICB0cmFpdCBgPEJhciBhcyBGb28+YAp9CmBgYAoKUGxlYXNlIHZlcmlmeSB0aGF0IHRoZSBhc3NvY2lhdGVkIHR5cGUgbmFtZSB3YXNuJ3QgbWlzc3BlbGxlZCBhbmQgeW91cgppbXBsZW1lbnRhdGlvbiBjb3JyZXNwb25kcyB0byB0aGUgdHJhaXQgZGVmaW5pdGlvbi4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIHR5cGUgTjsKfQoKaW1wbCBGb28gZm9yIEJhciB7CiAgICB0eXBlIE4gPSB1MzI7IC8vIG9rIQp9CmBgYAoKT3I6CgpgYGAKc3RydWN0IEJhcjsKCnRyYWl0IEZvbyB7CiAgICBjb25zdCBOIDogdTMyOwp9CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGNvbnN0IE4gOiB1MzIgPSAwOyAvLyBvayEKfQpgYGAKRTAzMjZBbiBpbXBsZW1lbnRhdGlvbiBvZiBhIHRyYWl0IGRvZXNuJ3QgbWF0Y2ggdGhlIHR5cGUgY29uc3RyYWludC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMjYKdHJhaXQgRm9vIHsKICAgIGNvbnN0IEJBUjogYm9vbDsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgY29uc3QgQkFSOiB1MzIgPSA1OyAvLyBlcnJvciwgZXhwZWN0ZWQgYm9vbCwgZm91bmQgdTMyCn0KYGBgCgpUaGUgdHlwZXMgb2YgYW55IGFzc29jaWF0ZWQgY29uc3RhbnRzIGluIGEgdHJhaXQgaW1wbGVtZW50YXRpb24gbXVzdCBtYXRjaCB0aGUKdHlwZXMgaW4gdGhlIHRyYWl0IGRlZmluaXRpb24uCkUwMzI4VGhlIFVuc2l6ZSB0cmFpdCBzaG91bGQgbm90IGJlIGltcGxlbWVudGVkIGRpcmVjdGx5LiBBbGwgaW1wbGVtZW50YXRpb25zIG9mClVuc2l6ZSBhcmUgcHJvdmlkZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29tcGlsZXIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzI4CiMhW2ZlYXR1cmUodW5zaXplKV0KCnVzZSBzdGQ6Om1hcmtlcjo6VW5zaXplOwoKcHViIHN0cnVjdCBNeVR5cGU7CgppbXBsPFQ+IFVuc2l6ZTxUPiBmb3IgTXlUeXBlIHt9CmBgYAoKSWYgeW91IGFyZSBkZWZpbmluZyB5b3VyIG93biBzbWFydCBwb2ludGVyIHR5cGUgYW5kIHdvdWxkIGxpa2UgdG8gZW5hYmxlCmNvbnZlcnNpb24gZnJvbSBhIHNpemVkIHRvIGFuIHVuc2l6ZWQgdHlwZSB3aXRoIHRoZQpbRFNUIGNvZXJjaW9uIHN5c3RlbV1bUkZDIDk4Ml0sIHVzZSBbYENvZXJjZVVuc2l6ZWRgXSBpbnN0ZWFkLgoKYGBgCiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQoKdXNlIHN0ZDo6b3BzOjpDb2VyY2VVbnNpemVkOwoKcHViIHN0cnVjdCBNeVR5cGU8VDogP1NpemVkPiB7CiAgICBmaWVsZF93aXRoX3Vuc2l6ZWRfdHlwZTogVCwKfQoKaW1wbDxULCBVPiBDb2VyY2VVbnNpemVkPE15VHlwZTxVPj4gZm9yIE15VHlwZTxUPgogICAgd2hlcmUgVDogQ29lcmNlVW5zaXplZDxVPiB7fQpgYGAKCltSRkMgOTgyXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMDk4Mi1kc3QtY29lcmNpb24ubWQKW2BDb2VyY2VVbnNpemVkYF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RkL29wcy90cmFpdC5Db2VyY2VVbnNpemVkLmh0bWwKRTAzMjkjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIGFjY2VzcyBhbiBhc3NvY2lhdGVkIGNvbnN0YW50IHRocm91Z2ggZWl0aGVyIGEgZ2VuZXJpYwp0eXBlIHBhcmFtZXRlciBvciBgU2VsZmAuIFRoaXMgaXMgbm90IHN1cHBvcnRlZCB5ZXQuIEFuIGV4YW1wbGUgY2F1c2luZyB0aGlzCmVycm9yIGlzIHNob3duIGJlbG93OgoKYGBgCnRyYWl0IEZvbyB7CiAgICBjb25zdCBCQVI6IGY2NDsKfQoKc3RydWN0IE15U3RydWN0OwoKaW1wbCBGb28gZm9yIE15U3RydWN0IHsKICAgIGNvbnN0IEJBUjogZjY0ID0gMGY2NDsKfQoKZm4gZ2V0X2Jhcl9iYWQ8RjogRm9vPih0OiBGKSAtPiBmNjQgewogICAgRjo6QkFSCn0KYGBgCgpDdXJyZW50bHksIHRoZSB2YWx1ZSBvZiBgQkFSYCBmb3IgYSBwYXJ0aWN1bGFyIHR5cGUgY2FuIG9ubHkgYmUgYWNjZXNzZWQKdGhyb3VnaCBhIGNvbmNyZXRlIHR5cGUsIGFzIHNob3duIGJlbG93OgoKYGBgCnRyYWl0IEZvbyB7CiAgICBjb25zdCBCQVI6IGY2NDsKfQoKc3RydWN0IE15U3RydWN0OwoKaW1wbCBGb28gZm9yIE15U3RydWN0IHsKICAgIGNvbnN0IEJBUjogZjY0ID0gMGY2NDsKfQoKZm4gZ2V0X2Jhcl9nb29kKCkgLT4gZjY0IHsKICAgIDxNeVN0cnVjdCBhcyBGb28+OjpCQVIKfQpgYGAKRTAzNjRQcml2YXRlIGl0ZW1zIGNhbm5vdCBiZSBwdWJsaWNseSByZS1leHBvcnRlZC4gVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB5b3UKYXR0ZW1wdGVkIHRvIGBwdWIgdXNlYCBhIHR5cGUgb3IgdmFsdWUgdGhhdCB3YXMgbm90IGl0c2VsZiBwdWJsaWMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzY0Cm1vZCBhIHsKICAgIGZuIGZvbygpIHt9CgogICAgbW9kIGEgewogICAgICAgIHB1YiB1c2Ugc3VwZXI6OmZvbzsgLy8gZXJyb3IhCiAgICB9Cn0KYGBgCgpUaGUgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBpdGVtcyB0aGF0IHlvdSBhcmUKcmUtZXhwb3J0aW5nIGFyZSB0aGVtc2VsdmVzIG1hcmtlZCB3aXRoIGBwdWJgOgoKYGBgCm1vZCBhIHsKICAgIHB1YiBmbiBmb28oKSB7fSAvLyBvayEKCiAgICBtb2QgYSB7CiAgICAgICAgcHViIHVzZSBzdXBlcjo6Zm9vOwogICAgfQp9CmBgYAoKU2VlIHRoZSBbVXNlIERlY2xhcmF0aW9uc11bdXNlLWRlY2xhcmF0aW9uc10gc2VjdGlvbiBvZiB0aGUgcmVmZXJlbmNlIGZvcgptb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgdG9waWMuCgpbdXNlLWRlY2xhcmF0aW9uc106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2l0ZW1zL3VzZS1kZWNsYXJhdGlvbnMuaHRtbApFMDM2NVByaXZhdGUgbW9kdWxlcyBjYW5ub3QgYmUgcHVibGljbHkgcmUtZXhwb3J0ZWQuIFRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgeW91CmF0dGVtcHRlZCB0byBgcHViIHVzZWAgYSBtb2R1bGUgdGhhdCB3YXMgbm90IGl0c2VsZiBwdWJsaWMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzY1Cm1vZCBmb28gewogICAgcHViIGNvbnN0IFg6IHUzMiA9IDE7Cn0KCnB1YiB1c2UgZm9vIGFzIGZvbzI7CgpmbiBtYWluKCkge30KYGBgCgpUaGUgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBtb2R1bGUgdGhhdCB5b3UgYXJlCnJlLWV4cG9ydGluZyBpcyBpdHNlbGYgbWFya2VkIHdpdGggYHB1YmA6CgpgYGAKcHViIG1vZCBmb28gewogICAgcHViIGNvbnN0IFg6IHUzMiA9IDE7Cn0KCnB1YiB1c2UgZm9vIGFzIGZvbzI7CgpmbiBtYWluKCkge30KYGBgCgpTZWUgdGhlIFtVc2UgRGVjbGFyYXRpb25zXVt1c2UtZGVjbGFyYXRpb25zXSBzZWN0aW9uIG9mIHRoZSByZWZlcmVuY2UgZm9yCm1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyB0b3BpYy4KClt1c2UtZGVjbGFyYXRpb25zXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvaXRlbXMvdXNlLWRlY2xhcmF0aW9ucy5odG1sCkUwMzY2QW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBpbXBsZW1lbnQgYERyb3BgIG9uIGEgY29uY3JldGUgc3BlY2lhbGl6YXRpb24gb2YgYQpnZW5lcmljIHR5cGUuIEFuIGV4YW1wbGUgaXMgc2hvd24gYmVsb3c6CgpgYGBjb21waWxlX2ZhaWwsRTAzNjYKc3RydWN0IEZvbzxUPiB7CiAgICB0OiBUCn0KCmltcGwgRHJvcCBmb3IgRm9vPHUzMj4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KYGBgCgpUaGlzIGNvZGUgaXMgbm90IGxlZ2FsOiBpdCBpcyBub3QgcG9zc2libGUgdG8gc3BlY2lhbGl6ZSBgRHJvcGAgdG8gYSBzdWJzZXQgb2YKaW1wbGVtZW50YXRpb25zIG9mIGEgZ2VuZXJpYyB0eXBlLiBPbmUgd29ya2Fyb3VuZCBmb3IgdGhpcyBpcyB0byB3cmFwIHRoZQpnZW5lcmljIHR5cGUsIGFzIHNob3duIGJlbG93OgoKYGBgCnN0cnVjdCBGb288VD4gewogICAgdDogVAp9CgpzdHJ1Y3QgQmFyIHsKICAgIHQ6IEZvbzx1MzI+Cn0KCmltcGwgRHJvcCBmb3IgQmFyIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CmBgYApFMDM2N0FuIGF0dGVtcHQgd2FzIG1hZGUgdG8gaW1wbGVtZW50IGBEcm9wYCBvbiBhIHNwZWNpYWxpemF0aW9uIG9mIGEgZ2VuZXJpYyB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM2Nwp0cmFpdCBGb28ge30KCnN0cnVjdCBNeVN0cnVjdDxUPiB7CiAgICB0OiBUCn0KCmltcGw8VDogRm9vPiBEcm9wIGZvciBNeVN0cnVjdDxUPiB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQpgYGAKClRoaXMgY29kZSBpcyBub3QgbGVnYWw6IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBzcGVjaWFsaXplIGBEcm9wYCB0byBhIHN1YnNldCBvZgppbXBsZW1lbnRhdGlvbnMgb2YgYSBnZW5lcmljIHR5cGUuIEluIG9yZGVyIGZvciB0aGlzIGNvZGUgdG8gd29yaywgYE15U3RydWN0YAptdXN0IGFsc28gcmVxdWlyZSB0aGF0IGBUYCBpbXBsZW1lbnRzIGBGb29gLiBBbHRlcm5hdGl2ZWx5LCBhbm90aGVyIG9wdGlvbiBpcwp0byB3cmFwIHRoZSBnZW5lcmljIHR5cGUgaW4gYW5vdGhlciB0aGF0IHNwZWNpYWxpemVzIGFwcHJvcHJpYXRlbHk6CgpgYGAKdHJhaXQgRm9ve30KCnN0cnVjdCBNeVN0cnVjdDxUPiB7CiAgICB0OiBUCn0KCnN0cnVjdCBNeVN0cnVjdFdyYXBwZXI8VDogRm9vPiB7CiAgICB0OiBNeVN0cnVjdDxUPgp9CgppbXBsIDxUOiBGb28+IERyb3AgZm9yIE15U3RydWN0V3JhcHBlcjxUPiB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQpgYGAKRTAzNjhBIGJpbmFyeSBhc3NpZ25tZW50IG9wZXJhdG9yIGxpa2UgYCs9YCBvciBgXj1gIHdhcyBhcHBsaWVkIHRvIGEgdHlwZSB0aGF0CmRvZXNuJ3Qgc3VwcG9ydCBpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNjgKbGV0IG11dCB4ID0gMTJmMzI7IC8vIGVycm9yOiBiaW5hcnkgb3BlcmF0aW9uIGA8PGAgY2Fubm90IGJlIGFwcGxpZWQgdG8KICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0eXBlIGBmMzJgCgp4IDw8PSAyOwpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgY2hlY2sgdGhhdCB0aGlzIHR5cGUgaW1wbGVtZW50cyB0aGlzIGJpbmFyeQpvcGVyYXRpb24uIEV4YW1wbGU6CgpgYGAKbGV0IG11dCB4ID0gMTJ1MzI7IC8vIHRoZSBgdTMyYCB0eXBlIGRvZXMgaW1wbGVtZW50IHRoZSBgU2hsQXNzaWduYCB0cmFpdAoKeCA8PD0gMjsgLy8gb2shCmBgYAoKSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBvdmVybG9hZCBtb3N0IG9wZXJhdG9ycyBmb3IgeW91ciBvd24gdHlwZSBieQppbXBsZW1lbnRpbmcgdGhlIGBbT1BdQXNzaWduYCB0cmFpdHMgZnJvbSBgc3RkOjpvcHNgLgoKQW5vdGhlciBwcm9ibGVtIHlvdSBtaWdodCBiZSBmYWNpbmcgaXMgdGhpczogc3VwcG9zZSB5b3UndmUgb3ZlcmxvYWRlZCB0aGUgYCtgCm9wZXJhdG9yIGZvciBzb21lIHR5cGUgYEZvb2AgYnkgaW1wbGVtZW50aW5nIHRoZSBgc3RkOjpvcHM6OkFkZGAgdHJhaXQgZm9yCmBGb29gLCBidXQgeW91IGZpbmQgdGhhdCB1c2luZyBgKz1gIGRvZXMgbm90IHdvcmssIGFzIGluIHRoaXMgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM2OAp1c2Ugc3RkOjpvcHM6OkFkZDsKCnN0cnVjdCBGb28odTMyKTsKCmltcGwgQWRkIGZvciBGb28gewogICAgdHlwZSBPdXRwdXQgPSBGb287CgogICAgZm4gYWRkKHNlbGYsIHJoczogRm9vKSAtPiBGb28gewogICAgICAgIEZvbyhzZWxmLjAgKyByaHMuMCkKICAgIH0KfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgeDogRm9vID0gRm9vKDUpOwogICAgeCArPSBGb28oNyk7IC8vIGVycm9yLCBgKz0gY2Fubm90IGJlIGFwcGxpZWQgdG8gdGhlIHR5cGUgYEZvb2AKfQpgYGAKClRoaXMgaXMgYmVjYXVzZSBgQWRkQXNzaWduYCBpcyBub3QgYXV0b21hdGljYWxseSBpbXBsZW1lbnRlZCwgc28geW91IG5lZWQgdG8KbWFudWFsbHkgaW1wbGVtZW50IGl0IGZvciB5b3VyIHR5cGUuCkUwMzY5QSBiaW5hcnkgb3BlcmF0aW9uIHdhcyBhdHRlbXB0ZWQgb24gYSB0eXBlIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNjkKbGV0IHggPSAxMmYzMjsgLy8gZXJyb3I6IGJpbmFyeSBvcGVyYXRpb24gYDw8YCBjYW5ub3QgYmUgYXBwbGllZCB0bwogICAgICAgICAgICAgICAvLyAgICAgICAgdHlwZSBgZjMyYAoKeCA8PCAyOwpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgY2hlY2sgdGhhdCB0aGlzIHR5cGUgaW1wbGVtZW50cyB0aGlzIGJpbmFyeQpvcGVyYXRpb24uIEV4YW1wbGU6CgpgYGAKbGV0IHggPSAxMnUzMjsgLy8gdGhlIGB1MzJgIHR5cGUgZG9lcyBpbXBsZW1lbnQgaXQ6CiAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RhYmxlL3N0ZC9vcHMvdHJhaXQuU2hsLmh0bWwKCnggPDwgMjsgLy8gb2shCmBgYAoKSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBvdmVybG9hZCBtb3N0IG9wZXJhdG9ycyBmb3IgeW91ciBvd24gdHlwZSBieQppbXBsZW1lbnRpbmcgdHJhaXRzIGZyb20gYHN0ZDo6b3BzYC4KClN0cmluZyBjb25jYXRlbmF0aW9uIGFwcGVuZHMgdGhlIHN0cmluZyBvbiB0aGUgcmlnaHQgdG8gdGhlIHN0cmluZyBvbiB0aGUKbGVmdCBhbmQgbWF5IHJlcXVpcmUgcmVhbGxvY2F0aW9uLiBUaGlzIHJlcXVpcmVzIG93bmVyc2hpcCBvZiB0aGUgc3RyaW5nCm9uIHRoZSBsZWZ0LiBJZiBzb21ldGhpbmcgc2hvdWxkIGJlIGFkZGVkIHRvIGEgc3RyaW5nIGxpdGVyYWwsIG1vdmUgdGhlCmxpdGVyYWwgdG8gdGhlIGhlYXAgYnkgYWxsb2NhdGluZyBpdCB3aXRoIGB0b19vd25lZCgpYCBsaWtlIGluCmAiWW91ciB0ZXh0Ii50b19vd25lZCgpYC4KRTAzNzBUaGUgbWF4aW11bSB2YWx1ZSBvZiBhbiBlbnVtIHdhcyByZWFjaGVkLCBzbyBpdCBjYW5ub3QgYmUgYXV0b21hdGljYWxseQpzZXQgaW4gdGhlIG5leHQgZW51bSB2YWx1ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzAKI1tyZXByKGk2NCldCmVudW0gRm9vIHsKICAgIFggPSAweDdmZmZmZmZmZmZmZmZmZmYsCiAgICBZLCAvLyBlcnJvcjogZW51bSBkaXNjcmltaW5hbnQgb3ZlcmZsb3dlZCBvbiB2YWx1ZSBhZnRlcgogICAgICAgLy8gICAgICAgIDkyMjMzNzIwMzY4NTQ3NzU4MDc6IGk2NDsgc2V0IGV4cGxpY2l0bHkgdmlhCiAgICAgICAvLyAgICAgICAgWSA9IC05MjIzMzcyMDM2ODU0Nzc1ODA4IGlmIHRoYXQgaXMgZGVzaXJlZCBvdXRjb21lCn0KYGBgCgpUbyBmaXggdGhpcywgcGxlYXNlIHNldCBtYW51YWxseSB0aGUgbmV4dCBlbnVtIHZhbHVlIG9yIHB1dCB0aGUgZW51bSB2YXJpYW50CndpdGggdGhlIG1heGltdW0gdmFsdWUgYXQgdGhlIGVuZCBvZiB0aGUgZW51bS4gRXhhbXBsZXM6CgpgYGAKI1tyZXByKGk2NCldCmVudW0gRm9vIHsKICAgIFggPSAweDdmZmZmZmZmZmZmZmZmZmYsCiAgICBZID0gMCwgLy8gb2shCn0KYGBgCgpPcjoKCmBgYAojW3JlcHIoaTY0KV0KZW51bSBGb28gewogICAgWSA9IDAsIC8vIG9rIQogICAgWCA9IDB4N2ZmZmZmZmZmZmZmZmZmZiwKfQpgYGAKRTAzNzFBIHRyYWl0IHdhcyBpbXBsZW1lbnRlZCBvbiBhbm90aGVyIHdoaWNoIGFscmVhZHkgYXV0b21hdGljYWxseSBpbXBsZW1lbnRlZCBpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwMzcxCnRyYWl0IEZvbyB7IGZuIGZvbygmc2VsZikgeyB9IH0KdHJhaXQgQmFyOiBGb28geyB9CnRyYWl0IEJhejogQmFyIHsgfQoKaW1wbCBCYXIgZm9yIEJheiB7IH0gLy8gZXJyb3IsIGBCYXpgIGltcGxlbWVudHMgYEJhcmAgYnkgZGVmaW5pdGlvbgppbXBsIEZvbyBmb3IgQmF6IHsgfSAvLyBlcnJvciwgYEJhemAgaW1wbGVtZW50cyBgQmFyYCB3aGljaCBpbXBsZW1lbnRzIGBGb29gCmltcGwgQmF6IGZvciBCYXogeyB9IC8vIGVycm9yLCBgQmF6YCAodHJpdmlhbGx5KSBpbXBsZW1lbnRzIGBCYXpgCmltcGwgQmF6IGZvciBCYXIgeyB9IC8vIE5vdGU6IFRoaXMgaXMgT0sKYGBgCgpXaGVuIGBUcmFpdDJgIGlzIGEgc3VidHJhaXQgb2YgYFRyYWl0MWAgKGZvciBleGFtcGxlLCB3aGVuIGBUcmFpdDJgIGhhcyBhCmRlZmluaXRpb24gbGlrZSBgdHJhaXQgVHJhaXQyOiBUcmFpdDEgeyAuLi4gfWApLCBpdCBpcyBub3QgYWxsb3dlZCB0byBpbXBsZW1lbnQKYFRyYWl0MWAgZm9yIGBUcmFpdDJgLiBUaGlzIGlzIGJlY2F1c2UgYFRyYWl0MmAgYWxyZWFkeSBpbXBsZW1lbnRzIGBUcmFpdDFgIGJ5CmRlZmluaXRpb24sIHNvIGl0IGlzIG5vdCB1c2VmdWwgdG8gZG8gdGhpcy4KRTAzNzNBIGNhcHR1cmVkIHZhcmlhYmxlIGluIGEgY2xvc3VyZSBtYXkgbm90IGxpdmUgbG9uZyBlbm91Z2guCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzczCmZuIGZvbygpIC0+IEJveDxGbih1MzIpIC0+IHUzMj4gewogICAgbGV0IHggPSAwdTMyOwogICAgQm94OjpuZXcofHl8IHggKyB5KQp9CmBgYAoKVGhpcyBlcnJvciBvY2N1cnMgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gdXNlIGRhdGEgY2FwdHVyZWQgYnkgYSBjbG9zdXJlLAp3aGVuIHRoYXQgZGF0YSBtYXkgbm8gbG9uZ2VyIGV4aXN0LiBJdCdzIG1vc3QgY29tbW9ubHkgc2VlbiB3aGVuIGF0dGVtcHRpbmcgdG8KcmV0dXJuIGEgY2xvc3VyZSBhcyBzaG93biBpbiB0aGUgcHJldmlvdXMgY29kZSBleGFtcGxlLgoKTm90aWNlIHRoYXQgYHhgIGlzIHN0YWNrLWFsbG9jYXRlZCBieSBgZm9vKClgLiBCeSBkZWZhdWx0LCBSdXN0IGNhcHR1cmVzCmNsb3NlZC1vdmVyIGRhdGEgYnkgcmVmZXJlbmNlLiBUaGlzIG1lYW5zIHRoYXQgb25jZSBgZm9vKClgIHJldHVybnMsIGB4YCBubwpsb25nZXIgZXhpc3RzLiBBbiBhdHRlbXB0IHRvIGFjY2VzcyBgeGAgd2l0aGluIHRoZSBjbG9zdXJlIHdvdWxkIHRodXMgYmUKdW5zYWZlLgoKQW5vdGhlciBzaXR1YXRpb24gd2hlcmUgdGhpcyBtaWdodCBiZSBlbmNvdW50ZXJlZCBpcyB3aGVuIHNwYXduaW5nIHRocmVhZHM6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzMKZm4gZm9vKCkgewogICAgbGV0IHggPSAwdTMyOwogICAgbGV0IHkgPSAxdTMyOwoKICAgIGxldCB0aHIgPSBzdGQ6OnRocmVhZDo6c3Bhd24ofHwgewogICAgICAgIHggKyB5CiAgICB9KTsKfQpgYGAKClNpbmNlIG91ciBuZXcgdGhyZWFkIHJ1bnMgaW4gcGFyYWxsZWwsIHRoZSBzdGFjayBmcmFtZSBjb250YWluaW5nIGB4YCBhbmQgYHlgCm1heSB3ZWxsIGhhdmUgZGlzYXBwZWFyZWQgYnkgdGhlIHRpbWUgd2UgdHJ5IHRvIHVzZSB0aGVtLiBFdmVuIGlmIHdlIGNhbGwKYHRoci5qb2luKClgIHdpdGhpbiBmb28gKHdoaWNoIGJsb2NrcyB1bnRpbCBgdGhyYCBoYXMgY29tcGxldGVkLCBlbnN1cmluZyB0aGUKc3RhY2sgZnJhbWUgd29uJ3QgZGlzYXBwZWFyKSwgd2Ugd2lsbCBub3Qgc3VjY2VlZDogdGhlIGNvbXBpbGVyIGNhbm5vdCBwcm92ZQp0aGF0IHRoaXMgYmVoYXZpb3IgaXMgc2FmZSwgYW5kIHNvIHdvbid0IGxldCB1cyBkbyBpdC4KClRoZSBzb2x1dGlvbiB0byB0aGlzIHByb2JsZW0gaXMgdXN1YWxseSB0byBzd2l0Y2ggdG8gdXNpbmcgYSBgbW92ZWAgY2xvc3VyZS4KVGhpcyBhcHByb2FjaCBtb3ZlcyAob3IgY29waWVzLCB3aGVyZSBwb3NzaWJsZSkgZGF0YSBpbnRvIHRoZSBjbG9zdXJlLCByYXRoZXIKdGhhbiB0YWtpbmcgcmVmZXJlbmNlcyB0byBpdC4gRm9yIGV4YW1wbGU6CgpgYGAKZm4gZm9vKCkgLT4gQm94PEZuKHUzMikgLT4gdTMyPiB7CiAgICBsZXQgeCA9IDB1MzI7CiAgICBCb3g6Om5ldyhtb3ZlIHx5fCB4ICsgeSkKfQpgYGAKCk5vdyB0aGF0IHRoZSBjbG9zdXJlIGhhcyBpdHMgb3duIGNvcHkgb2YgdGhlIGRhdGEsIHRoZXJlJ3Mgbm8gbmVlZCB0byB3b3JyeQphYm91dCBzYWZldHkuCkUwMzc0YENvZXJjZVVuc2l6ZWRgIHdhcyBpbXBsZW1lbnRlZCBvbiBhIHN0cnVjdCB3aGljaCBkb2VzIG5vdCBjb250YWluIGEgZmllbGQgd2l0aAphbiB1bnNpemVkIHR5cGUuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzc0CiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ6ID9TaXplZD4gewogICAgYTogaTMyLAp9CgovLyBlcnJvcjogU3RydWN0IGBGb29gIGhhcyBubyB1bnNpemVkIGZpZWxkcyB0aGF0IG5lZWQgYENvZXJjZVVuc2l6ZWRgLgppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8Rm9vPFU+PiBmb3IgRm9vPFQ+CiAgICB3aGVyZSBUOiBDb2VyY2VVbnNpemVkPFU+IHt9CmBgYAoKQW4gW3Vuc2l6ZWQgdHlwZV1bMV0gaXMgYW55IHR5cGUgd2hlcmUgdGhlIGNvbXBpbGVyIGRvZXMgbm90IGtub3cgdGhlIGxlbmd0aCBvcgphbGlnbm1lbnQgb2YgYXQgY29tcGlsZSB0aW1lLiBBbnkgc3RydWN0IGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlIGlzIGFsc28KdW5zaXplZC4KClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTktMDQtYWR2YW5jZWQtdHlwZXMuaHRtbCNkeW5hbWljYWxseS1zaXplZC10eXBlcy1hbmQtdGhlLXNpemVkLXRyYWl0CgpgQ29lcmNlVW5zaXplZGAgaXMgdXNlZCB0byBjb2VyY2Ugb25lIHN0cnVjdCBjb250YWluaW5nIGFuIHVuc2l6ZWQgdHlwZQppbnRvIGFub3RoZXIgc3RydWN0IGNvbnRhaW5pbmcgYSBkaWZmZXJlbnQgdW5zaXplZCB0eXBlLiBJZiB0aGUgc3RydWN0CmRvZXNuJ3QgaGF2ZSBhbnkgZmllbGRzIG9mIHVuc2l6ZWQgdHlwZXMgdGhlbiB5b3UgZG9uJ3QgbmVlZCBleHBsaWNpdApjb2VyY2lvbiB0byBnZXQgdGhlIHR5cGVzIHlvdSB3YW50LiBUbyBmaXggdGhpcyB5b3UgY2FuIGVpdGhlcgpub3QgdHJ5IHRvIGltcGxlbWVudCBgQ29lcmNlVW5zaXplZGAgb3IgeW91IGNhbiBhZGQgYSBmaWVsZCB0aGF0IGlzCnVuc2l6ZWQgdG8gdGhlIHN0cnVjdC4KCkV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShjb2VyY2VfdW5zaXplZCldCnVzZSBzdGQ6Om9wczo6Q29lcmNlVW5zaXplZDsKCi8vIFdlIGRvbid0IG5lZWQgdG8gaW1wbCBgQ29lcmNlVW5zaXplZGAgaGVyZS4Kc3RydWN0IEZvbyB7CiAgICBhOiBpMzIsCn0KCi8vIFdlIGFkZCB0aGUgdW5zaXplZCB0eXBlIGZpZWxkIHRvIHRoZSBzdHJ1Y3QuCnN0cnVjdCBCYXI8VDogP1NpemVkPiB7CiAgICBhOiBpMzIsCiAgICBiOiBULAp9CgovLyBUaGUgc3RydWN0IGhhcyBhbiB1bnNpemVkIGZpZWxkIHNvIHdlIGNhbiBpbXBsZW1lbnQKLy8gYENvZXJjZVVuc2l6ZWRgIGZvciBpdC4KaW1wbDxULCBVPiBDb2VyY2VVbnNpemVkPEJhcjxVPj4gZm9yIEJhcjxUPgogICAgd2hlcmUgVDogQ29lcmNlVW5zaXplZDxVPiB7fQpgYGAKCk5vdGUgdGhhdCBgQ29lcmNlVW5zaXplZGAgaXMgbWFpbmx5IHVzZWQgYnkgc21hcnQgcG9pbnRlcnMgbGlrZSBgQm94YCwgYFJjYAphbmQgYEFyY2AgdG8gYmUgYWJsZSB0byBtYXJrIHRoYXQgdGhleSBjYW4gY29lcmNlIHVuc2l6ZWQgdHlwZXMgdGhhdCB0aGV5CmFyZSBwb2ludGluZyBhdC4KRTAzNzVgQ29lcmNlVW5zaXplZGAgd2FzIGltcGxlbWVudGVkIG9uIGEgc3RydWN0IHdoaWNoIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgZmllbGQKd2l0aCBhbiB1bnNpemVkIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzc1CiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ6ID9TaXplZCwgVTogP1NpemVkPiB7CiAgICBhOiBpMzIsCiAgICBiOiBULAogICAgYzogVSwKfQoKLy8gZXJyb3I6IFN0cnVjdCBgRm9vYCBoYXMgbW9yZSB0aGFuIG9uZSB1bnNpemVkIGZpZWxkLgppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8Rm9vPFUsIFQ+PiBmb3IgRm9vPFQsIFU+IHt9CmBgYAoKQSBzdHJ1Y3Qgd2l0aCBtb3JlIHRoYW4gb25lIGZpZWxkIGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlIGNhbm5vdCBpbXBsZW1lbnQKYENvZXJjZVVuc2l6ZWRgLiBUaGlzIG9ubHkgb2NjdXJzIHdoZW4geW91IGFyZSB0cnlpbmcgdG8gY29lcmNlIG9uZSBvZiB0aGUKdHlwZXMgaW4geW91ciBzdHJ1Y3QgdG8gYW5vdGhlciB0eXBlIGluIHRoZSBzdHJ1Y3QuIEluIHRoaXMgY2FzZSB3ZSB0cnkgdG8KaW1wbCBgQ29lcmNlVW5zaXplZGAgZnJvbSBgVGAgdG8gYFVgIHdoaWNoIGFyZSBib3RoIHR5cGVzIHRoYXQgdGhlIHN0cnVjdAp0YWtlcy4gQW4gW3Vuc2l6ZWQgdHlwZV1bMV0gaXMgYW55IHR5cGUgdGhhdCB0aGUgY29tcGlsZXIgZG9lc24ndCBrbm93IHRoZQpsZW5ndGggb3IgYWxpZ25tZW50IG9mIGF0IGNvbXBpbGUgdGltZS4gQW55IHN0cnVjdCBjb250YWluaW5nIGFuIHVuc2l6ZWQgdHlwZQppcyBhbHNvIHVuc2l6ZWQuCgpgQ29lcmNlVW5zaXplZGAgb25seSBhbGxvd3MgZm9yIGNvZXJjaW9uIGZyb20gYSBzdHJ1Y3R1cmUgd2l0aCBhIHNpbmdsZQp1bnNpemVkIHR5cGUgZmllbGQgdG8gYW5vdGhlciBzdHJ1Y3Qgd2l0aCBhIHNpbmdsZSB1bnNpemVkIHR5cGUgZmllbGQuCkluIGZhY3QgUnVzdCBvbmx5IGFsbG93cyBmb3IgYSBzdHJ1Y3QgdG8gaGF2ZSBvbmUgdW5zaXplZCB0eXBlIGluIGEgc3RydWN0CmFuZCB0aGF0IHVuc2l6ZWQgdHlwZSBtdXN0IGJlIHRoZSBsYXN0IGZpZWxkIGluIHRoZSBzdHJ1Y3QuIFNvIGhhdmluZyB0d28KdW5zaXplZCB0eXBlcyBpbiBhIHNpbmdsZSBzdHJ1Y3QgaXMgbm90IGFsbG93ZWQgYnkgdGhlIGNvbXBpbGVyLiBUbyBmaXggdGhpcwp1c2Ugb25seSBvbmUgZmllbGQgY29udGFpbmluZyBhbiB1bnNpemVkIHR5cGUgaW4gdGhlIHN0cnVjdCBhbmQgdGhlbiB1c2UKbXVsdGlwbGUgc3RydWN0cyB0byBtYW5hZ2UgZWFjaCB1bnNpemVkIHR5cGUgZmllbGQgeW91IG5lZWQuCgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ6ID9TaXplZD4gewogICAgYTogaTMyLAogICAgYjogVCwKfQoKaW1wbCA8VCwgVT4gQ29lcmNlVW5zaXplZDxGb288VT4+IGZvciBGb288VD4KICAgIHdoZXJlIFQ6IENvZXJjZVVuc2l6ZWQ8VT4ge30KCmZuIGNvZXJjZV9mb288VDogQ29lcmNlVW5zaXplZDxVPiwgVT4odDogVCkgLT4gRm9vPFU+IHsKICAgIEZvbyB7IGE6IDEyaTMyLCBiOiB0IH0gLy8gd2UgdXNlIGNvZXJjaW9uIHRvIGdldCB0aGUgYEZvbzxVPmAgdHlwZSB3ZSBuZWVkCn0KYGBgCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDE5LTA0LWFkdmFuY2VkLXR5cGVzLmh0bWwjZHluYW1pY2FsbHktc2l6ZWQtdHlwZXMtYW5kLXRoZS1zaXplZC10cmFpdApFMDM3NmBDb2VyY2VVbnNpemVkYCB3YXMgaW1wbGVtZW50ZWQgb24gc29tZXRoaW5nIHRoYXQgaXNuJ3QgYSBzdHJ1Y3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzc2CiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ6ID9TaXplZD4gewogICAgYTogVCwKfQoKLy8gZXJyb3I6IFRoZSB0eXBlIGBVYCBpcyBub3QgYSBzdHJ1Y3QKaW1wbDxULCBVPiBDb2VyY2VVbnNpemVkPFU+IGZvciBGb288VD4ge30KYGBgCgpgQ29lcmNlVW5zaXplZGAgY2FuIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIGEgc3RydWN0LiBVbnNpemVkIHR5cGVzIGFyZQphbHJlYWR5IGFibGUgdG8gYmUgY29lcmNlZCB3aXRob3V0IGFuIGltcGxlbWVudGF0aW9uIG9mIGBDb2VyY2VVbnNpemVkYAp3aGVyZWFzIGEgc3RydWN0IGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlIG5lZWRzIHRvIGtub3cgdGhlIHVuc2l6ZWQgdHlwZQpmaWVsZCBpdCdzIGNvbnRhaW5pbmcgaXMgYWJsZSB0byBiZSBjb2VyY2VkLiBBbiBbdW5zaXplZCB0eXBlXVsxXQppcyBhbnkgdHlwZSB0aGF0IHRoZSBjb21waWxlciBkb2Vzbid0IGtub3cgdGhlIGxlbmd0aCBvciBhbGlnbm1lbnQgb2YgYXQKY29tcGlsZSB0aW1lLiBBbnkgc3RydWN0IGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlIGlzIGFsc28gdW5zaXplZC4KClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTktMDQtYWR2YW5jZWQtdHlwZXMuaHRtbCNkeW5hbWljYWxseS1zaXplZC10eXBlcy1hbmQtdGhlLXNpemVkLXRyYWl0CgpUaGUgYENvZXJjZVVuc2l6ZWRgIHRyYWl0IHRha2VzIGEgc3RydWN0IHR5cGUuIE1ha2Ugc3VyZSB0aGUgdHlwZSB5b3UgYXJlCnByb3ZpZGluZyB0byBgQ29lcmNlVW5zaXplZGAgaXMgYSBzdHJ1Y3Qgd2l0aCBvbmx5IHRoZSBsYXN0IGZpZWxkIGNvbnRhaW5pbmcgYW4KdW5zaXplZCB0eXBlLgoKRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGNvZXJjZV91bnNpemVkKV0KdXNlIHN0ZDo6b3BzOjpDb2VyY2VVbnNpemVkOwoKc3RydWN0IEZvbzxUPiB7CiAgICBhOiBULAp9CgovLyBUaGUgYEZvbzxVPmAgaXMgYSBzdHJ1Y3Qgc28gYENvZXJjZVVuc2l6ZWRgIGNhbiBiZSBpbXBsZW1lbnRlZAppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8Rm9vPFU+PiBmb3IgRm9vPFQ+IHdoZXJlIFQ6IENvZXJjZVVuc2l6ZWQ8VT4ge30KYGBgCgpOb3RlIHRoYXQgaW4gUnVzdCwgc3RydWN0cyBjYW4gb25seSBjb250YWluIGFuIHVuc2l6ZWQgdHlwZSBpZiB0aGUgZmllbGQKY29udGFpbmluZyB0aGUgdW5zaXplZCB0eXBlIGlzIHRoZSBsYXN0IGFuZCBvbmx5IHVuc2l6ZWQgdHlwZSBmaWVsZCBpbiB0aGUKc3RydWN0LgpFMDM3OFRoZSBgRGlzcGF0Y2hGcm9tRHluYCB0cmFpdCB3YXMgaW1wbGVtZW50ZWQgb24gc29tZXRoaW5nIHdoaWNoIGlzIG5vdCBhIHBvaW50ZXIKb3IgYSBuZXd0eXBlIHdyYXBwZXIgYXJvdW5kIGEgcG9pbnRlci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzgKIyFbZmVhdHVyZShkaXNwYXRjaF9mcm9tX2R5bildCnVzZSBzdGQ6Om9wczo6RGlzcGF0Y2hGcm9tRHluOwoKc3RydWN0IFdyYXBwZXJFeHRyYUZpZWxkPFQ+IHsKICAgIHB0cjogVCwKICAgIGV4dHJhX3N0dWZmOiBpMzIsCn0KCmltcGw8VCwgVT4gRGlzcGF0Y2hGcm9tRHluPFdyYXBwZXJFeHRyYUZpZWxkPFU+PiBmb3IgV3JhcHBlckV4dHJhRmllbGQ8VD4Kd2hlcmUKICAgIFQ6IERpc3BhdGNoRnJvbUR5bjxVPiwKe30KYGBgCgpUaGUgYERpc3BhdGNoRnJvbUR5bmAgdHJhaXQgY3VycmVudGx5IGNhbiBvbmx5IGJlIGltcGxlbWVudGVkIGZvcgpidWlsdGluIHBvaW50ZXIgdHlwZXMgYW5kIHN0cnVjdHMgdGhhdCBhcmUgbmV3dHlwZSB3cmFwcGVycyBhcm91bmQgdGhlbQrigJQgdGhhdCBpcywgdGhlIHN0cnVjdCBtdXN0IGhhdmUgb25seSBvbmUgZmllbGQgKGV4Y2VwdCBmb3JgUGhhbnRvbURhdGFgKSwKYW5kIHRoYXQgZmllbGQgbXVzdCBpdHNlbGYgaW1wbGVtZW50IGBEaXNwYXRjaEZyb21EeW5gLgoKYGBgCiMhW2ZlYXR1cmUoZGlzcGF0Y2hfZnJvbV9keW4sIHVuc2l6ZSldCnVzZSBzdGQ6OnsKICAgIG1hcmtlcjo6VW5zaXplLAogICAgb3BzOjpEaXNwYXRjaEZyb21EeW4sCn07CgpzdHJ1Y3QgUHRyPFQ6ID9TaXplZD4oKmNvbnN0IFQpOwoKaW1wbDxUOiA/U2l6ZWQsIFU6ID9TaXplZD4gRGlzcGF0Y2hGcm9tRHluPFB0cjxVPj4gZm9yIFB0cjxUPgp3aGVyZQogICAgVDogVW5zaXplPFU+LAp7fQpgYGAKCkFub3RoZXIgZXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGRpc3BhdGNoX2Zyb21fZHluKV0KdXNlIHN0ZDo6ewogICAgb3BzOjpEaXNwYXRjaEZyb21EeW4sCiAgICBtYXJrZXI6OlBoYW50b21EYXRhLAp9OwoKc3RydWN0IFdyYXBwZXI8VD4gewogICAgcHRyOiBULAogICAgX3BoYW50b206IFBoYW50b21EYXRhPCgpPiwKfQoKaW1wbDxULCBVPiBEaXNwYXRjaEZyb21EeW48V3JhcHBlcjxVPj4gZm9yIFdyYXBwZXI8VD4Kd2hlcmUKICAgIFQ6IERpc3BhdGNoRnJvbUR5bjxVPiwKe30KYGBgCkUwMzc5QSB0cmFpdCBtZXRob2Qgd2FzIGRlY2xhcmVkIGNvbnN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM3OQojIVtmZWF0dXJlKGNvbnN0X2ZuKV0KCnRyYWl0IEZvbyB7CiAgICBjb25zdCBmbiBiYXIoKSAtPiB1MzI7IC8vIGVycm9yIQp9CmBgYAoKVHJhaXQgbWV0aG9kcyBjYW5ub3QgYmUgZGVjbGFyZWQgYGNvbnN0YCBieSBkZXNpZ24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKW1JGQyA5MTFdLgoKW1JGQyA5MTFdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvcHVsbC85MTEKRTAzODBBbiBhdXRvIHRyYWl0IHdhcyBkZWNsYXJlZCB3aXRoIGEgbWV0aG9kIG9yIGFuIGFzc29jaWF0ZWQgaXRlbS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzODAKdW5zYWZlIGF1dG8gdHJhaXQgVHJhaXQgewogICAgdHlwZSBPdXRwdXQ7IC8vIGVycm9yIQp9CmBgYAoKQXV0byB0cmFpdHMgY2Fubm90IGhhdmUgbWV0aG9kcyBvciBhc3NvY2lhdGVkIGl0ZW1zLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUKdGhlIFtvcHQtaW4gYnVpbHRpbiB0cmFpdHMgUkZDXVtSRkMgMTldLgoKW1JGQyAxOV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzAwMTktb3B0LWluLWJ1aWx0aW4tdHJhaXRzLm1kCkUwMzgxSXQgaXMgbm90IGFsbG93ZWQgdG8gdXNlIG9yIGNhcHR1cmUgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzODEKZm4gbWFpbigpIHsKICAgIGxldCB4OiBpMzI7CiAgICBsZXQgeSA9IHg7IC8vIGVycm9yLCB1c2Ugb2YgcG9zc2libHktdW5pbml0aWFsaXplZCB2YXJpYWJsZQp9CmBgYAoKVG8gZml4IHRoaXMsIGVuc3VyZSB0aGF0IGFueSBkZWNsYXJlZCB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGJlZm9yZSBiZWluZwp1c2VkLiBFeGFtcGxlOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgeDogaTMyID0gMDsKICAgIGxldCB5ID0geDsgLy8gb2shCn0KYGBgCkUwMzgyQSB2YXJpYWJsZSB3YXMgdXNlZCBhZnRlciBpdHMgY29udGVudHMgaGF2ZSBiZWVuIG1vdmVkIGVsc2V3aGVyZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzODIKc3RydWN0IE15U3RydWN0IHsgczogdTMyIH0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHggPSBNeVN0cnVjdHsgczogNXUzMiB9OwogICAgbGV0IHkgPSB4OwogICAgeC5zID0gNjsKICAgIHByaW50bG4hKCJ7fSIsIHgucyk7Cn0KYGBgCgpTaW5jZSBgTXlTdHJ1Y3RgIGlzIGEgdHlwZSB0aGF0IGlzIG5vdCBtYXJrZWQgYENvcHlgLCB0aGUgZGF0YSBnZXRzIG1vdmVkIG91dApvZiBgeGAgd2hlbiB3ZSBzZXQgYHlgLiBUaGlzIGlzIGZ1bmRhbWVudGFsIHRvIFJ1c3QncyBvd25lcnNoaXAgc3lzdGVtOiBvdXRzaWRlCm9mIHdvcmthcm91bmRzIGxpa2UgYFJjYCwgYSB2YWx1ZSBjYW5ub3QgYmUgb3duZWQgYnkgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZS4KClNvbWV0aW1lcyB3ZSBkb24ndCBuZWVkIHRvIG1vdmUgdGhlIHZhbHVlLiBVc2luZyBhIHJlZmVyZW5jZSwgd2UgY2FuIGxldCBhbm90aGVyCmZ1bmN0aW9uIGJvcnJvdyB0aGUgdmFsdWUgd2l0aG91dCBjaGFuZ2luZyBpdHMgb3duZXJzaGlwLiBJbiB0aGUgZXhhbXBsZSBiZWxvdywKd2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSB0byBtb3ZlIG91ciBzdHJpbmcgdG8gYGNhbGN1bGF0ZV9sZW5ndGhgLCB3ZSBjYW4gZ2l2ZSBpdAphIHJlZmVyZW5jZSB0byBpdCB3aXRoIGAmYCBpbnN0ZWFkLgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgczEgPSBTdHJpbmc6OmZyb20oImhlbGxvIik7CgogICAgbGV0IGxlbiA9IGNhbGN1bGF0ZV9sZW5ndGgoJnMxKTsKCiAgICBwcmludGxuISgiVGhlIGxlbmd0aCBvZiAne30nIGlzIHt9LiIsIHMxLCBsZW4pOwp9CgpmbiBjYWxjdWxhdGVfbGVuZ3RoKHM6ICZTdHJpbmcpIC0+IHVzaXplIHsKICAgIHMubGVuKCkKfQpgYGAKCkEgbXV0YWJsZSByZWZlcmVuY2UgY2FuIGJlIGNyZWF0ZWQgd2l0aCBgJm11dGAuCgpTb21ldGltZXMgd2UgZG9uJ3Qgd2FudCBhIHJlZmVyZW5jZSwgYnV0IGEgZHVwbGljYXRlLiBBbGwgdHlwZXMgbWFya2VkIGBDbG9uZWAKY2FuIGJlIGR1cGxpY2F0ZWQgYnkgY2FsbGluZyBgLmNsb25lKClgLiBTdWJzZXF1ZW50IGNoYW5nZXMgdG8gYSBjbG9uZSBkbyBub3QKYWZmZWN0IHRoZSBvcmlnaW5hbCB2YXJpYWJsZS4KCk1vc3QgdHlwZXMgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgYXJlIG1hcmtlZCBgQ2xvbmVgLiBUaGUgZXhhbXBsZSBiZWxvdwpkZW1vbnN0cmF0ZXMgdXNpbmcgYGNsb25lKClgIG9uIGEgc3RyaW5nLiBgczFgIGlzIGZpcnN0IHNldCB0byAibWFueSIsIGFuZCB0aGVuCmNvcGllZCB0byBgczJgLiBUaGVuIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYHMxYCBpcyByZW1vdmVkLCB3aXRob3V0IGFmZmVjdGluZwpgczJgLiAiYW55IG1hbnkiIGlzIHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuCgpgYGAKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgczEgPSBTdHJpbmc6OmZyb20oIm1hbnkiKTsKICAgIGxldCBzMiA9IHMxLmNsb25lKCk7CiAgICBzMS5yZW1vdmUoMCk7CiAgICBwcmludGxuISgie30ge30iLCBzMSwgczIpOwp9CmBgYAoKSWYgd2UgY29udHJvbCB0aGUgZGVmaW5pdGlvbiBvZiBhIHR5cGUsIHdlIGNhbiBpbXBsZW1lbnQgYENsb25lYCBvbiBpdCBvdXJzZWx2ZXMKd2l0aCBgI1tkZXJpdmUoQ2xvbmUpXWAuCgpTb21lIHR5cGVzIGhhdmUgbm8gb3duZXJzaGlwIHNlbWFudGljcyBhdCBhbGwgYW5kIGFyZSB0cml2aWFsIHRvIGR1cGxpY2F0ZS4gQW4KZXhhbXBsZSBpcyBgaTMyYCBhbmQgdGhlIG90aGVyIG51bWJlciB0eXBlcy4gV2UgZG9uJ3QgaGF2ZSB0byBjYWxsIGAuY2xvbmUoKWAgdG8KY2xvbmUgdGhlbSwgYmVjYXVzZSB0aGV5IGFyZSBtYXJrZWQgYENvcHlgIGluIGFkZGl0aW9uIHRvIGBDbG9uZWAuICBJbXBsaWNpdApjbG9uaW5nIGlzIG1vcmUgY29udmVuaWVudCBpbiB0aGlzIGNhc2UuIFdlIGNhbiBtYXJrIG91ciBvd24gdHlwZXMgYENvcHlgIGlmCmFsbCB0aGVpciBtZW1iZXJzIGFsc28gYXJlIG1hcmtlZCBgQ29weWAuCgpJbiB0aGUgZXhhbXBsZSBiZWxvdywgd2UgaW1wbGVtZW50IGEgYFBvaW50YCB0eXBlLiBCZWNhdXNlIGl0IG9ubHkgc3RvcmVzIHR3bwppbnRlZ2Vycywgd2Ugb3B0LW91dCBvZiBvd25lcnNoaXAgc2VtYW50aWNzIHdpdGggYENvcHlgLiBUaGVuIHdlIGNhbgpgbGV0IHAyID0gcDFgIHdpdGhvdXQgYHAxYCBiZWluZyBtb3ZlZC4KCmBgYAojW2Rlcml2ZShDb3B5LCBDbG9uZSldCnN0cnVjdCBQb2ludCB7IHg6IGkzMiwgeTogaTMyIH0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHAxID0gUG9pbnR7IHg6IC0xLCB5OiAyIH07CiAgICBsZXQgcDIgPSBwMTsKICAgIHAxLnggPSAxOwogICAgcHJpbnRsbiEoInAxOiB7fSwge30iLCBwMS54LCBwMS55KTsKICAgIHByaW50bG4hKCJwMjoge30sIHt9IiwgcDIueCwgcDIueSk7Cn0KYGBgCgpBbHRlcm5hdGl2ZWx5LCBpZiB3ZSBkb24ndCBjb250cm9sIHRoZSBzdHJ1Y3QncyBkZWZpbml0aW9uLCBvciBtdXRhYmxlIHNoYXJlZApvd25lcnNoaXAgaXMgdHJ1bHkgcmVxdWlyZWQsIHdlIGNhbiB1c2UgYFJjYCBhbmQgYFJlZkNlbGxgOgoKYGBgCnVzZSBzdGQ6OmNlbGw6OlJlZkNlbGw7CnVzZSBzdGQ6OnJjOjpSYzsKCnN0cnVjdCBNeVN0cnVjdCB7IHM6IHUzMiB9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCB4ID0gUmM6Om5ldyhSZWZDZWxsOjpuZXcoTXlTdHJ1Y3R7IHM6IDV1MzIgfSkpOwogICAgbGV0IHkgPSB4LmNsb25lKCk7CiAgICB4LmJvcnJvd19tdXQoKS5zID0gNjsKICAgIHByaW50bG4hKCJ7fSIsIHguYm9ycm93KCkucyk7Cn0KYGBgCgpXaXRoIHRoaXMgYXBwcm9hY2gsIHggYW5kIHkgc2hhcmUgb3duZXJzaGlwIG9mIHRoZSBkYXRhIHZpYSB0aGUgYFJjYCAocmVmZXJlbmNlCmNvdW50IHR5cGUpLiBgUmVmQ2VsbGAgZXNzZW50aWFsbHkgcGVyZm9ybXMgcnVudGltZSBib3Jyb3cgY2hlY2tpbmc6IGVuc3VyaW5nCnRoYXQgYXQgbW9zdCBvbmUgd3JpdGVyIG9yIG11bHRpcGxlIHJlYWRlcnMgY2FuIGFjY2VzcyB0aGUgZGF0YSBhdCBhbnkgb25lIHRpbWUuCgpJZiB5b3Ugd2lzaCB0byBsZWFybiBtb3JlIGFib3V0IG93bmVyc2hpcCBpbiBSdXN0LCBzdGFydCB3aXRoIHRoZQpbVW5kZXJzdGFuZGluZyBPd25lcnNoaXBdW3VuZGVyc3RhbmRpbmctb3duZXJzaGlwXSBjaGFwdGVyIGluIHRoZSBCb29rLgoKW3VuZGVyc3RhbmRpbmctb3duZXJzaGlwXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDQtMDAtdW5kZXJzdGFuZGluZy1vd25lcnNoaXAuaHRtbApFMDM4MyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHBhcnRpYWxseSByZWluaXRpYWxpemUgYQpzdHJ1Y3R1cmUgdGhhdCBpcyBjdXJyZW50bHkgdW5pbml0aWFsaXplZC4KCkZvciBleGFtcGxlLCB0aGlzIGNhbiBoYXBwZW4gd2hlbiBhIGRyb3AgaGFzIHRha2VuIHBsYWNlOgoKYGBgY29tcGlsZV9mYWlsCnN0cnVjdCBGb28gewogICAgYTogdTMyLAp9CmltcGwgRHJvcCBmb3IgRm9vIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7IC8qIC4uLiAqLyB9Cn0KCmxldCBtdXQgeCA9IEZvbyB7IGE6IDEgfTsKZHJvcCh4KTsgLy8gYHhgIGlzIG5vdyB1bmluaXRpYWxpemVkCnguYSA9IDI7IC8vIGVycm9yLCBwYXJ0aWFsIHJlaW5pdGlhbGl6YXRpb24gb2YgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgYHRgCmBgYAoKVGhpcyBlcnJvciBjYW4gYmUgZml4ZWQgYnkgZnVsbHkgcmVpbml0aWFsaXppbmcgdGhlIHN0cnVjdHVyZSBpbiBxdWVzdGlvbjoKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIGE6IHUzMiwKfQppbXBsIERyb3AgZm9yIEZvbyB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgeyAvKiAuLi4gKi8gfQp9CgpsZXQgbXV0IHggPSBGb28geyBhOiAxIH07CmRyb3AoeCk7CnggPSBGb28geyBhOiAyIH07CmBgYApFMDM4NEFuIGltbXV0YWJsZSB2YXJpYWJsZSB3YXMgcmVhc3NpZ25lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzODQKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gMzsKICAgIHggPSA1OyAvLyBlcnJvciwgcmVhc3NpZ25tZW50IG9mIGltbXV0YWJsZSB2YXJpYWJsZQp9CmBgYAoKQnkgZGVmYXVsdCwgdmFyaWFibGVzIGluIFJ1c3QgYXJlIGltbXV0YWJsZS4gVG8gZml4IHRoaXMgZXJyb3IsIGFkZCB0aGUga2V5d29yZApgbXV0YCBhZnRlciB0aGUga2V5d29yZCBgbGV0YCB3aGVuIGRlY2xhcmluZyB0aGUgdmFyaWFibGUuIEZvciBleGFtcGxlOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHggPSAzOwogICAgeCA9IDU7Cn0KYGBgCkUwMzg2IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhpcyBlcnJvciBvY2N1cnMgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gbXV0YXRlIHRoZSB0YXJnZXQgb2YgYSBtdXRhYmxlCnJlZmVyZW5jZSBzdG9yZWQgaW5zaWRlIGFuIGltbXV0YWJsZSBjb250YWluZXIuCgpGb3IgZXhhbXBsZSwgdGhpcyBjYW4gaGFwcGVuIHdoZW4gc3RvcmluZyBhIGAmbXV0YCBpbnNpZGUgYW4gaW1tdXRhYmxlIGBCb3hgOgoKYGBgCmxldCBtdXQgeDogaTY0ID0gMTsKbGV0IHk6IEJveDxfPiA9IEJveDo6bmV3KCZtdXQgeCk7CioqeSA9IDI7IC8vIGVycm9yLCBjYW5ub3QgYXNzaWduIHRvIGRhdGEgaW4gYW4gaW1tdXRhYmxlIGNvbnRhaW5lcgpgYGAKClRoaXMgZXJyb3IgY2FuIGJlIGZpeGVkIGJ5IG1ha2luZyB0aGUgY29udGFpbmVyIG11dGFibGU6CgpgYGAKbGV0IG11dCB4OiBpNjQgPSAxOwpsZXQgbXV0IHk6IEJveDxfPiA9IEJveDo6bmV3KCZtdXQgeCk7CioqeSA9IDI7CmBgYAoKSXQgY2FuIGFsc28gYmUgZml4ZWQgYnkgdXNpbmcgYSB0eXBlIHdpdGggaW50ZXJpb3IgbXV0YWJpbGl0eSwgc3VjaCBhcyBgQ2VsbGAKb3IgYFJlZkNlbGxgOgoKYGBgCnVzZSBzdGQ6OmNlbGw6OkNlbGw7CgpsZXQgeDogaTY0ID0gMTsKbGV0IHk6IEJveDxDZWxsPF8+PiA9IEJveDo6bmV3KENlbGw6Om5ldyh4KSk7Cnkuc2V0KDIpOwpgYGAKRTAzODcjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBtdXRhdGUgb3IgbXV0YWJseSByZWZlcmVuY2UgZGF0YQp0aGF0IGEgY2xvc3VyZSBoYXMgY2FwdHVyZWQgaW1tdXRhYmx5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbAovLyBBY2NlcHRzIGEgZnVuY3Rpb24gb3IgYSBjbG9zdXJlIHRoYXQgY2FwdHVyZXMgaXRzIGVudmlyb25tZW50IGltbXV0YWJseS4KLy8gQ2xvc3VyZXMgcGFzc2VkIHRvIGZvbyB3aWxsIG5vdCBiZSBhYmxlIHRvIG11dGF0ZSB0aGVpciBjbG9zZWQtb3ZlciBzdGF0ZS4KZm4gZm9vPEY6IEZuKCk+KGY6IEYpIHsgfQoKLy8gQXR0ZW1wdHMgdG8gbXV0YXRlIGNsb3NlZC1vdmVyIGRhdGEuIEVycm9yIG1lc3NhZ2UgcmVhZHM6Ci8vIGBjYW5ub3QgYXNzaWduIHRvIGRhdGEgaW4gYSBjYXB0dXJlZCBvdXRlciB2YXJpYWJsZS4uLmAKZm4gbXV0YWJsZSgpIHsKICAgIGxldCBtdXQgeCA9IDB1MzI7CiAgICBmb28ofHwgeCA9IDIpOwp9CgovLyBBdHRlbXB0cyB0byB0YWtlIGEgbXV0YWJsZSByZWZlcmVuY2UgdG8gY2xvc2VkLW92ZXIgZGF0YS4gIEVycm9yIG1lc3NhZ2UKLy8gcmVhZHM6IGBjYW5ub3QgYm9ycm93IGRhdGEgbXV0YWJseSBpbiBhIGNhcHR1cmVkIG91dGVyIHZhcmlhYmxlLi4uYApmbiBtdXRfYWRkcigpIHsKICAgIGxldCBtdXQgeCA9IDB1MzI7CiAgICBmb28ofHwgeyBsZXQgeSA9ICZtdXQgeDsgfSk7Cn0KYGBgCgpUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgZm9vIGlzIGRlZmluZWQgYXMgYWNjZXB0aW5nIGEgcGFyYW1ldGVyIG9mIHR5cGUgYEZuYC4KQ2xvc3VyZXMgcGFzc2VkIGludG8gZm9vIHdpbGwgdGh1cyBiZSBpbmZlcnJlZCB0byBiZSBvZiB0eXBlIGBGbmAsIG1lYW5pbmcgdGhhdAp0aGV5IGNhcHR1cmUgdGhlaXIgY29udGV4dCBpbW11dGFibHkuCgpJZiB0aGUgZGVmaW5pdGlvbiBvZiBgZm9vYCBpcyB1bmRlciB5b3VyIGNvbnRyb2wsIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0bwpjYXB0dXJlIHRoZSBkYXRhIG11dGFibHkuIFRoaXMgY2FuIGJlIGRvbmUgYnkgZGVmaW5pbmcgYGZvb2AgdG8gdGFrZSBGbk11dApyYXRoZXIgdGhhbiBGbjoKCmBgYApmbiBmb288RjogRm5NdXQoKT4oZjogRikgeyB9CmBgYAoKQWx0ZXJuYXRpdmVseSwgd2UgY2FuIGNvbnNpZGVyIHVzaW5nIHRoZSBgQ2VsbGAgYW5kIGBSZWZDZWxsYCB0eXBlcyB0byBhY2hpZXZlCmludGVyaW9yIG11dGFiaWxpdHkgdGhyb3VnaCBhIHNoYXJlZCByZWZlcmVuY2UuIE91ciBleGFtcGxlJ3MgYG11dGFibGVgCmZ1bmN0aW9uIGNvdWxkIGJlIHJlZGVmaW5lZCBhcyBiZWxvdzoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpDZWxsOwoKZm4gZm9vPEY6IEZuKCk+KGY6IEYpIHsgfQoKZm4gbXV0YWJsZSgpIHsKICAgIGxldCB4ID0gQ2VsbDo6bmV3KDB1MzIpOwogICAgZm9vKHx8IHguc2V0KDIpKTsKfQpgYGAKCllvdSBjYW4gcmVhZCBtb3JlIGluIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgW0NlbGxdW3N0ZC1jZWxsXS4KCltzdGQtY2VsbF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RkL2NlbGwvCkUwMzg4IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgpFMDM4OSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gbXV0YXRlIGRhdGEgdXNpbmcgYSBub24tbXV0YWJsZSByZWZlcmVuY2UuIFRoaXMKY29tbW9ubHkgb2NjdXJzIHdoZW4gYXR0ZW1wdGluZyB0byBhc3NpZ24gdG8gYSBub24tbXV0YWJsZSByZWZlcmVuY2Ugb2YgYQptdXRhYmxlIHJlZmVyZW5jZSAoYCYoJm11dCBUKWApLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgZmFuY3kgPSBGYW5jeU51bXsgbnVtOiA1IH07CiAgICBsZXQgZmFuY3lfcmVmID0gJigmbXV0IGZhbmN5KTsKICAgIGZhbmN5X3JlZi5udW0gPSA2OyAvLyBlcnJvcjogY2Fubm90IGFzc2lnbiB0byBkYXRhIGluIGEgYCZgIHJlZmVyZW5jZQogICAgcHJpbnRsbiEoInt9IiwgZmFuY3lfcmVmLm51bSk7Cn0KYGBgCgpIZXJlLCBgJm11dCBmYW5jeWAgaXMgbXV0YWJsZSwgYnV0IGAmKCZtdXQgZmFuY3kpYCBpcyBub3QuIENyZWF0aW5nIGFuCmltbXV0YWJsZSByZWZlcmVuY2UgdG8gYSB2YWx1ZSBib3Jyb3dzIGl0IGltbXV0YWJseS4gVGhlcmUgY2FuIGJlIG11bHRpcGxlCnJlZmVyZW5jZXMgb2YgdHlwZSBgJigmbXV0IFQpYCB0aGF0IHBvaW50IHRvIHRoZSBzYW1lIHZhbHVlLCBzbyB0aGV5IG11c3QgYmUKaW1tdXRhYmxlIHRvIHByZXZlbnQgbXVsdGlwbGUgbXV0YWJsZSByZWZlcmVuY2VzIHRvIHRoZSBzYW1lIHZhbHVlLgoKVG8gZml4IHRoaXMsIGVpdGhlciByZW1vdmUgdGhlIG91dGVyIHJlZmVyZW5jZToKCmBgYApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgZmFuY3kgPSBGYW5jeU51bXsgbnVtOiA1IH07CgogICAgbGV0IGZhbmN5X3JlZiA9ICZtdXQgZmFuY3k7CiAgICAvLyBgZmFuY3lfcmVmYCBpcyBub3cgJm11dCBGYW5jeU51bSwgcmF0aGVyIHRoYW4gJigmbXV0IEZhbmN5TnVtKQoKICAgIGZhbmN5X3JlZi5udW0gPSA2OyAvLyBObyBlcnJvciEKCiAgICBwcmludGxuISgie30iLCBmYW5jeV9yZWYubnVtKTsKfQpgYGAKCk9yIG1ha2UgdGhlIG91dGVyIHJlZmVyZW5jZSBtdXRhYmxlOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IGZhbmN5ID0gRmFuY3lOdW17IG51bTogNSB9OwoKICAgIGxldCBmYW5jeV9yZWYgPSAmbXV0ICgmbXV0IGZhbmN5KTsKICAgIC8vIGBmYW5jeV9yZWZgIGlzIG5vdyAmbXV0KCZtdXQgRmFuY3lOdW0pLCByYXRoZXIgdGhhbiAmKCZtdXQgRmFuY3lOdW0pCgogICAgZmFuY3lfcmVmLm51bSA9IDY7IC8vIE5vIGVycm9yIQoKICAgIHByaW50bG4hKCJ7fSIsIGZhbmN5X3JlZi5udW0pOwp9CmBgYApFMDM5MEEgbWV0aG9kIHdhcyBpbXBsZW1lbnRlZCBvbiBhIHByaW1pdGl2ZSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM5MApzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMgp9CgppbXBsICptdXQgRm9vIHt9Ci8vIGVycm9yOiBvbmx5IGEgc2luZ2xlIGluaGVyZW50IGltcGxlbWVudGF0aW9uIG1hcmtlZCB3aXRoCi8vICAgICAgICBgI1tsYW5nID0gIm11dF9wdHIiXWAgaXMgYWxsb3dlZCBmb3IgdGhlIGAqbXV0IFRgIHByaW1pdGl2ZQpgYGAKClRoaXMgaXNuJ3QgYWxsb3dlZCwgYnV0IHVzaW5nIGEgdHJhaXQgdG8gaW1wbGVtZW50IGEgbWV0aG9kIGlzIGEgZ29vZCBzb2x1dGlvbi4KRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMgp9Cgp0cmFpdCBCYXIgewogICAgZm4gYmFyKCk7Cn0KCmltcGwgQmFyIGZvciAqbXV0IEZvbyB7CiAgICBmbiBiYXIoKSB7fSAvLyBvayEKfQpgYGAKRTAzOTFBIHR5cGUgZGVwZW5kZW5jeSBjeWNsZSBoYXMgYmVlbiBlbmNvdW50ZXJlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzOTEKdHJhaXQgRmlyc3RUcmFpdCA6IFNlY29uZFRyYWl0IHsKCn0KCnRyYWl0IFNlY29uZFRyYWl0IDogRmlyc3RUcmFpdCB7Cgp9CmBgYAoKVGhlIHByZXZpb3VzIGV4YW1wbGUgY29udGFpbnMgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gdHdvIHRyYWl0czoKYEZpcnN0VHJhaXRgIGRlcGVuZHMgb24gYFNlY29uZFRyYWl0YCB3aGljaCBpdHNlbGYgZGVwZW5kcyBvbiBgRmlyc3RUcmFpdGAuCkUwMzkyQSB0eXBlIG9yIGxpZmV0aW1lIHBhcmFtZXRlciBoYXMgYmVlbiBkZWNsYXJlZCBidXQgaXMgbm90IGFjdHVhbGx5IHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzkyCmVudW0gRm9vPFQ+IHsKICAgIEJhciwKfQpgYGAKCklmIHRoZSB0eXBlIHBhcmFtZXRlciB3YXMgaW5jbHVkZWQgYnkgbWlzdGFrZSwgdGhpcyBlcnJvciBjYW4gYmUgZml4ZWQKYnkgc2ltcGx5IHJlbW92aW5nIHRoZSB0eXBlIHBhcmFtZXRlciwgYXMgc2hvd24gYmVsb3c6CgpgYGAKZW51bSBGb28gewogICAgQmFyLAp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgaWYgdGhlIHR5cGUgcGFyYW1ldGVyIHdhcyBpbnRlbnRpb25hbGx5IGluc2VydGVkLCBpdCBtdXN0IGJlCnVzZWQuIEEgc2ltcGxlIGZpeCBpcyBzaG93biBiZWxvdzoKCmBgYAplbnVtIEZvbzxUPiB7CiAgICBCYXIoVCksCn0KYGBgCgpUaGlzIGVycm9yIG1heSBhbHNvIGNvbW1vbmx5IGJlIGZvdW5kIHdoZW4gd29ya2luZyB3aXRoIHVuc2FmZSBjb2RlLiBGb3IKZXhhbXBsZSwgd2hlbiB1c2luZyByYXcgcG9pbnRlcnMgb25lIG1heSB3aXNoIHRvIHNwZWNpZnkgdGhlIGxpZmV0aW1lIGZvcgp3aGljaCB0aGUgcG9pbnRlZC1hdCBkYXRhIGlzIHZhbGlkLiBBbiBpbml0aWFsIGF0dGVtcHQgKGJlbG93KSBjYXVzZXMgdGhpcwplcnJvcjoKCmBgYGNvbXBpbGVfZmFpbCxFMDM5MgpzdHJ1Y3QgRm9vPCdhLCBUPiB7CiAgICB4OiAqY29uc3QgVCwKfQpgYGAKCldlIHdhbnQgdG8gZXhwcmVzcyB0aGUgY29uc3RyYWludCB0aGF0IEZvbyBzaG91bGQgbm90IG91dGxpdmUgYCdhYCwgYmVjYXVzZQp0aGUgZGF0YSBwb2ludGVkIHRvIGJ5IGBUYCBpcyBvbmx5IHZhbGlkIGZvciB0aGF0IGxpZmV0aW1lLiBUaGUgcHJvYmxlbSBpcwp0aGF0IHRoZXJlIGFyZSBubyBhY3R1YWwgdXNlcyBvZiBgJ2FgLiBJdCdzIHBvc3NpYmxlIHRvIHdvcmsgYXJvdW5kIHRoaXMKYnkgYWRkaW5nIGEgUGhhbnRvbURhdGEgdHlwZSB0byB0aGUgc3RydWN0LCB1c2luZyBpdCB0byB0ZWxsIHRoZSBjb21waWxlcgp0byBhY3QgYXMgaWYgdGhlIHN0cnVjdCBjb250YWluZWQgYSBib3Jyb3dlZCByZWZlcmVuY2UgYCYnYSBUYDoKCmBgYAp1c2Ugc3RkOjptYXJrZXI6OlBoYW50b21EYXRhOwoKc3RydWN0IEZvbzwnYSwgVDogJ2E+IHsKICAgIHg6ICpjb25zdCBULAogICAgcGhhbnRvbTogUGhhbnRvbURhdGE8JidhIFQ+Cn0KYGBgCgpbUGhhbnRvbURhdGFdIGNhbiBhbHNvIGJlIHVzZWQgdG8gZXhwcmVzcyBpbmZvcm1hdGlvbiBhYm91dCB1bnVzZWQgdHlwZQpwYXJhbWV0ZXJzLgoKW1BoYW50b21EYXRhXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGQvbWFya2VyL3N0cnVjdC5QaGFudG9tRGF0YS5odG1sCkUwMzkzQSB0eXBlIHBhcmFtZXRlciB3aGljaCByZWZlcmVuY2VzIGBTZWxmYCBpbiBpdHMgZGVmYXVsdCB2YWx1ZSB3YXMgbm90IHNwZWNpZmllZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzOTMKdHJhaXQgQTxUPVNlbGY+IHt9CgpmbiB0b2dldGhlcl93ZV93aWxsX3J1bGVfdGhlX2dhbGF4eShzb246ICZBKSB7fQovLyBlcnJvcjogdGhlIHR5cGUgcGFyYW1ldGVyIGBUYCBtdXN0IGJlIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGluIGFuCi8vICAgICAgICBvYmplY3QgdHlwZSBiZWNhdXNlIGl0cyBkZWZhdWx0IHZhbHVlIGBTZWxmYCByZWZlcmVuY2VzIHRoZQovLyAgICAgICAgdHlwZSBgU2VsZmAKYGBgCgpBIHRyYWl0IG9iamVjdCBpcyBkZWZpbmVkIG92ZXIgYSBzaW5nbGUsIGZ1bGx5LWRlZmluZWQgdHJhaXQuIFdpdGggYSByZWd1bGFyCmRlZmF1bHQgcGFyYW1ldGVyLCB0aGlzIHBhcmFtZXRlciBjYW4ganVzdCBiZSBzdWJzdGl0dXRlZCBpbi4gSG93ZXZlciwgaWYgdGhlCmRlZmF1bHQgcGFyYW1ldGVyIGlzIGBTZWxmYCwgdGhlIHRyYWl0IGNoYW5nZXMgZm9yIGVhY2ggY29uY3JldGUgdHlwZTsgaS5lLgpgaTMyYCB3aWxsIGJlIGV4cGVjdGVkIHRvIGltcGxlbWVudCBgQTxpMzI+YCwgYGJvb2xgIHdpbGwgYmUgZXhwZWN0ZWQgdG8KaW1wbGVtZW50IGBBPGJvb2w+YCwgZXRjLi4uIFRoZXNlIHR5cGVzIHdpbGwgbm90IHNoYXJlIGFuIGltcGxlbWVudGF0aW9uIG9mIGEKZnVsbHktZGVmaW5lZCB0cmFpdDsgaW5zdGVhZCB0aGV5IHNoYXJlIGltcGxlbWVudGF0aW9ucyBvZiBhIHRyYWl0IHdpdGgKZGlmZmVyZW50IHBhcmFtZXRlcnMgc3Vic3RpdHV0ZWQgaW4gZm9yIGVhY2ggaW1wbGVtZW50YXRpb24uIFRoaXMgaXMKaXJyZWNvbmNpbGFibGUgd2l0aCB3aGF0IHdlIG5lZWQgdG8gbWFrZSBhIHRyYWl0IG9iamVjdCB3b3JrLCBhbmQgaXMgdGh1cwpkaXNhbGxvd2VkLiBNYWtpbmcgdGhlIHRyYWl0IGNvbmNyZXRlIGJ5IGV4cGxpY2l0bHkgc3BlY2lmeWluZyB0aGUgdmFsdWUgb2YgdGhlCmRlZmF1bHRlZCBwYXJhbWV0ZXIgd2lsbCBmaXggdGhpcyBpc3N1ZS4gRml4ZWQgZXhhbXBsZToKCmBgYAp0cmFpdCBBPFQ9U2VsZj4ge30KCmZuIHRvZ2V0aGVyX3dlX3dpbGxfcnVsZV90aGVfZ2FsYXh5KHNvbjogJkE8aTMyPikge30gLy8gT2shCmBgYApFMDM5OCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkluIFJ1c3QgMS4zLCB0aGUgZGVmYXVsdCBvYmplY3QgbGlmZXRpbWUgYm91bmRzIGFyZSBleHBlY3RlZCB0byBjaGFuZ2UsIGFzCmRlc2NyaWJlZCBpbiBbUkZDIDExNTZdLiBZb3UgYXJlIGdldHRpbmcgYSB3YXJuaW5nIGJlY2F1c2UgdGhlIGNvbXBpbGVyCnRoaW5rcyBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoaXMgY2hhbmdlIHdpbGwgY2F1c2UgYSBjb21waWxhdGlvbiBlcnJvciBpbiB5b3VyCmNvZGUuIEl0IGlzIHBvc3NpYmxlLCB0aG91Z2ggdW5saWtlbHksIHRoYXQgdGhpcyBpcyBhIGZhbHNlIGFsYXJtLgoKVGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2UgaXMgdGhhdCB3aGVyZSBgJidhIEJveDxTb21lVHJhaXQ+YCB1c2VkIHRvIGRlZmF1bHQgdG8KYCYnYSBCb3g8U29tZVRyYWl0KydhPmAsIGl0IG5vdyBkZWZhdWx0cyB0byBgJidhIEJveDxTb21lVHJhaXQrJ3N0YXRpYz5gIChoZXJlLApgU29tZVRyYWl0YCBpcyB0aGUgbmFtZSBvZiBzb21lIHRyYWl0IHR5cGUpLiBOb3RlIHRoYXQgdGhlIG9ubHkgdHlwZXMgd2hpY2ggYXJlCmFmZmVjdGVkIGFyZSByZWZlcmVuY2VzIHRvIGJveGVzLCBsaWtlIGAmQm94PFNvbWVUcmFpdD5gIG9yCmAmW0JveDxTb21lVHJhaXQ+XWAuIE1vcmUgY29tbW9uIHR5cGVzIGxpa2UgYCZTb21lVHJhaXRgIG9yIGBCb3g8U29tZVRyYWl0PmAKYXJlIHVuYWZmZWN0ZWQuCgpUbyBzaWxlbmNlIHRoaXMgd2FybmluZywgZWRpdCB5b3VyIGNvZGUgdG8gdXNlIGFuIGV4cGxpY2l0IGJvdW5kLiBNb3N0IG9mIHRoZQp0aW1lLCB0aGlzIG1lYW5zIHRoYXQgeW91IHdpbGwgd2FudCB0byBjaGFuZ2UgdGhlIHNpZ25hdHVyZSBvZiBhIGZ1bmN0aW9uIHRoYXQKeW91IGFyZSBjYWxsaW5nLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGVycm9yIGlzIHJlcG9ydGVkIG9uIGEgY2FsbCBsaWtlIGBmb28oeClgLAphbmQgYGZvb2AgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgoKYGBgCiMgdHJhaXQgU29tZVRyYWl0IHt9CmZuIGZvbyhhcmc6ICZCb3g8U29tZVRyYWl0PikgeyAvKiAuLi4gKi8gfQpgYGAKCllvdSBtaWdodCBjaGFuZ2UgaXQgdG86CgpgYGAKIyB0cmFpdCBTb21lVHJhaXQge30KZm4gZm9vPCdhPihhcmc6ICYnYSBCb3g8U29tZVRyYWl0KydhPikgeyAvKiAuLi4gKi8gfQpgYGAKClRoaXMgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCB5b3UgZXhwZWN0IHRoZSB0cmFpdCBvYmplY3QgYFNvbWVUcmFpdGAgdG8gY29udGFpbgpyZWZlcmVuY2VzICh3aXRoIGEgbWF4aW11bSBsaWZldGltZSBvZiBgJ2FgKS4KCltSRkMgMTE1Nl06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzExNTYtYWRqdXN0LWRlZmF1bHQtb2JqZWN0LWJvdW5kcy5tZApFMDM5OSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlcgoKWW91IGltcGxlbWVudGVkIGEgdHJhaXQsIG92ZXJyaWRpbmcgb25lIG9yIG1vcmUgb2YgaXRzIGFzc29jaWF0ZWQgdHlwZXMgYnV0IGRpZApub3QgcmVpbXBsZW1lbnQgaXRzIGRlZmF1bHQgbWV0aG9kcy4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGAKIyFbZmVhdHVyZShhc3NvY2lhdGVkX3R5cGVfZGVmYXVsdHMpXQoKcHViIHRyYWl0IEZvbyB7CiAgICB0eXBlIEFzc29jID0gdTg7CiAgICBmbiBiYXIoJnNlbGYpIHt9Cn0KCmltcGwgRm9vIGZvciBpMzIgewogICAgLy8gZXJyb3IgLSB0aGUgZm9sbG93aW5nIHRyYWl0IGl0ZW1zIG5lZWQgdG8gYmUgcmVpbXBsZW1lbnRlZCBhcwogICAgLy8gICAgICAgICBgQXNzb2NgIHdhcyBvdmVycmlkZGVuOiBgYmFyYAogICAgdHlwZSBBc3NvYyA9IGkzMjsKfQpgYGAKClRvIGZpeCB0aGlzLCBhZGQgYW4gaW1wbGVtZW50YXRpb24gZm9yIGVhY2ggZGVmYXVsdCBtZXRob2QgZnJvbSB0aGUgdHJhaXQ6CgpgYGAKIyFbZmVhdHVyZShhc3NvY2lhdGVkX3R5cGVfZGVmYXVsdHMpXQoKcHViIHRyYWl0IEZvbyB7CiAgICB0eXBlIEFzc29jID0gdTg7CiAgICBmbiBiYXIoJnNlbGYpIHt9Cn0KCmltcGwgRm9vIGZvciBpMzIgewogICAgdHlwZSBBc3NvYyA9IGkzMjsKICAgIGZuIGJhcigmc2VsZikge30gLy8gb2shCn0KYGBgCkUwNDAxSW5uZXIgaXRlbXMgZG8gbm90IGluaGVyaXQgdHlwZSBvciBjb25zdCBwYXJhbWV0ZXJzIGZyb20gdGhlIGZ1bmN0aW9ucwp0aGV5IGFyZSBlbWJlZGRlZCBpbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDEKZm4gZm9vPFQ+KHg6IFQpIHsKICAgIGZuIGJhcih5OiBUKSB7IC8vIFQgaXMgZGVmaW5lZCBpbiB0aGUgIm91dGVyIiBmdW5jdGlvbgogICAgICAgIC8vIC4uCiAgICB9CiAgICBiYXIoeCk7Cn0KYGBgCgpOb3Igd2lsbCB0aGlzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDAxCmZuIGZvbzxUPih4OiBUKSB7CiAgICB0eXBlIE1heWJlVCA9IE9wdGlvbjxUPjsKICAgIC8vIC4uLgp9CmBgYAoKT3IgdGhpczoKCmBgYGNvbXBpbGVfZmFpbCxFMDQwMQpmbiBmb288VD4oeDogVCkgewogICAgc3RydWN0IEZvbyB7CiAgICAgICAgeDogVCwKICAgIH0KICAgIC8vIC4uLgp9CmBgYAoKSXRlbXMgaW5zaWRlIGZ1bmN0aW9ucyBhcmUgYmFzaWNhbGx5IGp1c3QgbGlrZSB0b3AtbGV2ZWwgaXRlbXMsIGV4Y2VwdAp0aGF0IHRoZXkgY2FuIG9ubHkgYmUgdXNlZCBmcm9tIHRoZSBmdW5jdGlvbiB0aGV5IGFyZSBpbi4KClRoZXJlIGFyZSBhIGNvdXBsZSBvZiBzb2x1dGlvbnMgZm9yIHRoaXMuCgpJZiB0aGUgaXRlbSBpcyBhIGZ1bmN0aW9uLCB5b3UgbWF5IHVzZSBhIGNsb3N1cmU6CgpgYGAKZm4gZm9vPFQ+KHg6IFQpIHsKICAgIGxldCBiYXIgPSB8eTogVHwgeyAvLyBleHBsaWNpdCB0eXBlIGFubm90YXRpb24gbWF5IG5vdCBiZSBuZWNlc3NhcnkKICAgICAgICAvLyAuLgogICAgfTsKICAgIGJhcih4KTsKfQpgYGAKCkZvciBhIGdlbmVyaWMgaXRlbSwgeW91IGNhbiBjb3B5IG92ZXIgdGhlIHBhcmFtZXRlcnM6CgpgYGAKZm4gZm9vPFQ+KHg6IFQpIHsKICAgIGZuIGJhcjxUPih5OiBUKSB7CiAgICAgICAgLy8gLi4KICAgIH0KICAgIGJhcih4KTsKfQpgYGAKCmBgYApmbiBmb288VD4oeDogVCkgewogICAgdHlwZSBNYXliZVQ8VD4gPSBPcHRpb248VD47Cn0KYGBgCgpCZSBzdXJlIHRvIGNvcHkgb3ZlciBhbnkgYm91bmRzIGFzIHdlbGw6CgpgYGAKZm4gZm9vPFQ6IENvcHk+KHg6IFQpIHsKICAgIGZuIGJhcjxUOiBDb3B5Pih5OiBUKSB7CiAgICAgICAgLy8gLi4KICAgIH0KICAgIGJhcih4KTsKfQpgYGAKCmBgYApmbiBmb288VDogQ29weT4oeDogVCkgewogICAgc3RydWN0IEZvbzxUOiBDb3B5PiB7CiAgICAgICAgeDogVCwKICAgIH0KfQpgYGAKClRoaXMgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCB0eXBlIGhpbnRzIGluIHRoZSBmdW5jdGlvbiBib2R5LgoKSW4gY2FzZSB0aGUgaXRlbSBpcyBhIGZ1bmN0aW9uIGluc2lkZSBhbiBgaW1wbGAsIGRlZmluaW5nIGEgcHJpdmF0ZSBoZWxwZXIKZnVuY3Rpb24gbWlnaHQgYmUgZWFzaWVyOgoKYGBgCiMgc3RydWN0IEZvbzxUPihUKTsKaW1wbDxUPiBGb288VD4gewogICAgcHViIGZuIGZvbygmc2VsZiwgeDogVCkgewogICAgICAgIHNlbGYuYmFyKHgpOwogICAgfQoKICAgIGZuIGJhcigmc2VsZiwgeTogVCkgewogICAgICAgIC8vIC4uCiAgICB9Cn0KYGBgCgpGb3IgZGVmYXVsdCBpbXBscyBpbiB0cmFpdHMsIHRoZSBwcml2YXRlIGhlbHBlciBzb2x1dGlvbiB3b24ndCB3b3JrLCBob3dldmVyCmNsb3N1cmVzIG9yIGNvcHlpbmcgdGhlIHBhcmFtZXRlcnMgc2hvdWxkIHN0aWxsIHdvcmsuCkUwNDAzU29tZSB0eXBlIHBhcmFtZXRlcnMgaGF2ZSB0aGUgc2FtZSBuYW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwMwpmbiBmPFQsIFQ+KHM6IFQsIHU6IFQpIHt9IC8vIGVycm9yOiB0aGUgbmFtZSBgVGAgaXMgYWxyZWFkeSB1c2VkIGZvciBhIGdlbmVyaWMKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgcGFyYW1ldGVyIGluIHRoaXMgaXRlbSdzIGdlbmVyaWMgcGFyYW1ldGVycwpgYGAKClBsZWFzZSB2ZXJpZnkgdGhhdCBub25lIG9mIHRoZSB0eXBlIHBhcmFtZXRlcnMgYXJlIG1pc3NwZWxsZWQsIGFuZCByZW5hbWUgYW55CmNsYXNoaW5nIHBhcmFtZXRlcnMuIEV4YW1wbGU6CgpgYGAKZm4gZjxULCBZPihzOiBULCB1OiBZKSB7fSAvLyBvayEKYGBgCgpUeXBlIHBhcmFtZXRlcnMgaW4gYW4gYXNzb2NpYXRlZCBpdGVtIGFsc28gY2Fubm90IHNoYWRvdyBwYXJhbWV0ZXJzIGZyb20gdGhlCmNvbnRhaW5pbmcgaXRlbToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwMwp0cmFpdCBGb288VD4gewogICAgZm4gZG9fc29tZXRoaW5nKCZzZWxmKSAtPiBUOwogICAgZm4gZG9fc29tZXRoaW5nX2Vsc2U8VDogQ2xvbmU+KCZzZWxmLCBiYXI6IFQpOwp9CmBgYApFMDQwNEEgdHlwZSB0aGF0IGlzIG5vdCBhIHRyYWl0IHdhcyB1c2VkIGluIGEgdHJhaXQgcG9zaXRpb24sIHN1Y2ggYXMgYSBib3VuZApvciBgaW1wbGAuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDA0CnN0cnVjdCBGb287CnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHt9IC8vIGVycm9yOiBgRm9vYCBpcyBub3QgYSB0cmFpdApgYGAKCkFub3RoZXIgZXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwNApzdHJ1Y3QgRm9vOwoKZm4gYmFyPFQ6IEZvbz4odDogVCkge30gLy8gZXJyb3I6IGBGb29gIGlzIG5vdCBhIHRyYWl0CmBgYAoKUGxlYXNlIHZlcmlmeSB0aGF0IHRoZSB0cmFpdCdzIG5hbWUgd2FzIG5vdCBtaXNzcGVsbGVkIG9yIHRoYXQgdGhlIHJpZ2h0CmlkZW50aWZpZXIgd2FzIHVzZWQuIEV4YW1wbGU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIC8vIHNvbWUgZnVuY3Rpb25zCn0Kc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgeyAvLyBvayEKICAgIC8vIGZ1bmN0aW9ucyBpbXBsZW1lbnRhdGlvbgp9CmBgYAoKb3I6CgpgYGAKdHJhaXQgRm9vIHsKICAgIC8vIHNvbWUgZnVuY3Rpb25zCn0KCmZuIGJhcjxUOiBGb28+KHQ6IFQpIHt9IC8vIG9rIQpgYGAKRTA0MDVUaGUgY29kZSByZWZlcnMgdG8gYSB0cmFpdCB0aGF0IGlzIG5vdCBpbiBzY29wZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDUKc3RydWN0IEZvbzsKCmltcGwgU29tZVRyYWl0IGZvciBGb28ge30gLy8gZXJyb3I6IHRyYWl0IGBTb21lVHJhaXRgIGlzIG5vdCBpbiBzY29wZQpgYGAKClBsZWFzZSB2ZXJpZnkgdGhhdCB0aGUgbmFtZSBvZiB0aGUgdHJhaXQgd2Fzbid0IG1pc3NwZWxsZWQgYW5kIGVuc3VyZSB0aGF0IGl0CndhcyBpbXBvcnRlZC4gRXhhbXBsZToKCmBgYAojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQovLyBzb2x1dGlvbiAxOgp1c2Ugc29tZV9maWxlOjpTb21lVHJhaXQ7CgovLyBzb2x1dGlvbiAyOgp0cmFpdCBTb21lVHJhaXQgewogICAgLy8gc29tZSBmdW5jdGlvbnMKfQoKc3RydWN0IEZvbzsKCmltcGwgU29tZVRyYWl0IGZvciBGb28geyAvLyBvayEKICAgIC8vIGltcGxlbWVudHMgZnVuY3Rpb25zCn0KYGBgCkUwNDA3QSBkZWZpbml0aW9uIG9mIGEgbWV0aG9kIG5vdCBpbiB0aGUgaW1wbGVtZW50ZWQgdHJhaXQgd2FzIGdpdmVuIGluIGEgdHJhaXQKaW1wbGVtZW50YXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDA3CnRyYWl0IEZvbyB7CiAgICBmbiBhKCk7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGEoKSB7fQogICAgZm4gYigpIHt9IC8vIGVycm9yOiBtZXRob2QgYGJgIGlzIG5vdCBhIG1lbWJlciBvZiB0cmFpdCBgRm9vYAp9CmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSBtZXRob2QgbmFtZSBhbmQgeW91IHVzZWQgdGhlIGNvcnJlY3QKdHJhaXQuIEZpcnN0IGV4YW1wbGU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGEoKTsKICAgIGZuIGIoKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gYSgpIHt9CiAgICBmbiBiKCkge30gLy8gb2shCn0KYGBgCgpTZWNvbmQgZXhhbXBsZToKCmBgYAp0cmFpdCBGb28gewogICAgZm4gYSgpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBhKCkge30KfQoKaW1wbCBCYXIgewogICAgZm4gYigpIHt9Cn0KYGBgCkUwNDA4QW4gIm9yIiBwYXR0ZXJuIHdhcyB1c2VkIHdoZXJlIHRoZSB2YXJpYWJsZSBiaW5kaW5ncyBhcmUgbm90IGNvbnNpc3RlbnRseSBib3VuZAphY3Jvc3MgcGF0dGVybnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDA4Cm1hdGNoIHggewogICAgU29tZSh5KSB8IE5vbmUgPT4geyAvKiB1c2UgeSAqLyB9IC8vIGVycm9yOiB2YXJpYWJsZSBgeWAgZnJvbSBwYXR0ZXJuICMxIGlzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIG5vdCBib3VuZCBpbiBwYXR0ZXJuICMyCiAgICBfID0+ICgpCn0KYGBgCgpIZXJlLCBgeWAgaXMgYm91bmQgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBgU29tZWAgYW5kIGNhbiBiZSB1c2VkIHdpdGhpbiB0aGUKYmxvY2sgY29ycmVzcG9uZGluZyB0byB0aGUgbWF0Y2ggYXJtLiBIb3dldmVyLCBpbiBjYXNlIGB4YCBpcyBgTm9uZWAsIHdlIGhhdmUKbm90IHNwZWNpZmllZCB3aGF0IGB5YCBpcywgYW5kIHRoZSBibG9jayB3aWxsIHVzZSBhIG5vbmV4aXN0ZW50IHZhcmlhYmxlLgoKVG8gZml4IHRoaXMgZXJyb3IsIGVpdGhlciBzcGxpdCBpbnRvIG11bHRpcGxlIG1hdGNoIGFybXM6CgpgYGAKbGV0IHggPSBTb21lKDEpOwptYXRjaCB4IHsKICAgIFNvbWUoeSkgPT4geyAvKiB1c2UgeSAqLyB9CiAgICBOb25lID0+IHsgLyogLi4uICovIH0KfQpgYGAKCm9yLCBiaW5kIHRoZSB2YXJpYWJsZSB0byBhIGZpZWxkIG9mIHRoZSBzYW1lIHR5cGUgaW4gYWxsIHN1Yi1wYXR0ZXJucyBvZiB0aGUKb3IgcGF0dGVybjoKCmBgYApsZXQgeCA9ICgwLCAyKTsKbWF0Y2ggeCB7CiAgICAoMCwgeSkgfCAoeSwgMCkgPT4geyAvKiB1c2UgeSAqL30KICAgIF8gPT4ge30KfQpgYGAKCkluIHRoaXMgZXhhbXBsZSwgaWYgYHhgIG1hdGNoZXMgdGhlIHBhdHRlcm4gYCgwLCBfKWAsIHRoZSBzZWNvbmQgZmllbGQgaXMgc2V0CnRvIGB5YC4gSWYgaXQgbWF0Y2hlcyBgKF8sIDApYCwgdGhlIGZpcnN0IGZpZWxkIGlzIHNldCB0byBgeWA7IHNvIGluIGFsbApjYXNlcyBgeWAgaXMgc2V0IHRvIHNvbWUgdmFsdWUuCkUwNDA5QW4gIm9yIiBwYXR0ZXJuIHdhcyB1c2VkIHdoZXJlIHRoZSB2YXJpYWJsZSBiaW5kaW5ncyBhcmUgbm90IGNvbnNpc3RlbnRseSBib3VuZAphY3Jvc3MgcGF0dGVybnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDA5CmxldCB4ID0gKDAsIDIpOwptYXRjaCB4IHsKICAgICgwLCByZWYgeSkgfCAoeSwgMCkgPT4geyAvKiB1c2UgeSAqL30gLy8gZXJyb3I6IHZhcmlhYmxlIGB5YCBpcyBib3VuZCB3aXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBkaWZmZXJlbnQgbW9kZSBpbiBwYXR0ZXJuICMyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGFuIGluIHBhdHRlcm4gIzEKICAgIF8gPT4gKCkKfQpgYGAKCkhlcmUsIGB5YCBpcyBib3VuZCBieS12YWx1ZSBpbiBvbmUgY2FzZSBhbmQgYnktcmVmZXJlbmNlIGluIHRoZSBvdGhlci4KClRvIGZpeCB0aGlzIGVycm9yLCBqdXN0IHVzZSB0aGUgc2FtZSBtb2RlIGluIGJvdGggY2FzZXMuCkdlbmVyYWxseSB1c2luZyBgcmVmYCBvciBgcmVmIG11dGAgd2hlcmUgbm90IGFscmVhZHkgdXNlZCB3aWxsIGZpeCB0aGlzOgoKYGBgCmxldCB4ID0gKDAsIDIpOwptYXRjaCB4IHsKICAgICgwLCByZWYgeSkgfCAocmVmIHksIDApID0+IHsgLyogdXNlIHkgKi99CiAgICBfID0+ICgpCn0KYGBgCgpBbHRlcm5hdGl2ZWx5LCBzcGxpdCB0aGUgcGF0dGVybjoKCmBgYApsZXQgeCA9ICgwLCAyKTsKbWF0Y2ggeCB7CiAgICAoeSwgMCkgPT4geyAvKiB1c2UgeSAqLyB9CiAgICAoMCwgcmVmIHkpID0+IHsgLyogdXNlIHkgKi99CiAgICBfID0+ICgpCn0KYGBgCkUwNDExVGhlIGBTZWxmYCBrZXl3b3JkIHdhcyB1c2VkIG91dHNpZGUgYW4gaW1wbCwgdHJhaXQsIG9yIHR5cGUgZGVmaW5pdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MTEKPFNlbGY+Ojpmb287IC8vIGVycm9yOiB1c2Ugb2YgYFNlbGZgIG91dHNpZGUgb2YgYW4gaW1wbCwgdHJhaXQsIG9yIHR5cGUKICAgICAgICAgICAgIC8vIGRlZmluaXRpb24KYGBgCgpUaGUgYFNlbGZgIGtleXdvcmQgcmVwcmVzZW50cyB0aGUgY3VycmVudCB0eXBlLCB3aGljaCBleHBsYWlucyB3aHkgaXQgY2FuIG9ubHkKYmUgdXNlZCBpbnNpZGUgYW4gaW1wbCwgdHJhaXQsIG9yIHR5cGUgZGVmaW5pdGlvbi4gSXQgZ2l2ZXMgYWNjZXNzIHRvIHRoZQphc3NvY2lhdGVkIGl0ZW1zIG9mIGEgdHlwZToKCmBgYAp0cmFpdCBGb28gewogICAgdHlwZSBCYXI7Cn0KCnRyYWl0IEJheiA6IEZvbyB7CiAgICBmbiBiYXIoKSAtPiBTZWxmOjpCYXI7IC8vIGxpa2UgdGhpcwp9CmBgYAoKSG93ZXZlciwgYmUgY2FyZWZ1bCB3aGVuIHR3byB0eXBlcyBoYXZlIGEgY29tbW9uIGFzc29jaWF0ZWQgdHlwZToKCmBgYGNvbXBpbGVfZmFpbAp0cmFpdCBGb28gewogICAgdHlwZSBCYXI7Cn0KCnRyYWl0IEZvbzIgewogICAgdHlwZSBCYXI7Cn0KCnRyYWl0IEJheiA6IEZvbyArIEZvbzIgewogICAgZm4gYmFyKCkgLT4gU2VsZjo6QmFyOwogICAgLy8gZXJyb3I6IGFtYmlndW91cyBhc3NvY2lhdGVkIHR5cGUgYEJhcmAgaW4gYm91bmRzIG9mIGBTZWxmYAp9CmBgYAoKVGhpcyBwcm9ibGVtIGNhbiBiZSBzb2x2ZWQgYnkgc3BlY2lmeWluZyBmcm9tIHdoaWNoIHRyYWl0IHdlIHdhbnQgdG8gdXNlIHRoZQpgQmFyYCB0eXBlOgoKYGBgCnRyYWl0IEZvbyB7CiAgICB0eXBlIEJhcjsKfQoKdHJhaXQgRm9vMiB7CiAgICB0eXBlIEJhcjsKfQoKdHJhaXQgQmF6IDogRm9vICsgRm9vMiB7CiAgICBmbiBiYXIoKSAtPiA8U2VsZiBhcyBGb28+OjpCYXI7IC8vIG9rIQp9CmBgYApFMDQxMkEgdXNlZCB0eXBlIG5hbWUgaXMgbm90IGluIHNjb3BlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTA0MTIKaW1wbCBTb21ldGhpbmcge30gLy8gZXJyb3I6IHR5cGUgbmFtZSBgU29tZXRoaW5nYCBpcyBub3QgaW4gc2NvcGUKCi8vIG9yOgoKdHJhaXQgRm9vIHsKICAgIGZuIGJhcihOKTsgLy8gZXJyb3I6IHR5cGUgbmFtZSBgTmAgaXMgbm90IGluIHNjb3BlCn0KCi8vIG9yOgoKZm4gZm9vKHg6IFQpIHt9IC8vIHR5cGUgbmFtZSBgVGAgaXMgbm90IGluIHNjb3BlCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgdHlwZSBuYW1lLCB5b3UgZGlkCmRlY2xhcmUgaXQgb3IgaW1wb3J0ZWQgaXQgaW50byB0aGUgc2NvcGUuIEV4YW1wbGVzOgoKYGBgCnN0cnVjdCBTb21ldGhpbmc7CgppbXBsIFNvbWV0aGluZyB7fSAvLyBvayEKCi8vIG9yOgoKdHJhaXQgRm9vIHsKICAgIHR5cGUgTjsKCiAgICBmbiBiYXIoXzogU2VsZjo6Tik7IC8vIG9rIQp9CgovLyBvcjoKCmZuIGZvbzxUPih4OiBUKSB7fSAvLyBvayEKYGBgCgpBbm90aGVyIGNhc2UgdGhhdCBjYXVzZXMgdGhpcyBlcnJvciBpcyB3aGVuIGEgdHlwZSBpcyBpbXBvcnRlZCBpbnRvIGEgcGFyZW50Cm1vZHVsZS4gVG8gZml4IHRoaXMsIHlvdSBjYW4gZm9sbG93IHRoZSBzdWdnZXN0aW9uIGFuZCB1c2UgRmlsZSBkaXJlY3RseSBvcgpgdXNlIHN1cGVyOjpGaWxlO2Agd2hpY2ggd2lsbCBpbXBvcnQgdGhlIHR5cGVzIGZyb20gdGhlIHBhcmVudCBuYW1lc3BhY2UuIEFuCmV4YW1wbGUgdGhhdCBjYXVzZXMgdGhpcyBlcnJvciBpcyBiZWxvdzoKCmBgYGNvbXBpbGVfZmFpbCxFMDQxMgp1c2Ugc3RkOjpmczo6RmlsZTsKCm1vZCBmb28gewogICAgZm4gc29tZV9mdW5jdGlvbihmOiBGaWxlKSB7fQp9CmBgYAoKYGBgCnVzZSBzdGQ6OmZzOjpGaWxlOwoKbW9kIGZvbyB7CiAgICAvLyBlaXRoZXIKICAgIHVzZSBzdXBlcjo6RmlsZTsKICAgIC8vIG9yCiAgICAvLyB1c2Ugc3RkOjpmczo6RmlsZTsKICAgIGZuIGZvbyhmOiBGaWxlKSB7fQp9CiMgZm4gbWFpbigpIHt9IC8vIGRvbid0IGluc2VydCBpdCBmb3IgdXM7IHRoYXQnbGwgYnJlYWsgaW1wb3J0cwpgYGAKRTA0MTVNb3JlIHRoYW4gb25lIGZ1bmN0aW9uIHBhcmFtZXRlciBoYXZlIHRoZSBzYW1lIG5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDE1CmZuIGZvbyhmOiBpMzIsIGY6IGkzMikge30gLy8gZXJyb3I6IGlkZW50aWZpZXIgYGZgIGlzIGJvdW5kIG1vcmUgdGhhbgogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBvbmNlIGluIHRoaXMgcGFyYW1ldGVyIGxpc3QKYGBgCgpQbGVhc2UgdmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgcGFyYW1ldGVycycgbmFtZS4gRXhhbXBsZToKCmBgYApmbiBmb28oZjogaTMyLCBnOiBpMzIpIHt9IC8vIG9rIQpgYGAKRTA0MTZBbiBpZGVudGlmaWVyIGlzIGJvdW5kIG1vcmUgdGhhbiBvbmNlIGluIGEgcGF0dGVybi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MTYKbWF0Y2ggKDEsIDIpIHsKICAgICh4LCB4KSA9PiB7fSAvLyBlcnJvcjogaWRlbnRpZmllciBgeGAgaXMgYm91bmQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlCiAgICAgICAgICAgICAgICAgLy8gICAgICAgIHNhbWUgcGF0dGVybgp9CmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIGlkZW50aWZpZXJzJyBuYW1lLiBFeGFtcGxlOgoKYGBgCm1hdGNoICgxLCAyKSB7CiAgICAoeCwgeSkgPT4ge30gLy8gb2shCn0KYGBgCgpPciBtYXliZSBkaWQgeW91IG1lYW4gdG8gdW5pZnk/IENvbnNpZGVyIHVzaW5nIGEgZ3VhcmQ6CgpgYGAKIyBsZXQgKEEsIEIsIEMpID0gKDEsIDIsIDMpOwptYXRjaCAoQSwgQiwgQykgewogICAgKHgsIHgyLCBzZWUpIGlmIHggPT0geDIgPT4geyAvKiBBIGFuZCBCIGFyZSBlcXVhbCwgZG8gb25lIHRoaW5nICovIH0KICAgICh5LCB6LCBzZWUpID0+IHsgLyogQSBhbmQgQiB1bmVxdWFsOyBkbyBhbm90aGVyIHRoaW5nICovIH0KfQpgYGAKRTA0MjJBbiBpZGVudGlmaWVyIHRoYXQgaXMgbmVpdGhlciBkZWZpbmVkIG5vciBhIHN0cnVjdCB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjIKZm4gbWFpbiAoKSB7CiAgICBsZXQgeCA9IEZvbyB7IHg6IDEsIHk6IDIgfTsKfQpgYGAKCkluIHRoaXMgY2FzZSwgYEZvb2AgaXMgdW5kZWZpbmVkLCBzbyBpdCBpbmhlcmVudGx5IGlzbid0IGFueXRoaW5nLCBhbmQKZGVmaW5pdGVseSBub3QgYSBzdHJ1Y3QuCgpgYGBjb21waWxlX2ZhaWwKZm4gbWFpbiAoKSB7CiAgICBsZXQgZm9vID0gMTsKICAgIGxldCB4ID0gZm9vIHsgeDogMSwgeTogMiB9Owp9CmBgYAoKSW4gdGhpcyBjYXNlLCBgZm9vYCBpcyBkZWZpbmVkLCBidXQgaXMgbm90IGEgc3RydWN0LCBzbyBSdXN0IGNhbid0IHVzZSBpdCBhcwpvbmUuCkUwNDIzQW4gaWRlbnRpZmllciB3YXMgdXNlZCBsaWtlIGEgZnVuY3Rpb24gbmFtZSBvciBhIHZhbHVlIHdhcyBleHBlY3RlZCBhbmQgdGhlCmlkZW50aWZpZXIgZXhpc3RzIGJ1dCBpdCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IG5hbWVzcGFjZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjMKc3RydWN0IEZvbyB7IGE6IGJvb2wgfTsKCmxldCBmID0gRm9vKCk7Ci8vIGVycm9yOiBleHBlY3RlZCBmdW5jdGlvbiwgdHVwbGUgc3RydWN0IG9yIHR1cGxlIHZhcmlhbnQsIGZvdW5kIGBGb29gCi8vIGBGb29gIGlzIGEgc3RydWN0IG5hbWUsIGJ1dCB0aGlzIGV4cHJlc3Npb24gdXNlcyBpdCBsaWtlIGEgZnVuY3Rpb24gbmFtZQpgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgbmFtZSBvZiB3aGF0IHlvdSBhY3R1YWxseSB3YW50ZWQgdG8gdXNlCmhlcmUuIEV4YW1wbGU6CgpgYGAKZm4gRm9vKCkgLT4gdTMyIHsgMCB9CgpsZXQgZiA9IEZvbygpOyAvLyBvayEKYGBgCgpJdCBpcyBjb21tb24gdG8gZm9yZ2V0IHRoZSB0cmFpbGluZyBgIWAgb24gbWFjcm8gaW52b2NhdGlvbnMsIHdoaWNoIHdvdWxkIGFsc28KeWllbGQgdGhpcyBlcnJvcjoKCmBgYGNvbXBpbGVfZmFpbCxFMDQyMwpwcmludGxuKCIiKTsKLy8gZXJyb3I6IGV4cGVjdGVkIGZ1bmN0aW9uLCB0dXBsZSBzdHJ1Y3Qgb3IgdHVwbGUgdmFyaWFudCwKLy8gZm91bmQgbWFjcm8gYHByaW50bG5gCi8vIGRpZCB5b3UgbWVhbiBgcHJpbnRsbiEoLi4uKWA/IChub3RpY2UgdGhlIHRyYWlsaW5nIGAhYCkKYGBgCgpBbm90aGVyIGNhc2Ugd2hlcmUgdGhpcyBlcnJvciBpcyBlbWl0dGVkIGlzIHdoZW4gYSB2YWx1ZSBpcyBleHBlY3RlZCwgYnV0CnNvbWV0aGluZyBlbHNlIGlzIGZvdW5kOgoKYGBgY29tcGlsZV9mYWlsLEUwNDIzCnB1YiBtb2QgYSB7CiAgICBwdWIgY29uc3QgSTogaTMyID0gMTsKfQoKZm4gaDEoKSAtPiBpMzIgewogICAgYS5JCiAgICAvL35eIEVSUk9SIGV4cGVjdGVkIHZhbHVlLCBmb3VuZCBtb2R1bGUgYGFgCiAgICAvLyBkaWQgeW91IG1lYW4gYGE6OklgPwp9CmBgYApFMDQyNFRoZSBgc2VsZmAga2V5d29yZCB3YXMgdXNlZCBpbnNpZGUgb2YgYW4gYXNzb2NpYXRlZCBmdW5jdGlvbiB3aXRob3V0IGEgImBzZWxmYApyZWNlaXZlciIgcGFyYW1ldGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQyNApzdHJ1Y3QgRm9vOwoKaW1wbCBGb28gewogICAgLy8gYGJhcmAgaXMgYSBtZXRob2QsIGJlY2F1c2UgaXQgaGFzIGEgcmVjZWl2ZXIgcGFyYW1ldGVyLgogICAgZm4gYmFyKCZzZWxmKSB7fQoKICAgIC8vIGBmb29gIGlzIG5vdCBhIG1ldGhvZCwgYmVjYXVzZSBpdCBoYXMgbm8gcmVjZWl2ZXIgcGFyYW1ldGVyLgogICAgZm4gZm9vKCkgewogICAgICAgIHNlbGYuYmFyKCk7IC8vIGVycm9yOiBgc2VsZmAgdmFsdWUgaXMgYSBrZXl3b3JkIG9ubHkgYXZhaWxhYmxlIGluCiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIG1ldGhvZHMgd2l0aCBhIGBzZWxmYCBwYXJhbWV0ZXIKICAgIH0KfQpgYGAKClRoZSBgc2VsZmAga2V5d29yZCBjYW4gb25seSBiZSB1c2VkIGluc2lkZSBtZXRob2RzLCB3aGljaCBhcmUgYXNzb2NpYXRlZApmdW5jdGlvbnMgKGZ1bmN0aW9ucyBkZWZpbmVkIGluc2lkZSBvZiBhIGB0cmFpdGAgb3IgYGltcGxgIGJsb2NrKSB0aGF0IGhhdmUgYQpgc2VsZmAgcmVjZWl2ZXIgYXMgaXRzIGZpcnN0IHBhcmFtZXRlciwgbGlrZSBgc2VsZmAsIGAmc2VsZmAsIGAmbXV0IHNlbGZgIG9yCmBzZWxmOiAmbXV0IFBpbjxTZWxmPmAgKHRoaXMgbGFzdCBvbmUgaXMgYW4gZXhhbXBsZSBvZiBhbiBbImFiaXRyYXJ5IGBzZWxmYAp0eXBlIl0oaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy80NDg3NCkpLgoKQ2hlY2sgaWYgdGhlIGFzc29jaWF0ZWQgZnVuY3Rpb24ncyBwYXJhbWV0ZXIgbGlzdCBzaG91bGQgaGF2ZSBjb250YWluZWQgYSBgc2VsZmAKcmVjZWl2ZXIgZm9yIGl0IHRvIGJlIGEgbWV0aG9kLCBhbmQgYWRkIGl0IGlmIHNvLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBGb287CgppbXBsIEZvbyB7CiAgICBmbiBiYXIoJnNlbGYpIHt9CgogICAgZm4gZm9vKHNlbGYpIHsgLy8gYGZvb2AgaXMgbm93IGEgbWV0aG9kLgogICAgICAgIHNlbGYuYmFyKCk7IC8vIG9rIQogICAgfQp9CmBgYApFMDQyNUFuIHVucmVzb2x2ZWQgbmFtZSB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDI1CnNvbWV0aGluZ190aGF0X2RvZXNudF9leGlzdDo6Zm9vOwovLyBlcnJvcjogdW5yZXNvbHZlZCBuYW1lIGBzb21ldGhpbmdfdGhhdF9kb2VzbnRfZXhpc3Q6OmZvb2AKCi8vIG9yOgoKdHJhaXQgRm9vIHsKICAgIGZuIGJhcigpIHsKICAgICAgICBTZWxmOyAvLyBlcnJvcjogdW5yZXNvbHZlZCBuYW1lIGBTZWxmYAogICAgfQp9CgovLyBvcjoKCmxldCB4ID0gdW5rbm93bl92YXJpYWJsZTsgIC8vIGVycm9yOiB1bnJlc29sdmVkIG5hbWUgYHVua25vd25fdmFyaWFibGVgCmBgYAoKUGxlYXNlIHZlcmlmeSB0aGF0IHRoZSBuYW1lIHdhc24ndCBtaXNzcGVsbGVkIGFuZCBlbnN1cmUgdGhhdCB0aGUKaWRlbnRpZmllciBiZWluZyByZWZlcnJlZCB0byBpcyB2YWxpZCBmb3IgdGhlIGdpdmVuIHNpdHVhdGlvbi4gRXhhbXBsZToKCmBgYAplbnVtIHNvbWV0aGluZ190aGF0X2RvZXNfZXhpc3QgewogICAgRm9vLAp9CmBgYAoKT3I6CgpgYGAKbW9kIHNvbWV0aGluZ190aGF0X2RvZXNfZXhpc3QgewogICAgcHViIHN0YXRpYyBmb28gOiBpMzIgPSAwaTMyOwp9Cgpzb21ldGhpbmdfdGhhdF9kb2VzX2V4aXN0Ojpmb287IC8vIG9rIQpgYGAKCk9yOgoKYGBgCmxldCB1bmtub3duX3ZhcmlhYmxlID0gMTJ1MzI7CmxldCB4ID0gdW5rbm93bl92YXJpYWJsZTsgLy8gb2shCmBgYAoKSWYgdGhlIGl0ZW0gaXMgbm90IGRlZmluZWQgaW4gdGhlIGN1cnJlbnQgbW9kdWxlLCBpdCBtdXN0IGJlIGltcG9ydGVkIHVzaW5nIGEKYHVzZWAgc3RhdGVtZW50LCBsaWtlIHNvOgoKYGBgCiMgbW9kIGZvbyB7IHB1YiBmbiBiYXIoKSB7fSB9CiMgZm4gbWFpbigpIHsKdXNlIGZvbzo6YmFyOwpiYXIoKTsKIyB9CmBgYAoKSWYgdGhlIGl0ZW0geW91IGFyZSBpbXBvcnRpbmcgaXMgbm90IGRlZmluZWQgaW4gc29tZSBzdXBlci1tb2R1bGUgb2YgdGhlCmN1cnJlbnQgbW9kdWxlLCB0aGVuIGl0IG11c3QgYWxzbyBiZSBkZWNsYXJlZCBhcyBwdWJsaWMgKGUuZy4sIGBwdWIgZm5gKS4KRTA0MjZBbiB1bmRlY2xhcmVkIGxhYmVsIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQyNgpsb29wIHsKICAgIGJyZWFrICdhOyAvLyBlcnJvcjogdXNlIG9mIHVuZGVjbGFyZWQgbGFiZWwgYCdhYAp9CmBgYAoKUGxlYXNlIHZlcmlmeSB5b3Ugc3BlbGxlZCBvciBkZWNsYXJlZCB0aGUgbGFiZWwgY29ycmVjdGx5LiBFeGFtcGxlOgoKYGBgCidhOiBsb29wIHsKICAgIGJyZWFrICdhOyAvLyBvayEKfQpgYGAKRTA0MjhBIHR5cGUgb3IgbW9kdWxlIGhhcyBiZWVuIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDI4CnN0cnVjdCBCYXI7CnN0cnVjdCBCYXI7IC8vIGVycm9yOiBkdXBsaWNhdGUgZGVmaW5pdGlvbiBvZiB2YWx1ZSBgQmFyYApgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgdHlwZS9tb2R1bGUncyBuYW1lIG9yIHJlbW92ZS9yZW5hbWUgdGhlCmR1cGxpY2F0ZWQgb25lLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBCYXI7CnN0cnVjdCBCYXIyOyAvLyBvayEKYGBgCkUwNDI5VGhlIGBzZWxmYCBrZXl3b3JkIGNhbm5vdCBhcHBlYXIgYWxvbmUgYXMgdGhlIGxhc3Qgc2VnbWVudCBpbiBhIGB1c2VgCmRlY2xhcmF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQyOQp1c2Ugc3RkOjpmbXQ6OnNlbGY7IC8vIGVycm9yOiBgc2VsZmAgaW1wb3J0cyBhcmUgb25seSBhbGxvd2VkIHdpdGhpbiBhIHsgfSBsaXN0CmBgYAoKVG8gdXNlIGEgbmFtZXNwYWNlIGl0c2VsZiBpbiBhZGRpdGlvbiB0byBzb21lIG9mIGl0cyBtZW1iZXJzLCBgc2VsZmAgbWF5IGFwcGVhcgphcyBwYXJ0IG9mIGEgYnJhY2UtZW5jbG9zZWQgbGlzdCBvZiBpbXBvcnRzOgoKYGBgCnVzZSBzdGQ6OmZtdDo6e3NlbGYsIERlYnVnfTsKYGBgCgpJZiB5b3Ugb25seSB3YW50IHRvIGltcG9ydCB0aGUgbmFtZXNwYWNlLCBkbyBzbyBkaXJlY3RseToKCmBgYAp1c2Ugc3RkOjpmbXQ7CmBgYApFMDQzMFRoZSBgc2VsZmAgaW1wb3J0IGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIGxpc3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDMwCnVzZSBzb21ldGhpbmc6OntzZWxmLCBzZWxmfTsgLy8gZXJyb3I6IGBzZWxmYCBpbXBvcnQgY2FuIG9ubHkgYXBwZWFyIG9uY2UgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhlIGxpc3QKYGBgCgpQbGVhc2UgdmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIGltcG9ydCBuYW1lIG9yIHJlbW92ZSB0aGUgZHVwbGljYXRlZApgc2VsZmAgaW1wb3J0LiBFeGFtcGxlOgoKYGBgCiMgbW9kIHNvbWV0aGluZyB7fQojIGZuIG1haW4oKSB7CnVzZSBzb21ldGhpbmc6OntzZWxmfTsgLy8gb2shCiMgfQpgYGAKRTA0MzFBbiBpbnZhbGlkIGBzZWxmYCBpbXBvcnQgd2FzIG1hZGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDMxCnVzZSB7c2VsZn07IC8vIGVycm9yOiBgc2VsZmAgaW1wb3J0IGNhbiBvbmx5IGFwcGVhciBpbiBhbiBpbXBvcnQgbGlzdCB3aXRoIGEKICAgICAgICAgICAgLy8gICAgICAgIG5vbi1lbXB0eSBwcmVmaXgKYGBgCgpZb3UgY2Fubm90IGltcG9ydCB0aGUgY3VycmVudCBtb2R1bGUgaW50byBpdHNlbGYsIHBsZWFzZSByZW1vdmUgdGhpcyBpbXBvcnQKb3IgdmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgaXQuCkUwNDMyQW4gaW1wb3J0IHdhcyB1bnJlc29sdmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQzMgp1c2Ugc29tZXRoaW5nOjpGb287IC8vIGVycm9yOiB1bnJlc29sdmVkIGltcG9ydCBgc29tZXRoaW5nOjpGb29gLgpgYGAKCkluIFJ1c3QgMjAxNSwgcGF0aHMgaW4gYHVzZWAgc3RhdGVtZW50cyBhcmUgcmVsYXRpdmUgdG8gdGhlIGNyYXRlIHJvb3QuIFRvCmltcG9ydCBpdGVtcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBhbmQgcGFyZW50IG1vZHVsZXMsIHVzZSB0aGUgYHNlbGY6OmAgYW5kCmBzdXBlcjo6YCBwcmVmaXhlcywgcmVzcGVjdGl2ZWx5LgoKSW4gUnVzdCAyMDE4LCBwYXRocyBpbiBgdXNlYCBzdGF0ZW1lbnRzIGFyZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBtb2R1bGUKdW5sZXNzIHRoZXkgYmVnaW4gd2l0aCB0aGUgbmFtZSBvZiBhIGNyYXRlIG9yIGEgbGl0ZXJhbCBgY3JhdGU6OmAsIGluIHdoaWNoCmNhc2UgdGhleSBzdGFydCBmcm9tIHRoZSBjcmF0ZSByb290LiBBcyBpbiBSdXN0IDIwMTUgY29kZSwgdGhlIGBzZWxmOjpgIGFuZApgc3VwZXI6OmAgcHJlZml4ZXMgcmVmZXIgdG8gdGhlIGN1cnJlbnQgYW5kIHBhcmVudCBtb2R1bGVzIHJlc3BlY3RpdmVseS4KCkFsc28gdmVyaWZ5IHRoYXQgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgaW1wb3J0IG5hbWUgYW5kIHRoYXQgdGhlIGltcG9ydCBleGlzdHMKaW4gdGhlIG1vZHVsZSBmcm9tIHdoZXJlIHlvdSB0cmllZCB0byBpbXBvcnQgaXQuIEV4YW1wbGU6CgpgYGAKdXNlIHNlbGY6OnNvbWV0aGluZzo6Rm9vOyAvLyBPay4KCm1vZCBzb21ldGhpbmcgewogICAgcHViIHN0cnVjdCBGb287Cn0KIyBmbiBtYWluKCkge30KYGBgCgpJZiB5b3UgdHJpZWQgdG8gdXNlIGEgbW9kdWxlIGZyb20gYW4gZXh0ZXJuYWwgY3JhdGUgYW5kIGFyZSB1c2luZyBSdXN0IDIwMTUsCnlvdSBtYXkgaGF2ZSBtaXNzZWQgdGhlIGBleHRlcm4gY3JhdGVgIGRlY2xhcmF0aW9uICh3aGljaCBpcyB1c3VhbGx5IHBsYWNlZCBpbgp0aGUgY3JhdGUgcm9vdCk6CgpgYGBlZGl0aW9uMjAxNQpleHRlcm4gY3JhdGUgY29yZTsgLy8gUmVxdWlyZWQgdG8gdXNlIHRoZSBgY29yZWAgY3JhdGUgaW4gUnVzdCAyMDE1LgoKdXNlIGNvcmU6OmFueTsKIyBmbiBtYWluKCkge30KYGBgCgpJbiBSdXN0IDIwMTggdGhlIGBleHRlcm4gY3JhdGVgIGRlY2xhcmF0aW9uIGlzIG5vdCByZXF1aXJlZCBhbmQgeW91IGNhbiBpbnN0ZWFkCmp1c3QgYHVzZWAgaXQ6CgpgYGBlZGl0aW9uMjAxOAp1c2UgY29yZTo6YW55OyAvLyBObyBleHRlcm4gY3JhdGUgcmVxdWlyZWQgaW4gUnVzdCAyMDE4LgojIGZuIG1haW4oKSB7fQpgYGAKRTA0MzNBbiB1bmRlY2xhcmVkIHR5cGUgb3IgbW9kdWxlIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQzMwpsZXQgbWFwID0gSGFzaE1hcDo6bmV3KCk7Ci8vIGVycm9yOiBmYWlsZWQgdG8gcmVzb2x2ZTogdXNlIG9mIHVuZGVjbGFyZWQgdHlwZSBvciBtb2R1bGUgYEhhc2hNYXBgCmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSB0eXBlL21vZHVsZSdzIG5hbWUgb3IgdGhhdCB5b3UgZGlkbid0CmZvcmdldCB0byBpbXBvcnQgaXQ6CgoKYGBgCnVzZSBzdGQ6OmNvbGxlY3Rpb25zOjpIYXNoTWFwOyAvLyBIYXNoTWFwIGhhcyBiZWVuIGltcG9ydGVkLgpsZXQgbWFwOiBIYXNoTWFwPHUzMiwgdTMyPiA9IEhhc2hNYXA6Om5ldygpOyAvLyBTbyBpdCBjYW4gYmUgdXNlZCEKYGBgCkUwNDM0QSB2YXJpYWJsZSB1c2VkIGluc2lkZSBhbiBpbm5lciBmdW5jdGlvbiBjb21lcyBmcm9tIGEgZHluYW1pYyBlbnZpcm9ubWVudC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MzQKZm4gZm9vKCkgewogICAgbGV0IHkgPSA1OwogICAgZm4gYmFyKCkgLT4gdTMyIHsKICAgICAgICB5IC8vIGVycm9yOiBjYW4ndCBjYXB0dXJlIGR5bmFtaWMgZW52aXJvbm1lbnQgaW4gYSBmbiBpdGVtOyB1c2UgdGhlCiAgICAgICAgICAvLyAgICAgICAgfHwgeyAuLi4gfSBjbG9zdXJlIGZvcm0gaW5zdGVhZC4KICAgIH0KfQpgYGAKCklubmVyIGZ1bmN0aW9ucyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlaXIgY29udGFpbmluZyBlbnZpcm9ubWVudC4gVG8gZml4IHRoaXMKZXJyb3IsIHlvdSBjYW4gcmVwbGFjZSB0aGUgZnVuY3Rpb24gd2l0aCBhIGNsb3N1cmU6CgpgYGAKZm4gZm9vKCkgewogICAgbGV0IHkgPSA1OwogICAgbGV0IGJhciA9IHx8IHsKICAgICAgICB5CiAgICB9Owp9CmBgYAoKT3IgcmVwbGFjZSB0aGUgY2FwdHVyZWQgdmFyaWFibGUgd2l0aCBhIGNvbnN0YW50IG9yIGEgc3RhdGljIGl0ZW06CgpgYGAKZm4gZm9vKCkgewogICAgc3RhdGljIG11dCBYOiB1MzIgPSA0OwogICAgY29uc3QgWTogdTMyID0gNTsKICAgIGZuIGJhcigpIC0+IHUzMiB7CiAgICAgICAgdW5zYWZlIHsKICAgICAgICAgICAgWCA9IDM7CiAgICAgICAgfQogICAgICAgIFkKICAgIH0KfQpgYGAKRTA0MzVBIG5vbi1jb25zdGFudCB2YWx1ZSB3YXMgdXNlZCBpbiBhIGNvbnN0YW50IGV4cHJlc3Npb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDM1CmxldCBmb28gPSA0MjsKbGV0IGE6IFt1ODsgZm9vXTsgLy8gZXJyb3I6IGF0dGVtcHQgdG8gdXNlIGEgbm9uLWNvbnN0YW50IHZhbHVlIGluIGEgY29uc3RhbnQKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggYSBjb25zdGFudC4gRXhhbXBsZToKCmBgYApsZXQgYTogW3U4OyA0Ml07IC8vIG9rIQpgYGAKCk9yOgoKYGBgCmNvbnN0IEZPTzogdXNpemUgPSA0MjsKbGV0IGE6IFt1ODsgRk9PXTsgLy8gb2shCmBgYApFMDQzNlRoZSBmdW5jdGlvbmFsIHJlY29yZCB1cGRhdGUgc3ludGF4IHdhcyB1c2VkIG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgc3RydWN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQzNgplbnVtIFB1YmxpY2F0aW9uRnJlcXVlbmN5IHsKICAgIFdlZWtseSwKICAgIFNlbWlNb250aGx5IHsgZGF5czogKHU4LCB1OCksIGFubnVhbF9zcGVjaWFsOiBib29sIH0sCn0KCmZuIG9uZV91cF9jb21wZXRpdG9yKGNvbXBldGl0b3JfZnJlcXVlbmN5OiBQdWJsaWNhdGlvbkZyZXF1ZW5jeSkKICAgICAgICAgICAgICAgICAgICAgLT4gUHVibGljYXRpb25GcmVxdWVuY3kgewogICAgbWF0Y2ggY29tcGV0aXRvcl9mcmVxdWVuY3kgewogICAgICAgIFB1YmxpY2F0aW9uRnJlcXVlbmN5OjpXZWVrbHkgPT4gUHVibGljYXRpb25GcmVxdWVuY3k6OlNlbWlNb250aGx5IHsKICAgICAgICAgICAgZGF5czogKDEsIDE1KSwgYW5udWFsX3NwZWNpYWw6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICBjIEAgUHVibGljYXRpb25GcmVxdWVuY3k6OlNlbWlNb250aGx5eyAuLiB9ID0+CiAgICAgICAgICAgIFB1YmxpY2F0aW9uRnJlcXVlbmN5OjpTZW1pTW9udGhseSB7CiAgICAgICAgICAgICAgICBhbm51YWxfc3BlY2lhbDogdHJ1ZSwgLi5jIC8vIGVycm9yOiBmdW5jdGlvbmFsIHJlY29yZCB1cGRhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHN5bnRheCByZXF1aXJlcyBhIHN0cnVjdAogICAgICAgIH0KICAgIH0KfQpgYGAKClRoZSBmdW5jdGlvbmFsIHJlY29yZCB1cGRhdGUgc3ludGF4IGlzIG9ubHkgYWxsb3dlZCBmb3Igc3RydWN0cyAoc3RydWN0LWxpa2UKZW51bSB2YXJpYW50cyBkb24ndCBxdWFsaWZ5LCBmb3IgZXhhbXBsZSkuIFRvIGZpeCB0aGUgcHJldmlvdXMgY29kZSwgcmV3cml0ZSB0aGUKZXhwcmVzc2lvbiB3aXRob3V0IGZ1bmN0aW9uYWwgcmVjb3JkIHVwZGF0ZSBzeW50YXg6CgpgYGAKZW51bSBQdWJsaWNhdGlvbkZyZXF1ZW5jeSB7CiAgICBXZWVrbHksCiAgICBTZW1pTW9udGhseSB7IGRheXM6ICh1OCwgdTgpLCBhbm51YWxfc3BlY2lhbDogYm9vbCB9LAp9CgpmbiBvbmVfdXBfY29tcGV0aXRvcihjb21wZXRpdG9yX2ZyZXF1ZW5jeTogUHVibGljYXRpb25GcmVxdWVuY3kpCiAgICAgICAgICAgICAgICAgICAgIC0+IFB1YmxpY2F0aW9uRnJlcXVlbmN5IHsKICAgIG1hdGNoIGNvbXBldGl0b3JfZnJlcXVlbmN5IHsKICAgICAgICBQdWJsaWNhdGlvbkZyZXF1ZW5jeTo6V2Vla2x5ID0+IFB1YmxpY2F0aW9uRnJlcXVlbmN5OjpTZW1pTW9udGhseSB7CiAgICAgICAgICAgIGRheXM6ICgxLCAxNSksIGFubnVhbF9zcGVjaWFsOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgUHVibGljYXRpb25GcmVxdWVuY3k6OlNlbWlNb250aGx5eyBkYXlzLCAuLiB9ID0+CiAgICAgICAgICAgIFB1YmxpY2F0aW9uRnJlcXVlbmN5OjpTZW1pTW9udGhseSB7CiAgICAgICAgICAgICAgICBkYXlzLCBhbm51YWxfc3BlY2lhbDogdHJ1ZSAvLyBvayEKICAgICAgICB9CiAgICB9Cn0KYGBgCkUwNDM3QW4gYXNzb2NpYXRlZCB0eXBlIHdob3NlIG5hbWUgZG9lcyBub3QgbWF0Y2ggYW55IG9mIHRoZSBhc3NvY2lhdGVkIHR5cGVzCmluIHRoZSB0cmFpdCB3YXMgdXNlZCB3aGVuIGltcGxlbWVudGluZyB0aGUgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDM3CnRyYWl0IEZvbyB7fQoKaW1wbCBGb28gZm9yIGkzMiB7CiAgICB0eXBlIEJhciA9IGJvb2w7Cn0KYGBgCgpUcmFpdCBpbXBsZW1lbnRhdGlvbnMgY2FuIG9ubHkgaW1wbGVtZW50IGFzc29jaWF0ZWQgdHlwZXMgdGhhdCBhcmUgbWVtYmVycyBvZgp0aGUgdHJhaXQgaW4gcXVlc3Rpb24uCgpUaGUgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHRvIHJlbW92ZSB0aGUgZXh0cmFuZW91cyBhc3NvY2lhdGVkIHR5cGU6CgpgYGAKdHJhaXQgRm9vIHt9CgppbXBsIEZvbyBmb3IgaTMyIHt9CmBgYApFMDQzOEFuIGFzc29jaWF0ZWQgY29uc3RhbnQgd2hvc2UgbmFtZSBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGFzc29jaWF0ZWQgY29uc3RhbnRzCmluIHRoZSB0cmFpdCB3YXMgdXNlZCB3aGVuIGltcGxlbWVudGluZyB0aGUgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDM4CnRyYWl0IEZvbyB7fQoKaW1wbCBGb28gZm9yIGkzMiB7CiAgICBjb25zdCBCQVI6IGJvb2wgPSB0cnVlOwp9CmBgYAoKVHJhaXQgaW1wbGVtZW50YXRpb25zIGNhbiBvbmx5IGltcGxlbWVudCBhc3NvY2lhdGVkIGNvbnN0YW50cyB0aGF0IGFyZQptZW1iZXJzIG9mIHRoZSB0cmFpdCBpbiBxdWVzdGlvbi4KClRoZSBzb2x1dGlvbiB0byB0aGlzIHByb2JsZW0gaXMgdG8gcmVtb3ZlIHRoZSBleHRyYW5lb3VzIGFzc29jaWF0ZWQgY29uc3RhbnQ6CgpgYGAKdHJhaXQgRm9vIHt9CgppbXBsIEZvbyBmb3IgaTMyIHt9CmBgYApFMDQzOVRoZSBsZW5ndGggb2YgdGhlIHBsYXRmb3JtLWludHJpbnNpYyBmdW5jdGlvbiBgc2ltZF9zaHVmZmxlYCB3YXNuJ3Qgc3BlY2lmaWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQzOQojIVtmZWF0dXJlKHBsYXRmb3JtX2ludHJpbnNpY3MpXQoKZXh0ZXJuICJwbGF0Zm9ybS1pbnRyaW5zaWMiIHsKICAgIGZuIHNpbWRfc2h1ZmZsZTxBLEI+KGE6IEEsIGI6IEEsIGM6IFt1MzI7IDhdKSAtPiBCOwogICAgLy8gZXJyb3I6IGludmFsaWQgYHNpbWRfc2h1ZmZsZWAsIG5lZWRzIGxlbmd0aDogYHNpbWRfc2h1ZmZsZWAKfQpgYGAKClRoZSBgc2ltZF9zaHVmZmxlYCBmdW5jdGlvbiBuZWVkcyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBwYXNzZWQgYXMKbGFzdCBwYXJhbWV0ZXIgaW4gaXRzIG5hbWUuIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShwbGF0Zm9ybV9pbnRyaW5zaWNzKV0KCmV4dGVybiAicGxhdGZvcm0taW50cmluc2ljIiB7CiAgICBmbiBzaW1kX3NodWZmbGU4PEEsQj4oYTogQSwgYjogQSwgYzogW3UzMjsgOF0pIC0+IEI7Cn0KYGBgCkUwNDQ1QSBwcml2YXRlIHRyYWl0IHdhcyB1c2VkIG9uIGEgcHVibGljIHR5cGUgcGFyYW1ldGVyIGJvdW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTA0NDUKIyFbZGVueShwcml2YXRlX2luX3B1YmxpYyldCgp0cmFpdCBGb28gewogICAgZm4gZHVtbXkoJnNlbGYpIHsgfQp9CgpwdWIgdHJhaXQgQmFyIDogRm9vIHt9IC8vIGVycm9yOiBwcml2YXRlIHRyYWl0IGluIHB1YmxpYyBpbnRlcmZhY2UKcHViIHN0cnVjdCBCYXIyPFQ6IEZvbz4ocHViIFQpOyAvLyBzYW1lIGVycm9yCnB1YiBmbiBmb288VDogRm9vPiAodDogVCkge30gLy8gc2FtZSBlcnJvcgoKZm4gbWFpbigpIHt9CmBgYAoKVG8gc29sdmUgdGhpcyBlcnJvciwgcGxlYXNlIGVuc3VyZSB0aGF0IHRoZSB0cmFpdCBpcyBhbHNvIHB1YmxpYy4gVGhlIHRyYWl0CmNhbiBiZSBtYWRlIGluYWNjZXNzaWJsZSBpZiBuZWNlc3NhcnkgYnkgcGxhY2luZyBpdCBpbnRvIGEgcHJpdmF0ZSBpbm5lcgptb2R1bGUsIGJ1dCBpdCBzdGlsbCBoYXMgdG8gYmUgbWFya2VkIHdpdGggYHB1YmAuIEV4YW1wbGU6CgpgYGAKcHViIHRyYWl0IEZvbyB7IC8vIHdlIHNldCB0aGUgRm9vIHRyYWl0IHB1YmxpYwogICAgZm4gZHVtbXkoJnNlbGYpIHsgfQp9CgpwdWIgdHJhaXQgQmFyIDogRm9vIHt9IC8vIG9rIQpwdWIgc3RydWN0IEJhcjI8VDogRm9vPihwdWIgVCk7IC8vIG9rIQpwdWIgZm4gZm9vPFQ6IEZvbz4gKHQ6IFQpIHt9IC8vIG9rIQoKZm4gbWFpbigpIHt9CmBgYApFMDQ0NkEgcHJpdmF0ZSB0eXBlIHdhcyB1c2VkIGluIGEgcHVibGljIHR5cGUgc2lnbmF0dXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ0NgojIVtkZW55KHByaXZhdGVfaW5fcHVibGljKV0Kc3RydWN0IEJhcih1MzIpOwoKbW9kIGZvbyB7CiAgICB1c2UgY3JhdGU6OkJhcjsKICAgIHB1YiBmbiBiYXIoKSAtPiBCYXIgeyAvLyBlcnJvcjogcHJpdmF0ZSB0eXBlIGluIHB1YmxpYyBpbnRlcmZhY2UKICAgICAgICBCYXIoMCkKICAgIH0KfQoKZm4gbWFpbigpIHt9CmBgYAoKVGhlcmUgYXJlIHR3byB3YXlzIHRvIHNvbHZlIHRoaXMgZXJyb3IuIFRoZSBmaXJzdCBpcyB0byBtYWtlIHRoZSBwdWJsaWMgdHlwZQpzaWduYXR1cmUgb25seSBwdWJsaWMgdG8gYSBtb2R1bGUgdGhhdCBhbHNvIGhhcyBhY2Nlc3MgdG8gdGhlIHByaXZhdGUgdHlwZS4KVGhpcyBpcyBkb25lIGJ5IHVzaW5nIHB1YihjcmF0ZSkgb3IgcHViKGluIGNyYXRlOjpteV9tb2Q6OmV0YykKRXhhbXBsZToKCmBgYApzdHJ1Y3QgQmFyKHUzMik7Cgptb2QgZm9vIHsKICAgIHVzZSBjcmF0ZTo6QmFyOwogICAgcHViKGNyYXRlKSBmbiBiYXIoKSAtPiBCYXIgeyAvLyBvbmx5IHB1YmxpYyB0byBjcmF0ZSByb290CiAgICAgICAgQmFyKDApCiAgICB9Cn0KCmZuIG1haW4oKSB7fQpgYGAKClRoZSBvdGhlciB3YXkgdG8gc29sdmUgdGhpcyBlcnJvciBpcyB0byBtYWtlIHRoZSBwcml2YXRlIHR5cGUgcHVibGljLgpFeGFtcGxlOgoKYGBgCnB1YiBzdHJ1Y3QgQmFyKHUzMik7IC8vIHdlIHNldCB0aGUgQmFyIHR5cGUgcHVibGljCm1vZCBmb28gewogICAgdXNlIGNyYXRlOjpCYXI7CiAgICBwdWIgZm4gYmFyKCkgLT4gQmFyIHsgLy8gb2shCiAgICAgICAgQmFyKDApCiAgICB9Cn0KCmZuIG1haW4oKSB7fQpgYGAKRTA0NDcjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGUgYHB1YmAga2V5d29yZCB3YXMgdXNlZCBpbnNpZGUgYSBmdW5jdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGAKZm4gZm9vKCkgewogICAgcHViIHN0cnVjdCBCYXI7IC8vIGVycm9yOiB2aXNpYmlsaXR5IGhhcyBubyBlZmZlY3QgaW5zaWRlIGZ1bmN0aW9ucwp9CmBgYAoKU2luY2Ugd2UgY2Fubm90IGFjY2VzcyBpdGVtcyBkZWZpbmVkIGluc2lkZSBhIGZ1bmN0aW9uLCB0aGUgdmlzaWJpbGl0eSBvZiBpdHMKaXRlbXMgZG9lcyBub3QgaW1wYWN0IG91dGVyIGNvZGUuIFNvIHVzaW5nIHRoZSBgcHViYCBrZXl3b3JkIGluIHRoaXMgY29udGV4dAppcyBpbnZhbGlkLgpFMDQ0OCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoZSBgcHViYCBrZXl3b3JkIHdhcyB1c2VkIGluc2lkZSBhIHB1YmxpYyBlbnVtLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbApwdWIgZW51bSBGb28gewogICAgcHViIEJhciwgLy8gZXJyb3I6IHVubmVjZXNzYXJ5IGBwdWJgIHZpc2liaWxpdHkKfQpgYGAKClNpbmNlIHRoZSBlbnVtIGlzIGFscmVhZHkgcHVibGljLCBhZGRpbmcgYHB1YmAgb24gb25lIGl0cyBlbGVtZW50cyBpcwp1bm5lY2Vzc2FyeS4gRXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbAplbnVtIEZvbyB7CiAgICBwdWIgQmFyLCAvLyBub3Qgb2shCn0KYGBgCgpUaGlzIGlzIHRoZSBjb3JyZWN0IHN5bnRheDoKCmBgYApwdWIgZW51bSBGb28gewogICAgQmFyLCAvLyBvayEKfQpgYGAKRTA0NDlBIHZpc2liaWxpdHkgcXVhbGlmaWVyIHdhcyB1c2VkIHdoZW4gaXQgd2FzIHVubmVjZXNzYXJ5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTA0NDkKc3RydWN0IEJhcjsKCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oKTsKfQoKcHViIGltcGwgQmFyIHt9IC8vIGVycm9yOiB1bm5lY2Vzc2FyeSB2aXNpYmlsaXR5IHF1YWxpZmllcgoKcHViIGltcGwgRm9vIGZvciBCYXIgeyAvLyBlcnJvcjogdW5uZWNlc3NhcnkgdmlzaWJpbGl0eSBxdWFsaWZpZXIKICAgIHB1YiBmbiBmb28oKSB7fSAvLyBlcnJvcjogdW5uZWNlc3NhcnkgdmlzaWJpbGl0eSBxdWFsaWZpZXIKfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgcmVtb3ZlIHRoZSB2aXNpYmlsaXR5IHF1YWxpZmllciB3aGVuIGl0IGlzIG5vdApyZXF1aXJlZC4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpOwp9CgovLyBEaXJlY3RseSBpbXBsZW1lbnRlZCBtZXRob2RzIHNoYXJlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSB0eXBlIGl0c2VsZiwKLy8gc28gYHB1YmAgaXMgdW5uZWNlc3NhcnkgaGVyZQppbXBsIEJhciB7fQoKLy8gVHJhaXQgbWV0aG9kcyBzaGFyZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgdHJhaXQsIHNvIGBwdWJgIGlzCi8vIHVubmVjZXNzYXJ5IGluIGVpdGhlciBjYXNlCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCkge30KfQpgYGAKRTA0NTFBIHN0cnVjdCBjb25zdHJ1Y3RvciB3aXRoIHByaXZhdGUgZmllbGRzIHdhcyBpbnZva2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ1MQptb2QgQmFyIHsKICAgIHB1YiBzdHJ1Y3QgRm9vIHsKICAgICAgICBwdWIgYTogaXNpemUsCiAgICAgICAgYjogaXNpemUsCiAgICB9Cn0KCmxldCBmID0gQmFyOjpGb297IGE6IDAsIGI6IDAgfTsgLy8gZXJyb3I6IGZpZWxkIGBiYCBvZiBzdHJ1Y3QgYEJhcjo6Rm9vYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBpcyBwcml2YXRlCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHBsZWFzZSBlbnN1cmUgdGhhdCBhbGwgdGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0IGFyZSBwdWJsaWMsCm9yIGltcGxlbWVudCBhIGZ1bmN0aW9uIGZvciBlYXN5IGluc3RhbnRpYXRpb24uIEV4YW1wbGVzOgoKYGBgCm1vZCBCYXIgewogICAgcHViIHN0cnVjdCBGb28gewogICAgICAgIHB1YiBhOiBpc2l6ZSwKICAgICAgICBwdWIgYjogaXNpemUsIC8vIHdlIHNldCBgYmAgZmllbGQgcHVibGljCiAgICB9Cn0KCmxldCBmID0gQmFyOjpGb297IGE6IDAsIGI6IDAgfTsgLy8gb2shCmBgYAoKT3I6CgpgYGAKbW9kIEJhciB7CiAgICBwdWIgc3RydWN0IEZvbyB7CiAgICAgICAgcHViIGE6IGlzaXplLAogICAgICAgIGI6IGlzaXplLCAvLyBzdGlsbCBwcml2YXRlCiAgICB9CgogICAgaW1wbCBGb28gewogICAgICAgIHB1YiBmbiBuZXcoKSAtPiBGb28geyAvLyB3ZSBjcmVhdGUgYSBtZXRob2QgdG8gaW5zdGFudGlhdGUgYEZvb2AKICAgICAgICAgICAgRm9vIHsgYTogMCwgYjogMCB9CiAgICAgICAgfQogICAgfQp9CgpsZXQgZiA9IEJhcjo6Rm9vOjpuZXcoKTsgLy8gb2shCmBgYApFMDQ1MkFuIGludmFsaWQgbGludCBhdHRyaWJ1dGUgaGFzIGJlZW4gZ2l2ZW4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDUyCiMhW2FsbG93KGZvbyA9ICIiKV0gLy8gZXJyb3I6IG1hbGZvcm1lZCBsaW50IGF0dHJpYnV0ZQpgYGAKCkxpbnQgYXR0cmlidXRlcyBvbmx5IGFjY2VwdCBhIGxpc3Qgb2YgaWRlbnRpZmllcnMgKHdoZXJlIGVhY2ggaWRlbnRpZmllciBpcyBhCmxpbnQgbmFtZSkuIEVuc3VyZSB0aGUgYXR0cmlidXRlIGlzIG9mIHRoaXMgZm9ybToKCmBgYAojIVthbGxvdyhmb28pXSAvLyBvayEKLy8gb3I6CiMhW2FsbG93KGZvbywgZm9vMildIC8vIG9rIQpgYGAKRTA0NTNBIGxpbnQgY2hlY2sgYXR0cmlidXRlIHdhcyBvdmVycnVsZWQgYnkgYSBgZm9yYmlkYCBkaXJlY3RpdmUgc2V0IGFzIGFuCmF0dHJpYnV0ZSBvbiBhbiBlbmNsb3Npbmcgc2NvcGUsIG9yIG9uIHRoZSBjb21tYW5kIGxpbmUgd2l0aCB0aGUgYC1GYCBvcHRpb24uCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDUzCiMhW2ZvcmJpZChub25fc25ha2VfY2FzZSldCgojW2FsbG93KG5vbl9zbmFrZV9jYXNlKV0KZm4gbWFpbigpIHsKICAgIGxldCBNeU51bWJlciA9IDI7IC8vIGVycm9yOiBhbGxvdyhub25fc25ha2VfY2FzZSkgb3ZlcnJ1bGVkIGJ5IG91dGVyCiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZm9yYmlkKG5vbl9zbmFrZV9jYXNlKQp9CmBgYAoKVGhlIGBmb3JiaWRgIGxpbnQgc2V0dGluZywgbGlrZSBgZGVueWAsIHR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGNvbXBpbGVyCndhcm5pbmcgaW50byBhIGhhcmQgZXJyb3IuIFVubGlrZSBgZGVueWAsIGBmb3JiaWRgIHByZXZlbnRzIGl0c2VsZiBmcm9tIGJlaW5nCm92ZXJyaWRkZW4gYnkgaW5uZXIgYXR0cmlidXRlcy4KCklmIHlvdSdyZSBzdXJlIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSBsaW50IGNoZWNrLCB5b3UgY2FuIGNoYW5nZSBgZm9yYmlkYCB0bwpgZGVueWAgKG9yIHVzZSBgLURgIGluc3RlYWQgb2YgYC1GYCBpZiB0aGUgYGZvcmJpZGAgc2V0dGluZyB3YXMgZ2l2ZW4gYXMgYQpjb21tYW5kLWxpbmUgb3B0aW9uKSB0byBhbGxvdyB0aGUgaW5uZXIgbGludCBjaGVjayBhdHRyaWJ1dGU6CgpgYGAKIyFbZGVueShub25fc25ha2VfY2FzZSldCgojW2FsbG93KG5vbl9zbmFrZV9jYXNlKV0KZm4gbWFpbigpIHsKICAgIGxldCBNeU51bWJlciA9IDI7IC8vIG9rIQp9CmBgYAoKT3RoZXJ3aXNlLCBlZGl0IHRoZSBjb2RlIHRvIHBhc3MgdGhlIGxpbnQgY2hlY2ssIGFuZCByZW1vdmUgdGhlIG92ZXJydWxlZAphdHRyaWJ1dGU6CgpgYGAKIyFbZm9yYmlkKG5vbl9zbmFrZV9jYXNlKV0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXlfbnVtYmVyID0gMjsKfQpgYGAKRTA0NTRBIGxpbmsgbmFtZSB3YXMgZ2l2ZW4gd2l0aCBhbiBlbXB0eSBuYW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ1NAojW2xpbmsobmFtZSA9ICIiKV0gZXh0ZXJuIHt9Ci8vIGVycm9yOiBgI1tsaW5rKG5hbWUgPSAiIildYCBnaXZlbiB3aXRoIGVtcHR5IG5hbWUKYGBgCgpUaGUgcnVzdCBjb21waWxlciBjYW5ub3QgbGluayB0byBhbiBleHRlcm5hbCBsaWJyYXJ5IGlmIHlvdSBkb24ndCBnaXZlIGl0IGl0cwpuYW1lLiBFeGFtcGxlOgoKYGBgbm9fcnVuCiNbbGluayhuYW1lID0gInNvbWVfbGliIildIGV4dGVybiB7fSAvLyBvayEKYGBgCkUwNDU1TGlua2luZyB3aXRoIGBraW5kPWZyYW1ld29ya2AgaXMgb25seSBzdXBwb3J0ZWQgd2hlbiB0YXJnZXRpbmcgbWFjT1MsCmFzIGZyYW1ld29ya3MgYXJlIHNwZWNpZmljIHRvIHRoYXQgb3BlcmF0aW5nIHN5c3RlbS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKHNob3VsZC1jb21waWxlX2ZhaWwtYnV0LWNhbm5vdC1kb2N0ZXN0LWNvbmRpdGlvbmFsbHktd2l0aG91dC1tYWNvcykKI1tsaW5rKG5hbWUgPSAiRm9vQ29yZVNlcnZpY2VzIiwga2luZCA9ICJmcmFtZXdvcmsiKV0gZXh0ZXJuIHt9Ci8vIE9TIHVzZWQgdG8gY29tcGlsZSBpcyBMaW51eCBmb3IgZXhhbXBsZQpgYGAKClRvIHNvbHZlIHRoaXMgZXJyb3IgeW91IGNhbiB1c2UgY29uZGl0aW9uYWwgY29tcGlsYXRpb246CgpgYGAKI1tjZmdfYXR0cih0YXJnZXQ9Im1hY29zIiwgbGluayhuYW1lID0gIkZvb0NvcmVTZXJ2aWNlcyIsIGtpbmQgPSAiZnJhbWV3b3JrIikpXQpleHRlcm4ge30KYGBgCgpMZWFybiBtb3JlIGluIHRoZSBbQ29uZGl0aW9uYWwgQ29tcGlsYXRpb25dW2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uXSBzZWN0aW9uCm9mIHRoZSBSZWZlcmVuY2UuCgpbY29uZGl0aW9uYWwtY29tcGlsYXRpb25dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9hdHRyaWJ1dGVzLmh0bWwjY29uZGl0aW9uYWwtY29tcGlsYXRpb24KRTA0NThBbiB1bmtub3duICJraW5kIiB3YXMgc3BlY2lmaWVkIGZvciBhIGxpbmsgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ1OAojW2xpbmsoa2luZCA9ICJ3b25kZXJmdWxfdW5pY29ybiIpXSBleHRlcm4ge30KLy8gZXJyb3I6IHVua25vd24ga2luZDogYHdvbmRlcmZ1bF91bmljb3JuYApgYGAKClBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgImtpbmQiIHZhbHVlLCBmcm9tIG9uZSBvZiB0aGUgZm9sbG93aW5nOgoKKiBzdGF0aWMKKiBkeWxpYgoqIGZyYW1ld29yawpFMDQ1OUEgbGluayB3YXMgdXNlZCB3aXRob3V0IGEgbmFtZSBwYXJhbWV0ZXIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDU5CiNbbGluayhraW5kID0gImR5bGliIildIGV4dGVybiB7fQovLyBlcnJvcjogYCNbbGluayguLi4pXWAgc3BlY2lmaWVkIHdpdGhvdXQgYG5hbWUgPSAiZm9vImAKYGBgCgpQbGVhc2UgYWRkIHRoZSBuYW1lIHBhcmFtZXRlciB0byBhbGxvdyB0aGUgcnVzdCBjb21waWxlciB0byBmaW5kIHRoZSBsaWJyYXJ5CnlvdSB3YW50LiBFeGFtcGxlOgoKYGBgbm9fcnVuCiNbbGluayhraW5kID0gImR5bGliIiwgbmFtZSA9ICJzb21lX2xpYiIpXSBleHRlcm4ge30gLy8gb2shCmBgYApFMDQ2M0EgcGx1Z2luL2NyYXRlIHdhcyBkZWNsYXJlZCBidXQgY2Fubm90IGJlIGZvdW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ2MwojIVtmZWF0dXJlKHBsdWdpbildCiMhW3BsdWdpbihjb29raWVfbW9uc3RlcildIC8vIGVycm9yOiBjYW4ndCBmaW5kIGNyYXRlIGZvciBgY29va2llX21vbnN0ZXJgCmV4dGVybiBjcmF0ZSBjYWtlX2lzX2FfbGllOyAvLyBlcnJvcjogY2FuJ3QgZmluZCBjcmF0ZSBmb3IgYGNha2VfaXNfYV9saWVgCmBgYAoKWW91IG5lZWQgdG8gbGluayB5b3VyIGNvZGUgdG8gdGhlIHJlbGV2YW50IGNyYXRlIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIGl0Cih0aHJvdWdoIENhcmdvIG9yIHRoZSBgLUxgIG9wdGlvbiBvZiBydXN0YyBleGFtcGxlKS4gUGx1Z2lucyBhcmUgY3JhdGVzIGFzCndlbGwsIGFuZCB5b3UgbGluayB0byB0aGVtIHRoZSBzYW1lIHdheS4KRTA0NjZNYWNybyBpbXBvcnQgZGVjbGFyYXRpb24gd2FzIG1hbGZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDY2CiNbbWFjcm9fdXNlKGFfbWFjcm8oYW5vdGhlcl9tYWNybykpXSAvLyBlcnJvcjogaW52YWxpZCBpbXBvcnQgZGVjbGFyYXRpb24KZXh0ZXJuIGNyYXRlIGNvcmUgYXMgc29tZV9jcmF0ZTsKCiNbbWFjcm9fdXNlKGlfd2FudCA9ICJzb21lX21hY3JvcyIpXSAvLyBlcnJvcjogaW52YWxpZCBpbXBvcnQgZGVjbGFyYXRpb24KZXh0ZXJuIGNyYXRlIGNvcmUgYXMgYW5vdGhlcl9jcmF0ZTsKYGBgCgpUaGlzIGlzIGEgc3ludGF4IGVycm9yIGF0IHRoZSBsZXZlbCBvZiBhdHRyaWJ1dGUgZGVjbGFyYXRpb25zLiBUaGUgcHJvcGVyCnN5bnRheCBmb3IgbWFjcm8gaW1wb3J0cyBpcyB0aGUgZm9sbG93aW5nOgoKYGBgaWdub3JlIChjYW5ub3QtZG9jdGVzdC1tdWx0aWNyYXRlLXByb2plY3QpCi8vIEluIHNvbWVfY3JhdGU6CiNbbWFjcm9fZXhwb3J0XQptYWNyb19ydWxlcyEgZ2V0X3RhY29zIHsKICAgIC4uLgp9CgojW21hY3JvX2V4cG9ydF0KbWFjcm9fcnVsZXMhIGdldF9waW1pZW50b3MgewogICAgLi4uCn0KCi8vIEluIHlvdXIgY3JhdGU6CiNbbWFjcm9fdXNlKGdldF90YWNvcywgZ2V0X3BpbWllbnRvcyldIC8vIEl0IGltcG9ydHMgYGdldF90YWNvc2AgYW5kCmV4dGVybiBjcmF0ZSBzb21lX2NyYXRlOyAgICAgICAgICAgICAgIC8vIGBnZXRfcGltaWVudG9zYCBtYWNyb3MgZnJvbSBzb21lX2NyYXRlCmBgYAoKSWYgeW91IHdvdWxkIGxpa2UgdG8gaW1wb3J0IGFsbCBleHBvcnRlZCBtYWNyb3MsIHdyaXRlIGBtYWNyb191c2VgIHdpdGggbm8KYXJndW1lbnRzLgpFMDQ2OEEgbm9uLXJvb3QgbW9kdWxlIHRyaWVkIHRvIGltcG9ydCBtYWNyb3MgZnJvbSBhbm90aGVyIGNyYXRlLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ2OAptb2QgZm9vIHsKICAgICNbbWFjcm9fdXNlKGRlYnVnX2Fzc2VydCldICAvLyBlcnJvcjogbXVzdCBiZSBhdCBjcmF0ZSByb290IHRvIGltcG9ydAogICAgZXh0ZXJuIGNyYXRlIGNvcmU7ICAgICAgICAgIC8vICAgICAgICBtYWNyb3MgZnJvbSBhbm90aGVyIGNyYXRlCiAgICBmbiBydW5fbWFjcm8oKSB7IGRlYnVnX2Fzc2VydCEodHJ1ZSk7IH0KfQpgYGAKCk9ubHkgYGV4dGVybiBjcmF0ZWAgaW1wb3J0cyBhdCB0aGUgY3JhdGUgcm9vdCBsZXZlbCBhcmUgYWxsb3dlZCB0byBpbXBvcnQKbWFjcm9zLgoKRWl0aGVyIG1vdmUgdGhlIG1hY3JvIGltcG9ydCB0byBjcmF0ZSByb290IG9yIGRvIHdpdGhvdXQgdGhlIGZvcmVpZ24gbWFjcm9zLgpUaGlzIHdpbGwgd29yazoKCmBgYAojW21hY3JvX3VzZShkZWJ1Z19hc3NlcnQpXSAvLyBvayEKZXh0ZXJuIGNyYXRlIGNvcmU7Cgptb2QgZm9vIHsKICAgIGZuIHJ1bl9tYWNybygpIHsgZGVidWdfYXNzZXJ0ISh0cnVlKTsgfQp9CiMgZm4gbWFpbigpIHt9CmBgYApFMDQ2OUEgbWFjcm8gbGlzdGVkIGZvciBpbXBvcnQgd2FzIG5vdCBmb3VuZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NjkKI1ttYWNyb191c2UoZHJpbmssIGJlX21lcnJ5KV0gLy8gZXJyb3I6IGltcG9ydGVkIG1hY3JvIG5vdCBmb3VuZApleHRlcm4gY3JhdGUgYWxsb2M7CgpmbiBtYWluKCkgewogICAgLy8gLi4uCn0KYGBgCgpFaXRoZXIgdGhlIGxpc3RlZCBtYWNybyBpcyBub3QgY29udGFpbmVkIGluIHRoZSBpbXBvcnRlZCBjcmF0ZSwgb3IgaXQgaXMgbm90CmV4cG9ydGVkIGZyb20gdGhlIGdpdmVuIGNyYXRlLgoKVGhpcyBjb3VsZCBiZSBjYXVzZWQgYnkgYSB0eXBvLiBEaWQgeW91IG1pc3NwZWxsIHRoZSBtYWNybydzIG5hbWU/CgpEb3VibGUtY2hlY2sgdGhlIG5hbWVzIG9mIHRoZSBtYWNyb3MgbGlzdGVkIGZvciBpbXBvcnQsIGFuZCB0aGF0IHRoZSBjcmF0ZQppbiBxdWVzdGlvbiBleHBvcnRzIHRoZW0uCgpBIHdvcmtpbmcgdmVyc2lvbiB3b3VsZCBiZToKCmBgYGlnbm9yZSAoY2Fubm90LWRvY3Rlc3QtbXVsdGljcmF0ZS1wcm9qZWN0KQovLyBJbiBzb21lX2NyYXRlIGNyYXRlOgojW21hY3JvX2V4cG9ydF0KbWFjcm9fcnVsZXMhIGVhdCB7CiAgICAuLi4KfQoKI1ttYWNyb19leHBvcnRdCm1hY3JvX3J1bGVzISBkcmluayB7CiAgICAuLi4KfQoKLy8gSW4geW91ciBjcmF0ZToKI1ttYWNyb191c2UoZWF0LCBkcmluayldCmV4dGVybiBjcmF0ZSBzb21lX2NyYXRlOyAvL29rIQpgYGAKRTA0NzdUaGUgdHlwZSBkb2VzIG5vdCBmdWxmaWxsIHRoZSByZXF1aXJlZCBsaWZldGltZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NzcKdXNlIHN0ZDo6c3luYzo6TXV0ZXg7CgpzdHJ1Y3QgTXlTdHJpbmc8J2E+IHsKICAgIGRhdGE6ICYnYSBzdHIsCn0KCmZuIGlfd2FudF9zdGF0aWNfY2xvc3VyZTxGPihhOiBGKQogICAgd2hlcmUgRjogRm4oKSArICdzdGF0aWMge30KCmZuIHByaW50X3N0cmluZzwnYT4oczogTXV0ZXg8TXlTdHJpbmc8J2E+PikgewoKICAgIGlfd2FudF9zdGF0aWNfY2xvc3VyZShtb3ZlIHx8IHsgICAgIC8vIGVycm9yOiB0aGlzIGNsb3N1cmUgaGFzIGxpZmV0aW1lICdhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgcmF0aGVyIHRoYW4gJ3N0YXRpYwogICAgICAgIHByaW50bG4hKCJ7fSIsIHMubG9jaygpLnVud3JhcCgpLmRhdGEpOwogICAgfSk7Cn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIHRoZSBjbG9zdXJlIGRvZXMgbm90IHNhdGlzZnkgdGhlIGAnc3RhdGljYCBsaWZldGltZSBjb25zdHJhaW50LgpUbyBmaXggdGhpcyBlcnJvciwgeW91IG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBsaWZldGltZSBvZiB0aGUgdHlwZS4gSGVyZSwgd2UKY2FuIGZpeCB0aGlzIHByb2JsZW0gYnkgZ2l2aW5nIGBzYCBhIHN0YXRpYyBsaWZldGltZToKCmBgYAp1c2Ugc3RkOjpzeW5jOjpNdXRleDsKCnN0cnVjdCBNeVN0cmluZzwnYT4gewogICAgZGF0YTogJidhIHN0ciwKfQoKZm4gaV93YW50X3N0YXRpY19jbG9zdXJlPEY+KGE6IEYpCiAgICB3aGVyZSBGOiBGbigpICsgJ3N0YXRpYyB7fQoKZm4gcHJpbnRfc3RyaW5nKHM6IE11dGV4PE15U3RyaW5nPCdzdGF0aWM+PikgewoKICAgIGlfd2FudF9zdGF0aWNfY2xvc3VyZShtb3ZlIHx8IHsgICAgIC8vIG9rIQogICAgICAgIHByaW50bG4hKCJ7fSIsIHMubG9jaygpLnVud3JhcCgpLmRhdGEpOwogICAgfSk7Cn0KYGBgCkUwNDc4QSBsaWZldGltZSBib3VuZCB3YXMgbm90IHNhdGlzZmllZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NzgKLy8gQ2hlY2sgdGhhdCB0aGUgZXhwbGljaXQgbGlmZXRpbWUgYm91bmQgKGAnU25vd1doaXRlYCwgaW4gdGhpcyBleGFtcGxlKSBtdXN0Ci8vIG91dGxpdmUgYWxsIHRoZSBzdXBlcmJvdW5kcyBmcm9tIHRoZSB0cmFpdCAoYCdraXNzYCwgaW4gdGhpcyBleGFtcGxlKS4KCnRyYWl0IFdlZGRpbmc8J3Q+OiAndCB7IH0KCnN0cnVjdCBQcmluY2U8J2tpc3MsICdTbm93V2hpdGU+IHsKICAgIGNoaWxkOiBCb3g8V2VkZGluZzwna2lzcz4gKyAnU25vd1doaXRlPiwKICAgIC8vIGVycm9yOiBsaWZldGltZSBib3VuZCBub3Qgc2F0aXNmaWVkCn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIHRoZSBgJ1Nub3dXaGl0ZWAgbGlmZXRpbWUgaXMgc3VwcG9zZWQgdG8gb3V0bGl2ZSB0aGUgYCdraXNzYApsaWZldGltZSBidXQgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBgUHJpbmNlYCBzdHJ1Y3QgZG9lc24ndCBlbmZvcmNlIGl0LiBUbyBmaXgKdGhpcyBpc3N1ZSwgeW91IG5lZWQgdG8gc3BlY2lmeSBpdDoKCmBgYAp0cmFpdCBXZWRkaW5nPCd0PjogJ3QgeyB9CgpzdHJ1Y3QgUHJpbmNlPCdraXNzLCAnU25vd1doaXRlOiAna2lzcz4geyAvLyBZb3Ugc2F5IGhlcmUgdGhhdCAnU25vd1doaXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11c3QgbGl2ZSBsb25nZXIgdGhhbiAna2lzcy4KICAgIGNoaWxkOiBCb3g8V2VkZGluZzwna2lzcz4gKyAnU25vd1doaXRlPiwgLy8gQW5kIG5vdyBpdCdzIGFsbCBnb29kIQp9CmBgYApFMDQ5MUEgcmVmZXJlbmNlIGhhcyBhIGxvbmdlciBsaWZldGltZSB0aGFuIHRoZSBkYXRhIGl0IHJlZmVyZW5jZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDkxCnN0cnVjdCBGb288J2E+IHsKICAgIHg6IGZuKCYnYSBpMzIpLAp9Cgp0cmFpdCBUcmFpdDwnYSwgJ2I+IHsKICAgIHR5cGUgT3V0Owp9CgppbXBsPCdhLCAnYj4gVHJhaXQ8J2EsICdiPiBmb3IgdXNpemUgewogICAgdHlwZSBPdXQgPSAmJ2EgRm9vPCdiPjsgLy8gZXJyb3IhCn0KYGBgCgpIZXJlLCB0aGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBjb21waWxlciBjYW5ub3QgYmUgc3VyZSB0aGF0IHRoZSBgJ2JgIGxpZmV0aW1lCndpbGwgbGl2ZSBsb25nZXIgdGhhbiBgJ2FgLCB3aGljaCBzaG91bGQgYmUgbWFuZGF0b3J5IGluIG9yZGVyIHRvIGJlIHN1cmUgdGhhdApgVHJhaXQ6Ok91dGAgd2lsbCBhbHdheXMgaGF2ZSBhIHJlZmVyZW5jZSBwb2ludGluZyB0byBhbiBleGlzdGluZyB0eXBlLiBTbyBpbgp0aGlzIGNhc2UsIHdlIGp1c3QgbmVlZCB0byB0ZWxsIHRoZSBjb21waWxlciB0aGFuIGAnYmAgbXVzdCBvdXRsaXZlIGAnYWA6CgpgYGAKc3RydWN0IEZvbzwnYT4gewogICAgeDogZm4oJidhIGkzMiksCn0KCnRyYWl0IFRyYWl0PCdhLCAnYj4gewogICAgdHlwZSBPdXQ7Cn0KCmltcGw8J2EsICdiOiAnYT4gVHJhaXQ8J2EsICdiPiBmb3IgdXNpemUgeyAvLyB3ZSBhZGRlZCB0aGUgbGlmZXRpbWUgZW5mb3JjZW1lbnQKICAgIHR5cGUgT3V0ID0gJidhIEZvbzwnYj47IC8vIGl0IG5vdyB3b3JrcyEKfQpgYGAKRTA0OTJBIGJvcnJvdyBvZiBhIGNvbnN0YW50IGNvbnRhaW5pbmcgaW50ZXJpb3IgbXV0YWJpbGl0eSB3YXMgYXR0ZW1wdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ5Mgp1c2Ugc3RkOjpzeW5jOjphdG9taWM6OkF0b21pY1VzaXplOwoKY29uc3QgQTogQXRvbWljVXNpemUgPSBBdG9taWNVc2l6ZTo6bmV3KDApOwpzdGF0aWMgQjogJidzdGF0aWMgQXRvbWljVXNpemUgPSAmQTsKLy8gZXJyb3I6IGNhbm5vdCBib3Jyb3cgYSBjb25zdGFudCB3aGljaCBtYXkgY29udGFpbiBpbnRlcmlvciBtdXRhYmlsaXR5LAovLyAgICAgICAgY3JlYXRlIGEgc3RhdGljIGluc3RlYWQKYGBgCgpBIGBjb25zdGAgcmVwcmVzZW50cyBhIGNvbnN0YW50IHZhbHVlIHRoYXQgc2hvdWxkIG5ldmVyIGNoYW5nZS4gSWYgb25lIHRha2VzCmEgYCZgIHJlZmVyZW5jZSB0byB0aGUgY29uc3RhbnQsIHRoZW4gb25lIGlzIHRha2luZyBhIHBvaW50ZXIgdG8gc29tZSBtZW1vcnkKbG9jYXRpb24gY29udGFpbmluZyB0aGUgdmFsdWUuIE5vcm1hbGx5IHRoaXMgaXMgcGVyZmVjdGx5IGZpbmU6IG1vc3QgdmFsdWVzCmNhbid0IGJlIGNoYW5nZWQgdmlhIGEgc2hhcmVkIGAmYCBwb2ludGVyLCBidXQgaW50ZXJpb3IgbXV0YWJpbGl0eSB3b3VsZCBhbGxvdwppdC4gVGhhdCBpcywgYSBjb25zdGFudCB2YWx1ZSBjb3VsZCBiZSBtdXRhdGVkLiBPbiB0aGUgb3RoZXIgaGFuZCwgYSBgc3RhdGljYCBpcwpleHBsaWNpdGx5IGEgc2luZ2xlIG1lbW9yeSBsb2NhdGlvbiwgd2hpY2ggY2FuIGJlIG11dGF0ZWQgYXQgd2lsbC4KClNvLCBpbiBvcmRlciB0byBzb2x2ZSB0aGlzIGVycm9yLCBlaXRoZXIgdXNlIHN0YXRpY3Mgd2hpY2ggYXJlIGBTeW5jYDoKCmBgYAp1c2Ugc3RkOjpzeW5jOjphdG9taWM6OkF0b21pY1VzaXplOwoKc3RhdGljIEE6IEF0b21pY1VzaXplID0gQXRvbWljVXNpemU6Om5ldygwKTsKc3RhdGljIEI6ICYnc3RhdGljIEF0b21pY1VzaXplID0gJkE7IC8vIG9rIQpgYGAKCllvdSBjYW4gYWxzbyBoYXZlIHRoaXMgZXJyb3Igd2hpbGUgdXNpbmcgYSBjZWxsIHR5cGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0OTIKdXNlIHN0ZDo6Y2VsbDo6Q2VsbDsKCmNvbnN0IEE6IENlbGw8dXNpemU+ID0gQ2VsbDo6bmV3KDEpOwpjb25zdCBCOiAmQ2VsbDx1c2l6ZT4gPSAmQTsKLy8gZXJyb3I6IGNhbm5vdCBib3Jyb3cgYSBjb25zdGFudCB3aGljaCBtYXkgY29udGFpbiBpbnRlcmlvciBtdXRhYmlsaXR5LAovLyAgICAgICAgY3JlYXRlIGEgc3RhdGljIGluc3RlYWQKCi8vIG9yOgpzdHJ1Y3QgQyB7IGE6IENlbGw8dXNpemU+IH0KCmNvbnN0IEQ6IEMgPSBDIHsgYTogQ2VsbDo6bmV3KDEpIH07CmNvbnN0IEU6ICZDZWxsPHVzaXplPiA9ICZELmE7IC8vIGVycm9yCgovLyBvcjoKY29uc3QgRjogJkMgPSAmRDsgLy8gZXJyb3IKYGBgCgpUaGlzIGlzIGJlY2F1c2UgY2VsbCB0eXBlcyBkbyBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCB0aHJlYWQtc2FmZS4gRHVlIHRvIHRoaXMsCnRoZXkgZG9uJ3QgaW1wbGVtZW50IFN5bmMgYW5kIHRodXMgY2FuJ3QgYmUgcGxhY2VkIGluIHN0YXRpY3MuCgpIb3dldmVyLCBpZiB5b3Ugc3RpbGwgd2lzaCB0byB1c2UgdGhlc2UgdHlwZXMsIHlvdSBjYW4gYWNoaWV2ZSB0aGlzIGJ5IGFuIHVuc2FmZQp3cmFwcGVyOgoKYGBgCnVzZSBzdGQ6OmNlbGw6OkNlbGw7CnVzZSBzdGQ6Om1hcmtlcjo6U3luYzsKCnN0cnVjdCBOb3RUaHJlYWRTYWZlPFQ+IHsKICAgIHZhbHVlOiBDZWxsPFQ+LAp9Cgp1bnNhZmUgaW1wbDxUPiBTeW5jIGZvciBOb3RUaHJlYWRTYWZlPFQ+IHt9CgpzdGF0aWMgQTogTm90VGhyZWFkU2FmZTx1c2l6ZT4gPSBOb3RUaHJlYWRTYWZlIHsgdmFsdWUgOiBDZWxsOjpuZXcoMSkgfTsKc3RhdGljIEI6ICYnc3RhdGljIE5vdFRocmVhZFNhZmU8dXNpemU+ID0gJkE7IC8vIG9rIQpgYGAKClJlbWVtYmVyIHRoaXMgc29sdXRpb24gaXMgdW5zYWZlISBZb3Ugd2lsbCBoYXZlIHRvIGVuc3VyZSB0aGF0IGFjY2Vzc2VzIHRvIHRoZQpjZWxsIGFyZSBzeW5jaHJvbml6ZWQuCkUwNDkzQSB2YWx1ZSB3aXRoIGEgY3VzdG9tIGBEcm9wYCBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgZHJvcHBlZCBkdXJpbmcgY29uc3QtZXZhbC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0OTMKZW51bSBEcm9wVHlwZSB7CiAgICBBLAp9CgppbXBsIERyb3AgZm9yIERyb3BUeXBlIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CgpzdHJ1Y3QgRm9vIHsKICAgIGZpZWxkMTogRHJvcFR5cGUsCn0KCnN0YXRpYyBGT086IEZvbyA9IEZvbyB7IGZpZWxkMTogKERyb3BUeXBlOjpBLCBEcm9wVHlwZTo6QSkuMSB9OyAvLyBlcnJvciEKYGBgCgpUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgaWYgdGhlIGdpdmVuIHR5cGUgb3Igb25lIG9mIGl0cyBmaWVsZHMgaW1wbGVtZW50cyB0aGUKYERyb3BgIHRyYWl0LCB0aGlzIGBEcm9wYCBpbXBsZW1lbnRhdGlvbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGhpbiBhIGNvbnN0CmNvbnRleHQgc2luY2UgaXQgbWF5IHJ1biBhcmJpdHJhcnksIG5vbi1jb25zdC1jaGVja2VkIGNvZGUuIFRvIHByZXZlbnQgdGhpcwppc3N1ZSwgZW5zdXJlIGFsbCB2YWx1ZXMgd2l0aCBjdXN0b20gYSBjdXN0b20gYERyb3BgIGltcGxlbWVudGF0aW9uIGVzY2FwZSB0aGUKaW5pdGlhbGl6ZXIuCgpgYGAKZW51bSBEcm9wVHlwZSB7CiAgICBBLAp9CgppbXBsIERyb3AgZm9yIERyb3BUeXBlIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CgpzdHJ1Y3QgRm9vIHsKICAgIGZpZWxkMTogRHJvcFR5cGUsCn0KCnN0YXRpYyBGT086IEZvbyA9IEZvbyB7IGZpZWxkMTogRHJvcFR5cGU6OkEgfTsgLy8gV2UgaW5pdGlhbGl6ZSBhbGwgZmllbGRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnkgaGFuZC4KYGBgCkUwNDk1QSBsaWZldGltZSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBpbiB0aGUgZ2l2ZW4gc2l0dWF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ5NQpmbiB0cmFuc211dGVfbGlmZXRpbWU8J2EsICdiLCBUPih0OiAmJ2EgKFQsKSkgLT4gJidiIFQgewogICAgbWF0Y2ggKCZ0LCkgeyAvLyBlcnJvciEKICAgICAgICAoKHUsKSwpID0+IHUsCiAgICB9Cn0KCmxldCB5ID0gQm94OjpuZXcoKDQyLCkpOwpsZXQgeCA9IHRyYW5zbXV0ZV9saWZldGltZSgmeSk7CmBgYAoKSW4gdGhpcyBjb2RlLCB5b3UgaGF2ZSB0d28gd2F5cyB0byBzb2x2ZSB0aGlzIGlzc3VlOgogMS4gRW5mb3JjZSB0aGF0IGAnYWAgbGl2ZXMgYXQgbGVhc3QgYXMgbG9uZyBhcyBgJ2JgLgogMi4gVXNlIHRoZSBzYW1lIGxpZmV0aW1lIHJlcXVpcmVtZW50IGZvciBib3RoIGlucHV0IGFuZCBvdXRwdXQgdmFsdWVzLgoKU28gZm9yIHRoZSBmaXJzdCBzb2x1dGlvbiwgeW91IGNhbiBkbyBpdCBieSByZXBsYWNpbmcgYCdhYCB3aXRoIGAnYTogJ2JgOgoKYGBgCmZuIHRyYW5zbXV0ZV9saWZldGltZTwnYTogJ2IsICdiLCBUPih0OiAmJ2EgKFQsKSkgLT4gJidiIFQgewogICAgbWF0Y2ggKCZ0LCkgeyAvLyBvayEKICAgICAgICAoKHUsKSwpID0+IHUsCiAgICB9Cn0KYGBgCgpJbiB0aGUgc2Vjb25kIHlvdSBjYW4gZG8gaXQgYnkgc2ltcGx5IHJlbW92aW5nIGAnYmAgc28gdGhleSBib3RoIHVzZSBgJ2FgOgoKYGBgCmZuIHRyYW5zbXV0ZV9saWZldGltZTwnYSwgVD4odDogJidhIChULCkpIC0+ICYnYSBUIHsKICAgIG1hdGNoICgmdCwpIHsgLy8gb2shCiAgICAgICAgKCh1LCksKSA9PiB1LAogICAgfQp9CmBgYApFMDQ5NkEgbGlmZXRpbWUgbmFtZSBpcyBzaGFkb3dpbmcgYW5vdGhlciBsaWZldGltZSBuYW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ5NgpzdHJ1Y3QgRm9vPCdhPiB7CiAgICBhOiAmJ2EgaTMyLAp9CgppbXBsPCdhPiBGb288J2E+IHsKICAgIGZuIGY8J2E+KHg6ICYnYSBpMzIpIHsgLy8gZXJyb3I6IGxpZmV0aW1lIG5hbWUgYCdhYCBzaGFkb3dzIGEgbGlmZXRpbWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIG5hbWUgdGhhdCBpcyBhbHJlYWR5IGluIHNjb3BlCiAgICB9Cn0KYGBgCgpQbGVhc2UgY2hhbmdlIHRoZSBuYW1lIG9mIG9uZSBvZiB0aGUgbGlmZXRpbWVzIHRvIHJlbW92ZSB0aGlzIGVycm9yLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBGb288J2E+IHsKICAgIGE6ICYnYSBpMzIsCn0KCmltcGw8J2E+IEZvbzwnYT4gewogICAgZm4gZjwnYj4oeDogJidiIGkzMikgeyAvLyBvayEKICAgIH0KfQoKZm4gbWFpbigpIHsKfQpgYGAKRTA0OTcjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpBIHN0YWJpbGl0eSBhdHRyaWJ1dGUgd2FzIHVzZWQgb3V0c2lkZSBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKI1tzdGFibGVdIC8vIGVycm9yOiBzdGFiaWxpdHkgYXR0cmlidXRlcyBtYXkgbm90IGJlIHVzZWQgb3V0c2lkZSBvZiB0aGUKICAgICAgICAgIC8vICAgICAgICBzdGFuZGFyZCBsaWJyYXJ5CmZuIGZvbygpIHt9CmBgYAoKSXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSBzdGFiaWxpdHkgYXR0cmlidXRlcyBvdXRzaWRlIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgpBbHNvLCBmb3Igbm93LCBpdCBpcyBub3QgcG9zc2libGUgdG8gd3JpdGUgZGVwcmVjYXRpb24gbWVzc2FnZXMgZWl0aGVyLgpFMDQ5OUEgdmFyaWFibGUgd2FzIGJvcnJvd2VkIGFzIG11dGFibGUgbW9yZSB0aGFuIG9uY2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDk5CmxldCBtdXQgaSA9IDA7CmxldCBtdXQgeCA9ICZtdXQgaTsKbGV0IG11dCBhID0gJm11dCBpOwp4OwovLyBlcnJvcjogY2Fubm90IGJvcnJvdyBgaWAgYXMgbXV0YWJsZSBtb3JlIHRoYW4gb25jZSBhdCBhIHRpbWUKYGBgCgpQbGVhc2Ugbm90ZSB0aGF0IGluIFJ1c3QsIHlvdSBjYW4gZWl0aGVyIGhhdmUgbWFueSBpbW11dGFibGUgcmVmZXJlbmNlcywgb3Igb25lCm11dGFibGUgcmVmZXJlbmNlLiBGb3IgbW9yZSBkZXRhaWxzIHlvdSBtYXkgd2FudCB0byByZWFkIHRoZQpbUmVmZXJlbmNlcyAmIEJvcnJvd2luZ11bcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXSBzZWN0aW9uIG9mIHRoZSBCb29rLgoKW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDA0LTAyLXJlZmVyZW5jZXMtYW5kLWJvcnJvd2luZy5odG1sCgpFeGFtcGxlOgoKYGBgCmxldCBtdXQgaSA9IDA7CmxldCBtdXQgeCA9ICZtdXQgaTsgLy8gb2shCgovLyBvcjoKbGV0IG11dCBpID0gMDsKbGV0IGEgPSAmaTsgLy8gb2shCmxldCBiID0gJmk7IC8vIHN0aWxsIG9rIQpsZXQgYyA9ICZpOyAvLyBzdGlsbCBvayEKYjsKYTsKYGBgCkUwNTAwQSBib3Jyb3dlZCB2YXJpYWJsZSB3YXMgdXNlZCBieSBhIGNsb3N1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTAwCmZuIHlvdV9rbm93X25vdGhpbmcoam9uX3Nub3c6ICZtdXQgaTMyKSB7CiAgICBsZXQgbmlnaHRzX3dhdGNoID0gJmpvbl9zbm93OwogICAgbGV0IHN0YXJrcyA9IHx8IHsKICAgICAgICAqam9uX3Nub3cgPSAzOyAvLyBlcnJvcjogY2xvc3VyZSByZXF1aXJlcyB1bmlxdWUgYWNjZXNzIHRvIGBqb25fc25vd2AKICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYnV0IGl0IGlzIGFscmVhZHkgYm9ycm93ZWQKICAgIH07CiAgICBwcmludGxuISgie30iLCBuaWdodHNfd2F0Y2gpOwp9CmBgYAoKSW4gaGVyZSwgYGpvbl9zbm93YCBpcyBhbHJlYWR5IGJvcnJvd2VkIGJ5IHRoZSBgbmlnaHRzX3dhdGNoYCByZWZlcmVuY2UsIHNvIGl0CmNhbm5vdCBiZSBib3Jyb3dlZCBieSB0aGUgYHN0YXJrc2AgY2xvc3VyZSBhdCB0aGUgc2FtZSB0aW1lLiBUbyBmaXggdGhpcyBpc3N1ZSwKeW91IGNhbiBjcmVhdGUgdGhlIGNsb3N1cmUgYWZ0ZXIgdGhlIGJvcnJvdyBoYXMgZW5kZWQ6CgpgYGAKZm4geW91X2tub3dfbm90aGluZyhqb25fc25vdzogJm11dCBpMzIpIHsKICAgIGxldCBuaWdodHNfd2F0Y2ggPSAmam9uX3Nub3c7CiAgICBwcmludGxuISgie30iLCBuaWdodHNfd2F0Y2gpOwogICAgbGV0IHN0YXJrcyA9IHx8IHsKICAgICAgICAqam9uX3Nub3cgPSAzOwogICAgfTsKfQpgYGAKCk9yLCBpZiB0aGUgdHlwZSBpbXBsZW1lbnRzIHRoZSBgQ2xvbmVgIHRyYWl0LCB5b3UgY2FuIGNsb25lIGl0IGJldHdlZW4KY2xvc3VyZXM6CgpgYGAKZm4geW91X2tub3dfbm90aGluZyhqb25fc25vdzogJm11dCBpMzIpIHsKICAgIGxldCBtdXQgam9uX2NvcHkgPSBqb25fc25vdy5jbG9uZSgpOwogICAgbGV0IHN0YXJrcyA9IHx8IHsKICAgICAgICAqam9uX3Nub3cgPSAzOwogICAgfTsKICAgIHByaW50bG4hKCJ7fSIsIGpvbl9jb3B5KTsKfQpgYGAKRTA1MDFBIG11dGFibGUgdmFyaWFibGUgaXMgdXNlZCBidXQgaXQgaXMgYWxyZWFkeSBjYXB0dXJlZCBieSBhIGNsb3N1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTAxCmZuIGluc2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7CiAgICAvLyBBY3Rpb25zIHdoaWNoIHJlcXVpcmUgdW5pcXVlIGFjY2Vzcwp9CgpmbiBvdXRzaWRlX2Nsb3N1cmUoeDogJm11dCBpMzIpIHsKICAgIC8vIEFjdGlvbnMgd2hpY2ggcmVxdWlyZSB1bmlxdWUgYWNjZXNzCn0KCmZuIGZvbyhhOiAmbXV0IGkzMikgewogICAgbGV0IG11dCBiYXIgPSB8fCB7CiAgICAgICAgaW5zaWRlX2Nsb3N1cmUoYSkKICAgIH07CiAgICBvdXRzaWRlX2Nsb3N1cmUoYSk7IC8vIGVycm9yOiBjYW5ub3QgYm9ycm93IGAqYWAgYXMgbXV0YWJsZSBiZWNhdXNlIHByZXZpb3VzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjbG9zdXJlIHJlcXVpcmVzIHVuaXF1ZSBhY2Nlc3MuCiAgICBiYXIoKTsKfQpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgYSBtdXRhYmxlIHZhcmlhYmxlIGlzIHVzZWQgd2hpbGUgaXQgaXMgc3RpbGwgY2FwdHVyZWQKYnkgYSBjbG9zdXJlLiBCZWNhdXNlIHRoZSBjbG9zdXJlIGhhcyBib3Jyb3dlZCB0aGUgdmFyaWFibGUsIGl0IGlzIG5vdCBhdmFpbGFibGUKdW50aWwgdGhlIGNsb3N1cmUgZ29lcyBvdXQgb2Ygc2NvcGUuCgpOb3RlIHRoYXQgYSBjYXB0dXJlIHdpbGwgZWl0aGVyIG1vdmUgb3IgYm9ycm93IGEgdmFyaWFibGUsIGJ1dCBpbiB0aGlzCnNpdHVhdGlvbiwgdGhlIGNsb3N1cmUgaXMgYm9ycm93aW5nIHRoZSB2YXJpYWJsZS4gVGFrZSBhIGxvb2sgYXQgdGhlIGNoYXB0ZXIKb24gW0NhcHR1cmluZ11bY2FwdHVyaW5nXSBpbiBSdXN0IEJ5IEV4YW1wbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCgpbY2FwdHVyaW5nXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGFibGUvcnVzdC1ieS1leGFtcGxlL2ZuL2Nsb3N1cmVzL2NhcHR1cmUuaHRtbAoKVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBjYW4gZmluaXNoIHVzaW5nIHRoZSBjbG9zdXJlIGJlZm9yZSB1c2luZyB0aGUgY2FwdHVyZWQKdmFyaWFibGU6CgpgYGAKZm4gaW5zaWRlX2Nsb3N1cmUoeDogJm11dCBpMzIpIHt9CmZuIG91dHNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikge30KCmZuIGZvbyhhOiAmbXV0IGkzMikgewogICAgbGV0IG11dCBiYXIgPSB8fCB7CiAgICAgICAgaW5zaWRlX2Nsb3N1cmUoYSkKICAgIH07CiAgICBiYXIoKTsKICAgIC8vIGJvcnJvdyBvbiBgYWAgZW5kcy4KICAgIG91dHNpZGVfY2xvc3VyZShhKTsgLy8gb2shCn0KYGBgCgpPciB5b3UgY2FuIHBhc3MgdGhlIHZhcmlhYmxlIGFzIGEgcGFyYW1ldGVyIHRvIHRoZSBjbG9zdXJlOgoKYGBgCmZuIGluc2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7fQpmbiBvdXRzaWRlX2Nsb3N1cmUoeDogJm11dCBpMzIpIHt9CgpmbiBmb28oYTogJm11dCBpMzIpIHsKICAgIGxldCBtdXQgYmFyID0gfHM6ICZtdXQgaTMyfCB7CiAgICAgICAgaW5zaWRlX2Nsb3N1cmUocykKICAgIH07CiAgICBvdXRzaWRlX2Nsb3N1cmUoYSk7CiAgICBiYXIoYSk7Cn0KYGBgCgpJdCBtYXkgYmUgcG9zc2libGUgdG8gZGVmaW5lIHRoZSBjbG9zdXJlIGxhdGVyOgoKYGBgCmZuIGluc2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7fQpmbiBvdXRzaWRlX2Nsb3N1cmUoeDogJm11dCBpMzIpIHt9CgpmbiBmb28oYTogJm11dCBpMzIpIHsKICAgIG91dHNpZGVfY2xvc3VyZShhKTsKICAgIGxldCBtdXQgYmFyID0gfHwgewogICAgICAgIGluc2lkZV9jbG9zdXJlKGEpCiAgICB9OwogICAgYmFyKCk7Cn0KYGBgCkUwNTAyQSB2YXJpYWJsZSBhbHJlYWR5IGJvcnJvd2VkIGFzIGltbXV0YWJsZSB3YXMgYm9ycm93ZWQgYXMgbXV0YWJsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MDIKZm4gYmFyKHg6ICZtdXQgaTMyKSB7fQpmbiBmb28oYTogJm11dCBpMzIpIHsKICAgIGxldCB5ID0gJmE7IC8vIGEgaXMgYm9ycm93ZWQgYXMgaW1tdXRhYmxlLgogICAgYmFyKGEpOyAvLyBlcnJvcjogY2Fubm90IGJvcnJvdyBgKmFgIGFzIG11dGFibGUgYmVjYXVzZSBgYWAgaXMgYWxzbyBib3Jyb3dlZAogICAgICAgICAgICAvLyAgICAgICAgYXMgaW1tdXRhYmxlCiAgICBwcmludGxuISgie30iLCB5KTsKfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBlbnN1cmUgdGhhdCB5b3UgZG9uJ3QgaGF2ZSBhbnkgb3RoZXIgcmVmZXJlbmNlcyB0byB0aGUKdmFyaWFibGUgYmVmb3JlIHRyeWluZyB0byBhY2Nlc3MgaXQgbXV0YWJseToKCmBgYApmbiBiYXIoeDogJm11dCBpMzIpIHt9CmZuIGZvbyhhOiAmbXV0IGkzMikgewogICAgYmFyKGEpOwogICAgbGV0IHkgPSAmYTsgLy8gb2shCiAgICBwcmludGxuISgie30iLCB5KTsKfQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFJ1c3QncyBvd25lcnNoaXAgc3lzdGVtLCB0YWtlIGEgbG9vayBhdCB0aGUKW1JlZmVyZW5jZXMgJiBCb3Jyb3dpbmddW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ10gc2VjdGlvbiBvZiB0aGUgQm9vay4KCltyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gwNC0wMi1yZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmcuaHRtbApFMDUwM0EgdmFsdWUgd2FzIHVzZWQgYWZ0ZXIgaXQgd2FzIG11dGFibHkgYm9ycm93ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTAzCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHZhbHVlID0gMzsKICAgIC8vIENyZWF0ZSBhIG11dGFibGUgYm9ycm93IG9mIGB2YWx1ZWAuCiAgICBsZXQgYm9ycm93ID0gJm11dCB2YWx1ZTsKICAgIGxldCBfc3VtID0gdmFsdWUgKyAxOyAvLyBlcnJvcjogY2Fubm90IHVzZSBgdmFsdWVgIGJlY2F1c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgaXQgd2FzIG11dGFibHkgYm9ycm93ZWQKICAgIHByaW50bG4hKCJ7fSIsIGJvcnJvdyk7Cn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIGB2YWx1ZWAgaXMgbXV0YWJseSBib3Jyb3dlZCBieSBgYm9ycm93YCBhbmQgY2Fubm90IGJlCnVzZWQgdG8gY2FsY3VsYXRlIGBzdW1gLiBUaGlzIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHRoaXMgd291bGQgdmlvbGF0ZQpSdXN0J3MgbXV0YWJpbGl0eSBydWxlcy4KCllvdSBjYW4gZml4IHRoaXMgZXJyb3IgYnkgZmluaXNoaW5nIHVzaW5nIHRoZSBib3Jyb3cgYmVmb3JlIHRoZSBuZXh0IHVzZSBvZgp0aGUgdmFsdWU6CgpgYGAKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgdmFsdWUgPSAzOwogICAgbGV0IGJvcnJvdyA9ICZtdXQgdmFsdWU7CiAgICBwcmludGxuISgie30iLCBib3Jyb3cpOwogICAgLy8gVGhlIGJsb2NrIGhhcyBlbmRlZCBhbmQgd2l0aCBpdCB0aGUgYm9ycm93LgogICAgLy8gWW91IGNhbiBub3cgdXNlIGB2YWx1ZWAgYWdhaW4uCiAgICBsZXQgX3N1bSA9IHZhbHVlICsgMTsKfQpgYGAKCk9yIGJ5IGNsb25pbmcgYHZhbHVlYCBiZWZvcmUgYm9ycm93aW5nIGl0OgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHZhbHVlID0gMzsKICAgIC8vIFdlIGNsb25lIGB2YWx1ZWAsIGNyZWF0aW5nIGEgY29weS4KICAgIGxldCB2YWx1ZV9jbG9uZWQgPSB2YWx1ZS5jbG9uZSgpOwogICAgLy8gVGhlIG11dGFibGUgYm9ycm93IGlzIGEgcmVmZXJlbmNlIHRvIGB2YWx1ZWAgYW5kCiAgICAvLyBub3QgdG8gYHZhbHVlX2Nsb25lZGAuLi4KICAgIGxldCBib3Jyb3cgPSAmbXV0IHZhbHVlOwogICAgLy8gLi4uIHdoaWNoIG1lYW5zIHdlIGNhbiBzdGlsbCB1c2UgYHZhbHVlX2Nsb25lZGAsCiAgICBsZXQgX3N1bSA9IHZhbHVlX2Nsb25lZCArIDE7CiAgICAvLyBldmVuIHRob3VnaCB0aGUgYm9ycm93IG9ubHkgZW5kcyBoZXJlLgogICAgcHJpbnRsbiEoInt9IiwgYm9ycm93KTsKfQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFJ1c3QncyBvd25lcnNoaXAgc3lzdGVtLCB0YWtlIGEgbG9vayBhdCB0aGUKW1JlZmVyZW5jZXMgJiBCb3Jyb3dpbmddW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ10gc2VjdGlvbiBvZiB0aGUgQm9vay4KCltyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gwNC0wMi1yZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmcuaHRtbApFMDUwNCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIG1vdmUgYSBib3Jyb3dlZCB2YXJpYWJsZSBpbnRvIGEKY2xvc3VyZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdTgsCn0KCmZuIG1haW4oKSB7CiAgICBsZXQgZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDUgfTsKICAgIGxldCBmYW5jeV9yZWYgPSAmZmFuY3lfbnVtOwoKICAgIGxldCB4ID0gbW92ZSB8fCB7CiAgICAgICAgcHJpbnRsbiEoImNoaWxkIGZ1bmN0aW9uOiB7fSIsIGZhbmN5X251bS5udW0pOwogICAgICAgIC8vIGVycm9yOiBjYW5ub3QgbW92ZSBgZmFuY3lfbnVtYCBpbnRvIGNsb3N1cmUgYmVjYXVzZSBpdCBpcyBib3Jyb3dlZAogICAgfTsKCiAgICB4KCk7CiAgICBwcmludGxuISgibWFpbiBmdW5jdGlvbjoge30iLCBmYW5jeV9yZWYubnVtKTsKfQpgYGAKCkhlcmUsIGBmYW5jeV9udW1gIGlzIGJvcnJvd2VkIGJ5IGBmYW5jeV9yZWZgIGFuZCBzbyBjYW5ub3QgYmUgbW92ZWQgaW50bwp0aGUgY2xvc3VyZSBgeGAuIFRoZXJlIGlzIG5vIHdheSB0byBtb3ZlIGEgdmFsdWUgaW50byBhIGNsb3N1cmUgd2hpbGUgaXQgaXMKYm9ycm93ZWQsIGFzIHRoYXQgd291bGQgaW52YWxpZGF0ZSB0aGUgYm9ycm93LgoKSWYgdGhlIGNsb3N1cmUgY2FuJ3Qgb3V0bGl2ZSB0aGUgdmFsdWUgYmVpbmcgbW92ZWQsIHRyeSB1c2luZyBhIHJlZmVyZW5jZQpyYXRoZXIgdGhhbiBtb3Zpbmc6CgpgYGAKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdTgsCn0KCmZuIG1haW4oKSB7CiAgICBsZXQgZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDUgfTsKICAgIGxldCBmYW5jeV9yZWYgPSAmZmFuY3lfbnVtOwoKICAgIGxldCB4ID0gbW92ZSB8fCB7CiAgICAgICAgLy8gZmFuY3lfcmVmIGlzIHVzYWJsZSBoZXJlIGJlY2F1c2UgaXQgZG9lc24ndCBtb3ZlIGBmYW5jeV9udW1gCiAgICAgICAgcHJpbnRsbiEoImNoaWxkIGZ1bmN0aW9uOiB7fSIsIGZhbmN5X3JlZi5udW0pOwogICAgfTsKCiAgICB4KCk7CgogICAgcHJpbnRsbiEoIm1haW4gZnVuY3Rpb246IHt9IiwgZmFuY3lfbnVtLm51bSk7Cn0KYGBgCgpJZiB0aGUgdmFsdWUgaGFzIHRvIGJlIGJvcnJvd2VkIGFuZCB0aGVuIG1vdmVkLCB0cnkgbGltaXRpbmcgdGhlIGxpZmV0aW1lIG9mCnRoZSBib3Jyb3cgdXNpbmcgYSBzY29wZWQgYmxvY2s6CgpgYGAKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdTgsCn0KCmZuIG1haW4oKSB7CiAgICBsZXQgZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDUgfTsKCiAgICB7CiAgICAgICAgbGV0IGZhbmN5X3JlZiA9ICZmYW5jeV9udW07CiAgICAgICAgcHJpbnRsbiEoIm1haW4gZnVuY3Rpb246IHt9IiwgZmFuY3lfcmVmLm51bSk7CiAgICAgICAgLy8gYGZhbmN5X3JlZmAgZ29lcyBvdXQgb2Ygc2NvcGUgaGVyZQogICAgfQoKICAgIGxldCB4ID0gbW92ZSB8fCB7CiAgICAgICAgLy8gYGZhbmN5X251bWAgY2FuIGJlIG1vdmVkIG5vdyAobm8gbW9yZSByZWZlcmVuY2VzIGV4aXN0KQogICAgICAgIHByaW50bG4hKCJjaGlsZCBmdW5jdGlvbjoge30iLCBmYW5jeV9udW0ubnVtKTsKICAgIH07CgogICAgeCgpOwp9CmBgYAoKSWYgdGhlIGxpZmV0aW1lIG9mIGEgcmVmZXJlbmNlIGlzbid0IGVub3VnaCwgc3VjaCBhcyBpbiB0aGUgY2FzZSBvZiB0aHJlYWRpbmcsCmNvbnNpZGVyIHVzaW5nIGFuIGBBcmNgIHRvIGNyZWF0ZSBhIHJlZmVyZW5jZS1jb3VudGVkIHZhbHVlOgoKYGBgCnVzZSBzdGQ6OnN5bmM6OkFyYzsKdXNlIHN0ZDo6dGhyZWFkOwoKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdTgsCn0KCmZuIG1haW4oKSB7CiAgICBsZXQgZmFuY3lfcmVmMSA9IEFyYzo6bmV3KEZhbmN5TnVtIHsgbnVtOiA1IH0pOwogICAgbGV0IGZhbmN5X3JlZjIgPSBmYW5jeV9yZWYxLmNsb25lKCk7CgogICAgbGV0IHggPSB0aHJlYWQ6OnNwYXduKG1vdmUgfHwgewogICAgICAgIC8vIGBmYW5jeV9yZWYxYCBjYW4gYmUgbW92ZWQgYW5kIGhhcyBhIGAnc3RhdGljYCBsaWZldGltZQogICAgICAgIHByaW50bG4hKCJjaGlsZCB0aHJlYWQ6IHt9IiwgZmFuY3lfcmVmMS5udW0pOwogICAgfSk7CgogICAgeC5qb2luKCkuZXhwZWN0KCJjaGlsZCB0aHJlYWQgc2hvdWxkIGZpbmlzaCIpOwogICAgcHJpbnRsbiEoIm1haW4gdGhyZWFkOiB7fSIsIGZhbmN5X3JlZjIubnVtKTsKfQpgYGAKRTA1MDVBIHZhbHVlIHdhcyBtb3ZlZCBvdXQgd2hpbGUgaXQgd2FzIHN0aWxsIGJvcnJvd2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwNQpzdHJ1Y3QgVmFsdWUge30KCmZuIGJvcnJvdyh2YWw6ICZWYWx1ZSkge30KCmZuIGVhdCh2YWw6IFZhbHVlKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gVmFsdWV7fTsKICAgIGxldCBfcmVmX3RvX3ZhbDogJlZhbHVlID0gJng7CiAgICBlYXQoeCk7CiAgICBib3Jyb3coX3JlZl90b192YWwpOwp9CmBgYAoKSGVyZSwgdGhlIGZ1bmN0aW9uIGBlYXRgIHRha2VzIG93bmVyc2hpcCBvZiBgeGAuIEhvd2V2ZXIsCmB4YCBjYW5ub3QgYmUgbW92ZWQgYmVjYXVzZSB0aGUgYm9ycm93IHRvIGBfcmVmX3RvX3ZhbGAKbmVlZHMgdG8gbGFzdCB0aWxsIHRoZSBmdW5jdGlvbiBgYm9ycm93YC4KVG8gZml4IHRoYXQgeW91IGNhbiBkbyBhIGZldyBkaWZmZXJlbnQgdGhpbmdzOgoKKiBUcnkgdG8gYXZvaWQgbW92aW5nIHRoZSB2YXJpYWJsZS4KKiBSZWxlYXNlIGJvcnJvdyBiZWZvcmUgbW92ZS4KKiBJbXBsZW1lbnQgdGhlIGBDb3B5YCB0cmFpdCBvbiB0aGUgdHlwZS4KCkV4YW1wbGVzOgoKYGBgCnN0cnVjdCBWYWx1ZSB7fQoKZm4gYm9ycm93KHZhbDogJlZhbHVlKSB7fQoKZm4gZWF0KHZhbDogJlZhbHVlKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gVmFsdWV7fTsKCiAgICBsZXQgcmVmX3RvX3ZhbDogJlZhbHVlID0gJng7CiAgICBlYXQoJngpOyAvLyBwYXNzIGJ5IHJlZmVyZW5jZSwgaWYgaXQncyBwb3NzaWJsZQogICAgYm9ycm93KHJlZl90b192YWwpOwp9CmBgYAoKT3I6CgpgYGAKc3RydWN0IFZhbHVlIHt9CgpmbiBib3Jyb3codmFsOiAmVmFsdWUpIHt9CgpmbiBlYXQodmFsOiBWYWx1ZSkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFZhbHVle307CgogICAgbGV0IHJlZl90b192YWw6ICZWYWx1ZSA9ICZ4OwogICAgYm9ycm93KHJlZl90b192YWwpOwogICAgLy8gcmVmX3RvX3ZhbCBpcyBubyBsb25nZXIgdXNlZC4KICAgIGVhdCh4KTsKfQpgYGAKCk9yOgoKYGBgCiNbZGVyaXZlKENsb25lLCBDb3B5KV0gLy8gaW1wbGVtZW50IENvcHkgdHJhaXQKc3RydWN0IFZhbHVlIHt9CgpmbiBib3Jyb3codmFsOiAmVmFsdWUpIHt9CgpmbiBlYXQodmFsOiBWYWx1ZSkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFZhbHVle307CiAgICBsZXQgcmVmX3RvX3ZhbDogJlZhbHVlID0gJng7CiAgICBlYXQoeCk7IC8vIGl0IHdpbGwgYmUgY29waWVkIGhlcmUuCiAgICBib3Jyb3cocmVmX3RvX3ZhbCk7Cn0KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBSdXN0J3Mgb3duZXJzaGlwIHN5c3RlbSwgdGFrZSBhIGxvb2sgYXQgdGhlCltSZWZlcmVuY2VzICYgQm9ycm93aW5nXVtyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddIHNlY3Rpb24gb2YgdGhlIEJvb2suCgpbcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDQtMDItcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nLmh0bWwKRTA1MDZBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIGFzc2lnbiB0byBhIGJvcnJvd2VkIHZhbHVlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwNgpzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKbGV0IG11dCBmYW5jeV9udW0gPSBGYW5jeU51bSB7IG51bTogNSB9OwpsZXQgZmFuY3lfcmVmID0gJmZhbmN5X251bTsKZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDYgfTsKLy8gZXJyb3I6IGNhbm5vdCBhc3NpZ24gdG8gYGZhbmN5X251bWAgYmVjYXVzZSBpdCBpcyBib3Jyb3dlZAoKcHJpbnRsbiEoIk51bToge30sIFJlZjoge30iLCBmYW5jeV9udW0ubnVtLCBmYW5jeV9yZWYubnVtKTsKYGBgCgpCZWNhdXNlIGBmYW5jeV9yZWZgIHN0aWxsIGhvbGRzIGEgcmVmZXJlbmNlIHRvIGBmYW5jeV9udW1gLCBgZmFuY3lfbnVtYCBjYW4ndApiZSBhc3NpZ25lZCB0byBhIG5ldyB2YWx1ZSBhcyBpdCB3b3VsZCBpbnZhbGlkYXRlIHRoZSByZWZlcmVuY2UuCgpBbHRlcm5hdGl2ZWx5LCB3ZSBjYW4gbW92ZSBvdXQgb2YgYGZhbmN5X251bWAgaW50byBhIHNlY29uZCBgZmFuY3lfbnVtYDoKCmBgYApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKbGV0IG11dCBmYW5jeV9udW0gPSBGYW5jeU51bSB7IG51bTogNSB9OwpsZXQgbW92ZWRfbnVtID0gZmFuY3lfbnVtOwpmYW5jeV9udW0gPSBGYW5jeU51bSB7IG51bTogNiB9OwoKcHJpbnRsbiEoIk51bToge30sIE1vdmVkIG51bToge30iLCBmYW5jeV9udW0ubnVtLCBtb3ZlZF9udW0ubnVtKTsKYGBgCgpJZiB0aGUgdmFsdWUgaGFzIHRvIGJlIGJvcnJvd2VkLCB0cnkgbGltaXRpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZSBib3Jyb3cgdXNpbmcKYSBzY29wZWQgYmxvY2s6CgpgYGAKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdTgsCn0KCmxldCBtdXQgZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDUgfTsKCnsKICAgIGxldCBmYW5jeV9yZWYgPSAmZmFuY3lfbnVtOwogICAgcHJpbnRsbiEoIlJlZjoge30iLCBmYW5jeV9yZWYubnVtKTsKfQoKLy8gV29ya3MgYmVjYXVzZSBgZmFuY3lfcmVmYCBpcyBubyBsb25nZXIgaW4gc2NvcGUKZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDYgfTsKcHJpbnRsbiEoIk51bToge30iLCBmYW5jeV9udW0ubnVtKTsKYGBgCgpPciBieSBtb3ZpbmcgdGhlIHJlZmVyZW5jZSBpbnRvIGEgZnVuY3Rpb246CgpgYGAKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdTgsCn0KCmZuIHByaW50X2ZhbmN5X3JlZihmYW5jeV9yZWY6ICZGYW5jeU51bSl7CiAgICBwcmludGxuISgiUmVmOiB7fSIsIGZhbmN5X3JlZi5udW0pOwp9CgpsZXQgbXV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07CgpwcmludF9mYW5jeV9yZWYoJmZhbmN5X251bSk7CgovLyBXb3JrcyBiZWNhdXNlIGZ1bmN0aW9uIGJvcnJvdyBoYXMgZW5kZWQKZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDYgfTsKcHJpbnRsbiEoIk51bToge30iLCBmYW5jeV9udW0ubnVtKTsKYGBgCkUwNTA3QSBib3Jyb3dlZCB2YWx1ZSB3YXMgbW92ZWQgb3V0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwNwp1c2Ugc3RkOjpjZWxsOjpSZWZDZWxsOwoKc3RydWN0IFRoZURhcmtLbmlnaHQ7CgppbXBsIFRoZURhcmtLbmlnaHQgewogICAgZm4gbm90aGluZ19pc190cnVlKHNlbGYpIHt9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFJlZkNlbGw6Om5ldyhUaGVEYXJrS25pZ2h0KTsKCiAgICB4LmJvcnJvdygpLm5vdGhpbmdfaXNfdHJ1ZSgpOyAvLyBlcnJvcjogY2Fubm90IG1vdmUgb3V0IG9mIGJvcnJvd2VkIGNvbnRlbnQKfQpgYGAKCkhlcmUsIHRoZSBgbm90aGluZ19pc190cnVlYCBtZXRob2QgdGFrZXMgdGhlIG93bmVyc2hpcCBvZiBgc2VsZmAuIEhvd2V2ZXIsCmBzZWxmYCBjYW5ub3QgYmUgbW92ZWQgYmVjYXVzZSBgLmJvcnJvdygpYCBvbmx5IHByb3ZpZGVzIGFuIGAmVGhlRGFya0tuaWdodGAsCndoaWNoIGlzIGEgYm9ycm93IG9mIHRoZSBjb250ZW50IG93bmVkIGJ5IHRoZSBgUmVmQ2VsbGAuIFRvIGZpeCB0aGlzIGVycm9yLAp5b3UgaGF2ZSB0aHJlZSBjaG9pY2VzOgoKKiBUcnkgdG8gYXZvaWQgbW92aW5nIHRoZSB2YXJpYWJsZS4KKiBTb21laG93IHJlY2xhaW0gdGhlIG93bmVyc2hpcC4KKiBJbXBsZW1lbnQgdGhlIGBDb3B5YCB0cmFpdCBvbiB0aGUgdHlwZS4KClRoaXMgY2FuIGFsc28gaGFwcGVuIHdoZW4gdXNpbmcgYSB0eXBlIGltcGxlbWVudGluZyBgRm5gIG9yIGBGbk11dGAsIGFzIG5laXRoZXIKYWxsb3dzIG1vdmluZyBvdXQgb2YgdGhlbSAodGhleSB1c3VhbGx5IHJlcHJlc2VudCBjbG9zdXJlcyB3aGljaCBjYW4gYmUgY2FsbGVkCm1vcmUgdGhhbiBvbmNlKS4gTXVjaCBvZiB0aGUgdGV4dCBmb2xsb3dpbmcgYXBwbGllcyBlcXVhbGx5IHdlbGwgdG8gbm9uLWBGbk9uY2VgCmNsb3N1cmUgYm9kaWVzLgoKRXhhbXBsZXM6CgpgYGAKdXNlIHN0ZDo6Y2VsbDo6UmVmQ2VsbDsKCnN0cnVjdCBUaGVEYXJrS25pZ2h0OwoKaW1wbCBUaGVEYXJrS25pZ2h0IHsKICAgIGZuIG5vdGhpbmdfaXNfdHJ1ZSgmc2VsZikge30gLy8gRmlyc3QgY2FzZSwgd2UgZG9uJ3QgdGFrZSBvd25lcnNoaXAKfQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gUmVmQ2VsbDo6bmV3KFRoZURhcmtLbmlnaHQpOwoKICAgIHguYm9ycm93KCkubm90aGluZ19pc190cnVlKCk7IC8vIG9rIQp9CmBgYAoKT3I6CgpgYGAKdXNlIHN0ZDo6Y2VsbDo6UmVmQ2VsbDsKCnN0cnVjdCBUaGVEYXJrS25pZ2h0OwoKaW1wbCBUaGVEYXJrS25pZ2h0IHsKICAgIGZuIG5vdGhpbmdfaXNfdHJ1ZShzZWxmKSB7fQp9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBSZWZDZWxsOjpuZXcoVGhlRGFya0tuaWdodCk7CiAgICBsZXQgeCA9IHguaW50b19pbm5lcigpOyAvLyB3ZSBnZXQgYmFjayBvd25lcnNoaXAKCiAgICB4Lm5vdGhpbmdfaXNfdHJ1ZSgpOyAvLyBvayEKfQpgYGAKCk9yOgoKYGBgCnVzZSBzdGQ6OmNlbGw6OlJlZkNlbGw7CgojW2Rlcml2ZShDbG9uZSwgQ29weSldIC8vIHdlIGltcGxlbWVudCB0aGUgQ29weSB0cmFpdApzdHJ1Y3QgVGhlRGFya0tuaWdodDsKCmltcGwgVGhlRGFya0tuaWdodCB7CiAgICBmbiBub3RoaW5nX2lzX3RydWUoc2VsZikge30KfQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gUmVmQ2VsbDo6bmV3KFRoZURhcmtLbmlnaHQpOwoKICAgIHguYm9ycm93KCkubm90aGluZ19pc190cnVlKCk7IC8vIG9rIQp9CmBgYAoKTW92aW5nIGEgbWVtYmVyIG91dCBvZiBhIG11dGFibHkgYm9ycm93ZWQgc3RydWN0IHdpbGwgYWxzbyBjYXVzZSBFMDUwNyBlcnJvcjoKCmBgYGNvbXBpbGVfZmFpbCxFMDUwNwpzdHJ1Y3QgVGhlRGFya0tuaWdodDsKCmltcGwgVGhlRGFya0tuaWdodCB7CiAgICBmbiBub3RoaW5nX2lzX3RydWUoc2VsZikge30KfQoKc3RydWN0IEJhdGNhdmUgewogICAga25pZ2h0OiBUaGVEYXJrS25pZ2h0Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IGNhdmUgPSBCYXRjYXZlIHsKICAgICAgICBrbmlnaHQ6IFRoZURhcmtLbmlnaHQKICAgIH07CiAgICBsZXQgYm9ycm93ZWQgPSAmbXV0IGNhdmU7CgogICAgYm9ycm93ZWQua25pZ2h0Lm5vdGhpbmdfaXNfdHJ1ZSgpOyAvLyBFMDUwNwp9CmBgYAoKSXQgaXMgZmluZSBvbmx5IGlmIHlvdSBwdXQgc29tZXRoaW5nIGJhY2suIGBtZW06OnJlcGxhY2VgIGNhbiBiZSB1c2VkIGZvciB0aGF0OgoKYGBgCiMgc3RydWN0IFRoZURhcmtLbmlnaHQ7CiMgaW1wbCBUaGVEYXJrS25pZ2h0IHsgZm4gbm90aGluZ19pc190cnVlKHNlbGYpIHt9IH0KIyBzdHJ1Y3QgQmF0Y2F2ZSB7IGtuaWdodDogVGhlRGFya0tuaWdodCB9CnVzZSBzdGQ6Om1lbTsKCmxldCBtdXQgY2F2ZSA9IEJhdGNhdmUgewogICAga25pZ2h0OiBUaGVEYXJrS25pZ2h0Cn07CmxldCBib3Jyb3dlZCA9ICZtdXQgY2F2ZTsKCm1lbTo6cmVwbGFjZSgmbXV0IGJvcnJvd2VkLmtuaWdodCwgVGhlRGFya0tuaWdodCkubm90aGluZ19pc190cnVlKCk7IC8vIG9rIQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFJ1c3QncyBvd25lcnNoaXAgc3lzdGVtLCB0YWtlIGEgbG9vayBhdCB0aGUKW1JlZmVyZW5jZXMgJiBCb3Jyb3dpbmddW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ10gc2VjdGlvbiBvZiB0aGUgQm9vay4KCltyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gwNC0wMi1yZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmcuaHRtbApFMDUwOEEgdmFsdWUgd2FzIG1vdmVkIG91dCBvZiBhIG5vbi1jb3B5IGZpeGVkLXNpemUgYXJyYXkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTA4CnN0cnVjdCBOb25Db3B5OwoKZm4gbWFpbigpIHsKICAgIGxldCBhcnJheSA9IFtOb25Db3B5OyAxXTsKICAgIGxldCBfdmFsdWUgPSBhcnJheVswXTsgLy8gZXJyb3I6IGNhbm5vdCBtb3ZlIG91dCBvZiB0eXBlIGBbTm9uQ29weTsgMV1gLAogICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYSBub24tY29weSBmaXhlZC1zaXplIGFycmF5Cn0KYGBgCgpUaGUgZmlyc3QgZWxlbWVudCB3YXMgbW92ZWQgb3V0IG9mIHRoZSBhcnJheSwgYnV0IHRoaXMgaXMgbm90CnBvc3NpYmxlIGJlY2F1c2UgYE5vbkNvcHlgIGRvZXMgbm90IGltcGxlbWVudCB0aGUgYENvcHlgIHRyYWl0LgoKQ29uc2lkZXIgYm9ycm93aW5nIHRoZSBlbGVtZW50IGluc3RlYWQgb2YgbW92aW5nIGl0OgoKYGBgCnN0cnVjdCBOb25Db3B5OwoKZm4gbWFpbigpIHsKICAgIGxldCBhcnJheSA9IFtOb25Db3B5OyAxXTsKICAgIGxldCBfdmFsdWUgPSAmYXJyYXlbMF07IC8vIEJvcnJvd2luZyBpcyBhbGxvd2VkLCB1bmxpa2UgbW92aW5nLgp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgaWYgeW91ciB0eXBlIGltcGxlbWVudHMgYENsb25lYCBhbmQgeW91IG5lZWQgdG8gb3duIHRoZSB2YWx1ZSwKY29uc2lkZXIgYm9ycm93aW5nIGFuZCB0aGVuIGNsb25pbmc6CgpgYGAKI1tkZXJpdmUoQ2xvbmUpXQpzdHJ1Y3QgTm9uQ29weTsKCmZuIG1haW4oKSB7CiAgICBsZXQgYXJyYXkgPSBbTm9uQ29weTsgMV07CiAgICAvLyBOb3cgeW91IGNhbiBjbG9uZSB0aGUgYXJyYXkgZWxlbWVudC4KICAgIGxldCBfdmFsdWUgPSBhcnJheVswXS5jbG9uZSgpOwp9CmBgYApFMDUwOVRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIG1vdmUgb3V0IG9mIGEgdmFsdWUgd2hvc2UgdHlwZQppbXBsZW1lbnRzIHRoZSBgRHJvcGAgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTA5CnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHVzaXplCn0KCnN0cnVjdCBEcm9wU3RydWN0IHsKICAgIGZhbmN5OiBGYW5jeU51bQp9CgppbXBsIERyb3AgZm9yIERyb3BTdHJ1Y3QgewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsKICAgICAgICAvLyBEZXN0cnVjdCBEcm9wU3RydWN0LCBwb3NzaWJseSB1c2luZyBGYW5jeU51bQogICAgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IGRyb3Bfc3RydWN0ID0gRHJvcFN0cnVjdHtmYW5jeTogRmFuY3lOdW17bnVtOiA1fX07CiAgICBsZXQgZmFuY3lfZmllbGQgPSBkcm9wX3N0cnVjdC5mYW5jeTsgLy8gRXJyb3IgRTA1MDkKICAgIHByaW50bG4hKCJGYW5jeToge30iLCBmYW5jeV9maWVsZC5udW0pOwogICAgLy8gaW1wbGljaXQgY2FsbCB0byBgZHJvcF9zdHJ1Y3QuZHJvcCgpYCBhcyBkcm9wX3N0cnVjdCBnb2VzIG91dCBvZiBzY29wZQp9CmBgYAoKSGVyZSwgd2UgdHJpZWQgdG8gbW92ZSBhIGZpZWxkIG91dCBvZiBhIHN0cnVjdCBvZiB0eXBlIGBEcm9wU3RydWN0YCB3aGljaAppbXBsZW1lbnRzIHRoZSBgRHJvcGAgdHJhaXQuIEhvd2V2ZXIsIGEgc3RydWN0IGNhbm5vdCBiZSBkcm9wcGVkIGlmIG9uZSBvcgptb3JlIG9mIGl0cyBmaWVsZHMgaGF2ZSBiZWVuIG1vdmVkLgoKU3RydWN0cyBpbXBsZW1lbnRpbmcgdGhlIGBEcm9wYCB0cmFpdCBoYXZlIGFuIGltcGxpY2l0IGRlc3RydWN0b3IgdGhhdCBnZXRzCmNhbGxlZCB3aGVuIHRoZXkgZ28gb3V0IG9mIHNjb3BlLiBUaGlzIGRlc3RydWN0b3IgbWF5IHVzZSB0aGUgZmllbGRzIG9mIHRoZQpzdHJ1Y3QsIHNvIG1vdmluZyBvdXQgb2YgdGhlIHN0cnVjdCBjb3VsZCBtYWtlIGl0IGltcG9zc2libGUgdG8gcnVuIHRoZQpkZXN0cnVjdG9yLiBUaGVyZWZvcmUsIHdlIG11c3QgdGhpbmsgb2YgYWxsIHZhbHVlcyB3aG9zZSB0eXBlIGltcGxlbWVudHMgdGhlCmBEcm9wYCB0cmFpdCBhcyBzaW5nbGUgdW5pdHMgd2hvc2UgZmllbGRzIGNhbm5vdCBiZSBtb3ZlZC4KClRoaXMgZXJyb3IgY2FuIGJlIGZpeGVkIGJ5IGNyZWF0aW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBmaWVsZHMgb2YgYSBzdHJ1Y3QsCmVudW0sIG9yIHR1cGxlIHVzaW5nIHRoZSBgcmVmYCBrZXl3b3JkOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHVzaXplCn0KCnN0cnVjdCBEcm9wU3RydWN0IHsKICAgIGZhbmN5OiBGYW5jeU51bQp9CgppbXBsIERyb3AgZm9yIERyb3BTdHJ1Y3QgewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsKICAgICAgICAvLyBEZXN0cnVjdCBEcm9wU3RydWN0LCBwb3NzaWJseSB1c2luZyBGYW5jeU51bQogICAgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IGRyb3Bfc3RydWN0ID0gRHJvcFN0cnVjdHtmYW5jeTogRmFuY3lOdW17bnVtOiA1fX07CiAgICBsZXQgcmVmIGZhbmN5X2ZpZWxkID0gZHJvcF9zdHJ1Y3QuZmFuY3k7IC8vIE5vIG1vcmUgZXJyb3JzIQogICAgcHJpbnRsbiEoIkZhbmN5OiB7fSIsIGZhbmN5X2ZpZWxkLm51bSk7CiAgICAvLyBpbXBsaWNpdCBjYWxsIHRvIGBkcm9wX3N0cnVjdC5kcm9wKClgIGFzIGRyb3Bfc3RydWN0IGdvZXMgb3V0IG9mIHNjb3BlCn0KYGBgCgpOb3RlIHRoYXQgdGhpcyB0ZWNobmlxdWUgY2FuIGFsc28gYmUgdXNlZCBpbiB0aGUgYXJtcyBvZiBhIG1hdGNoIGV4cHJlc3Npb246CgpgYGAKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdXNpemUKfQoKZW51bSBEcm9wRW51bSB7CiAgICBGYW5jeShGYW5jeU51bSkKfQoKaW1wbCBEcm9wIGZvciBEcm9wRW51bSB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgewogICAgICAgIC8vIERlc3RydWN0IERyb3BFbnVtLCBwb3NzaWJseSB1c2luZyBGYW5jeU51bQogICAgfQp9CgpmbiBtYWluKCkgewogICAgLy8gQ3JlYXRlcyBhbmQgZW51bSBvZiB0eXBlIGBEcm9wRW51bWAsIHdoaWNoIGltcGxlbWVudHMgYERyb3BgCiAgICBsZXQgZHJvcF9lbnVtID0gRHJvcEVudW06OkZhbmN5KEZhbmN5TnVte251bTogMTB9KTsKICAgIG1hdGNoIGRyb3BfZW51bSB7CiAgICAgICAgLy8gQ3JlYXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgaW5zaWRlIG9mIGBEcm9wRW51bTo6RmFuY3lgCiAgICAgICAgRHJvcEVudW06OkZhbmN5KHJlZiBmYW5jeV9maWVsZCkgPT4gLy8gTm8gZXJyb3IhCiAgICAgICAgICAgIHByaW50bG4hKCJJdCB3YXMgZmFuY3ktLSB7fSEiLCBmYW5jeV9maWVsZC5udW0pLAogICAgfQogICAgLy8gaW1wbGljaXQgY2FsbCB0byBgZHJvcF9lbnVtLmRyb3AoKWAgYXMgZHJvcF9lbnVtIGdvZXMgb3V0IG9mIHNjb3BlCn0KYGBgCkUwNTEwVGhlIG1hdGNoZWQgdmFsdWUgd2FzIGFzc2lnbmVkIGluIGEgbWF0Y2ggZ3VhcmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTEwCmxldCBtdXQgeCA9IFNvbWUoMCk7Cm1hdGNoIHggewogICAgTm9uZSA9PiB7fQogICAgU29tZShfKSBpZiB7IHggPSBOb25lOyBmYWxzZSB9ID0+IHt9IC8vIGVycm9yIQogICAgU29tZShfKSA9PiB7fQp9CmBgYAoKV2hlbiBtYXRjaGluZyBvbiBhIHZhcmlhYmxlIGl0IGNhbm5vdCBiZSBtdXRhdGVkIGluIHRoZSBtYXRjaCBndWFyZHMsIGFzIHRoaXMKY291bGQgY2F1c2UgdGhlIG1hdGNoIHRvIGJlIG5vbi1leGhhdXN0aXZlLgoKSGVyZSBleGVjdXRpbmcgYHggPSBOb25lYCB3b3VsZCBtb2RpZnkgdGhlIHZhbHVlIGJlaW5nIG1hdGNoZWQgYW5kIHJlcXVpcmUgdXMKdG8gZ28gImJhY2sgaW4gdGltZSIgdG8gdGhlIGBOb25lYCBhcm0uIFRvIGZpeCBpdCwgY2hhbmdlIHRoZSB2YWx1ZSBpbiB0aGUgbWF0Y2gKYXJtOgoKYGBgCmxldCBtdXQgeCA9IFNvbWUoMCk7Cm1hdGNoIHggewogICAgTm9uZSA9PiB7fQogICAgU29tZShfKSA9PiB7CiAgICAgICAgeCA9IE5vbmU7IC8vIG9rIQogICAgfQp9CmBgYApFMDUxMUludmFsaWQgbW9ub21vcnBoaXphdGlvbiBvZiBhbiBpbnRyaW5zaWMgZnVuY3Rpb24gd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTExCiMhW2ZlYXR1cmUocGxhdGZvcm1faW50cmluc2ljcyldCgpleHRlcm4gInBsYXRmb3JtLWludHJpbnNpYyIgewogICAgZm4gc2ltZF9hZGQ8VD4oYTogVCwgYjogVCkgLT4gVDsKfQoKZm4gbWFpbigpIHsKICAgIHVuc2FmZSB7IHNpbWRfYWRkKDAsIDEpOyB9CiAgICAvLyBlcnJvcjogaW52YWxpZCBtb25vbW9ycGhpemF0aW9uIG9mIGBzaW1kX2FkZGAgaW50cmluc2ljCn0KYGBgCgpUaGUgZ2VuZXJpYyB0eXBlIGhhcyB0byBiZSBhIFNJTUQgdHlwZS4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHJlcHJfc2ltZCldCiMhW2ZlYXR1cmUocGxhdGZvcm1faW50cmluc2ljcyldCgojW3JlcHIoc2ltZCldCiNbZGVyaXZlKENvcHksIENsb25lKV0Kc3RydWN0IGkzMngyKGkzMiwgaTMyKTsKCmV4dGVybiAicGxhdGZvcm0taW50cmluc2ljIiB7CiAgICBmbiBzaW1kX2FkZDxUPihhOiBULCBiOiBUKSAtPiBUOwp9Cgp1bnNhZmUgeyBzaW1kX2FkZChpMzJ4MigwLCAwKSwgaTMyeDIoMSwgMikpOyB9IC8vIG9rIQpgYGAKRTA1MTJUcmFuc211dGUgd2l0aCB0d28gZGlmZmVyZW50bHkgc2l6ZWQgdHlwZXMgd2FzIGF0dGVtcHRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MTIKZm4gdGFrZXNfdTgoXzogdTgpIHt9CgpmbiBtYWluKCkgewogICAgdW5zYWZlIHsgdGFrZXNfdTgoOjpzdGQ6Om1lbTo6dHJhbnNtdXRlKDB1MTYpKTsgfQogICAgLy8gZXJyb3I6IGNhbm5vdCB0cmFuc211dGUgYmV0d2VlbiB0eXBlcyBvZiBkaWZmZXJlbnQgc2l6ZXMsCiAgICAvLyAgICAgICAgb3IgZGVwZW5kZW50bHktc2l6ZWQgdHlwZXMKfQpgYGAKClBsZWFzZSB1c2UgdHlwZXMgd2l0aCBzYW1lIHNpemUgb3IgdXNlIHRoZSBleHBlY3RlZCB0eXBlIGRpcmVjdGx5LiBFeGFtcGxlOgoKYGBgCmZuIHRha2VzX3U4KF86IHU4KSB7fQoKZm4gbWFpbigpIHsKICAgIHVuc2FmZSB7IHRha2VzX3U4KDo6c3RkOjptZW06OnRyYW5zbXV0ZSgwaTgpKTsgfSAvLyBvayEKICAgIC8vIG9yOgogICAgdW5zYWZlIHsgdGFrZXNfdTgoMHU4KTsgfSAvLyBvayEKfQpgYGAKRTA1MTVBIHJlZmVyZW5jZSB0byBhIGxvY2FsIHZhcmlhYmxlIHdhcyByZXR1cm5lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MTUKZm4gZ2V0X2RhbmdsaW5nX3JlZmVyZW5jZSgpIC0+ICYnc3RhdGljIGkzMiB7CiAgICBsZXQgeCA9IDA7CiAgICAmeAp9CmBgYAoKYGBgY29tcGlsZV9mYWlsLEUwNTE1CnVzZSBzdGQ6OnNsaWNlOjpJdGVyOwpmbiBnZXRfZGFuZ2xpbmdfaXRlcmF0b3I8J2E+KCkgLT4gSXRlcjwnYSwgaTMyPiB7CiAgICBsZXQgdiA9IHZlYyFbMSwgMiwgM107CiAgICB2Lml0ZXIoKQp9CmBgYAoKTG9jYWwgdmFyaWFibGVzLCBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCB0ZW1wb3JhcmllcyBhcmUgYWxsIGRyb3BwZWQgYmVmb3JlIHRoZQplbmQgb2YgdGhlIGZ1bmN0aW9uIGJvZHkuIFNvIGEgcmVmZXJlbmNlIHRvIHRoZW0gY2Fubm90IGJlIHJldHVybmVkLgoKQ29uc2lkZXIgcmV0dXJuaW5nIGFuIG93bmVkIHZhbHVlIGluc3RlYWQ6CgpgYGAKdXNlIHN0ZDo6dmVjOjpJbnRvSXRlcjsKCmZuIGdldF9pbnRlZ2VyKCkgLT4gaTMyIHsKICAgIGxldCB4ID0gMDsKICAgIHgKfQoKZm4gZ2V0X293bmVkX2l0ZXJhdG9yKCkgLT4gSW50b0l0ZXI8aTMyPiB7CiAgICBsZXQgdiA9IHZlYyFbMSwgMiwgM107CiAgICB2LmludG9faXRlcigpCn0KYGBgCkUwNTE2VGhlIGB0eXBlb2ZgIGtleXdvcmQgaXMgY3VycmVudGx5IHJlc2VydmVkIGJ1dCB1bmltcGxlbWVudGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUxNgpmbiBtYWluKCkgewogICAgbGV0IHg6IHR5cGVvZig5MikgPSA5MjsKfQpgYGAKClRyeSB1c2luZyB0eXBlIGluZmVyZW5jZSBpbnN0ZWFkLiBFeGFtcGxlOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IDkyOwp9CmBgYApFMDUxN0EgYCNbcmVwciguLildYCBhdHRyaWJ1dGUgd2FzIHBsYWNlZCBvbiBhbiB1bnN1cHBvcnRlZCBpdGVtLgoKRXhhbXBsZXMgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MTcKI1tyZXByKEMpXQp0eXBlIEZvbyA9IHU4OwoKI1tyZXByKHBhY2tlZCldCmVudW0gRm9vIHtCYXIsIEJhen0KCiNbcmVwcih1OCldCnN0cnVjdCBGb28ge2JhcjogYm9vbCwgYmF6OiBib29sfQoKI1tyZXByKEMpXQppbXBsIEZvbyB7CiAgICAvLyAuLi4KfQpgYGAKCiogVGhlIGAjW3JlcHIoQyldYCBhdHRyaWJ1dGUgY2FuIG9ubHkgYmUgcGxhY2VkIG9uIHN0cnVjdHMgYW5kIGVudW1zLgoqIFRoZSBgI1tyZXByKHBhY2tlZCldYCBhbmQgYCNbcmVwcihzaW1kKV1gIGF0dHJpYnV0ZXMgb25seSB3b3JrIG9uIHN0cnVjdHMuCiogVGhlIGAjW3JlcHIodTgpXWAsIGAjW3JlcHIoaTE2KV1gLCBldGMgYXR0cmlidXRlcyBvbmx5IHdvcmsgb24gZW51bXMuCgpUaGVzZSBhdHRyaWJ1dGVzIGRvIG5vdCB3b3JrIG9uIHR5cGVkZWZzLCBzaW5jZSB0eXBlZGVmcyBhcmUganVzdCBhbGlhc2VzLgoKUmVwcmVzZW50YXRpb25zIGxpa2UgYCNbcmVwcih1OCldYCwgYCNbcmVwcihpNjQpXWAgYXJlIGZvciBzZWxlY3RpbmcgdGhlCmRpc2NyaW1pbmFudCBzaXplIGZvciBlbnVtcyB3aXRoIG5vIGRhdGEgZmllbGRzIG9uIGFueSBvZiB0aGUgdmFyaWFudHMsIGUuZy4KYGVudW0gQ29sb3Ige1JlZCwgQmx1ZSwgR3JlZW59YCwgZWZmZWN0aXZlbHkgc2V0dGluZyB0aGUgc2l6ZSBvZiB0aGUgZW51bSB0bwp0aGUgc2l6ZSBvZiB0aGUgcHJvdmlkZWQgdHlwZS4gU3VjaCBhbiBlbnVtIGNhbiBiZSBjYXN0IHRvIGEgdmFsdWUgb2YgdGhlIHNhbWUKdHlwZSBhcyB3ZWxsLiBJbiBzaG9ydCwgYCNbcmVwcih1OCldYCBtYWtlcyB0aGUgZW51bSBiZWhhdmUgbGlrZSBhbiBpbnRlZ2VyCndpdGggYSBjb25zdHJhaW5lZCBzZXQgb2YgYWxsb3dlZCB2YWx1ZXMuCgpPbmx5IGZpZWxkLWxlc3MgZW51bXMgY2FuIGJlIGNhc3QgdG8gbnVtZXJpY2FsIHByaW1pdGl2ZXMsIHNvIHRoaXMgYXR0cmlidXRlCndpbGwgbm90IGFwcGx5IHRvIHN0cnVjdHMuCgpgI1tyZXByKHBhY2tlZCldYCByZWR1Y2VzIHBhZGRpbmcgdG8gbWFrZSB0aGUgc3RydWN0IHNpemUgc21hbGxlci4gVGhlCnJlcHJlc2VudGF0aW9uIG9mIGVudW1zIGlzbid0IHN0cmljdGx5IGRlZmluZWQgaW4gUnVzdCwgYW5kIHRoaXMgYXR0cmlidXRlCndvbid0IHdvcmsgb24gZW51bXMuCgpgI1tyZXByKHNpbWQpXWAgd2lsbCBnaXZlIGEgc3RydWN0IGNvbnNpc3Rpbmcgb2YgYSBob21vZ2VuZW91cyBzZXJpZXMgb2YgbWFjaGluZQp0eXBlcyAoaS5lLiwgYHU4YCwgYGkzMmAsIGV0YykgYSByZXByZXNlbnRhdGlvbiB0aGF0IHBlcm1pdHMgdmVjdG9yaXphdGlvbiB2aWEKU0lNRC4gVGhpcyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSBmb3IgZW51bXMgc2luY2UgdGhleSBkb24ndCBjb25zaXN0IG9mIGEKc2luZ2xlIGxpc3Qgb2YgZGF0YS4KRTA1MThBbiBgI1tpbmxpbmUoLi4pXWAgYXR0cmlidXRlIHdhcyBpbmNvcnJlY3RseSBwbGFjZWQgb24gc29tZXRoaW5nIG90aGVyIHRoYW4gYQpmdW5jdGlvbiBvciBtZXRob2QuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTE4CiNbaW5saW5lKGFsd2F5cyldCnN0cnVjdCBGb287CgojW2lubGluZShuZXZlcildCmltcGwgRm9vIHsKICAgIC8vIC4uLgp9CmBgYAoKYCNbaW5saW5lXWAgaGludHMgdGhlIGNvbXBpbGVyIHdoZXRoZXIgb3Igbm90IHRvIGF0dGVtcHQgdG8gaW5saW5lIGEgbWV0aG9kIG9yCmZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgY29tcGlsZXIgZG9lcyBhIHByZXR0eSBnb29kIGpvYiBvZiBmaWd1cmluZyB0aGlzIG91dAppdHNlbGYsIGJ1dCBpZiB5b3UgZmVlbCB0aGUgbmVlZCBmb3IgYW5ub3RhdGlvbnMsIGAjW2lubGluZShhbHdheXMpXWAgYW5kCmAjW2lubGluZShuZXZlcildYCBjYW4gb3ZlcnJpZGUgb3IgZm9yY2UgdGhlIGNvbXBpbGVyJ3MgZGVjaXNpb24uCgpJZiB5b3Ugd2lzaCB0byBhcHBseSB0aGlzIGF0dHJpYnV0ZSB0byBhbGwgbWV0aG9kcyBpbiBhbiBpbXBsLCBtYW51YWxseSBhbm5vdGF0ZQplYWNoIG1ldGhvZDsgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGFubm90YXRlIHRoZSBlbnRpcmUgaW1wbCB3aXRoIGFuIGAjW2lubGluZV1gCmF0dHJpYnV0ZS4KRTA1MjBBIG5vbi1kZWZhdWx0IGltcGxlbWVudGF0aW9uIHdhcyBhbHJlYWR5IG1hZGUgb24gdGhpcyB0eXBlIHNvIGl0IGNhbm5vdCBiZQpzcGVjaWFsaXplZCBmdXJ0aGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUyMAojIVtmZWF0dXJlKHNwZWNpYWxpemF0aW9uKV0KCnRyYWl0IFNwYWNlTGxhbWEgewogICAgZm4gZmx5KCZzZWxmKTsKfQoKLy8gYXBwbGllcyB0byBhbGwgVAppbXBsPFQ+IFNwYWNlTGxhbWEgZm9yIFQgewogICAgZGVmYXVsdCBmbiBmbHkoJnNlbGYpIHt9Cn0KCi8vIG5vbi1kZWZhdWx0IGltcGwKLy8gYXBwbGllcyB0byBhbGwgYENsb25lYCBUIGFuZCBvdmVycmlkZXMgdGhlIHByZXZpb3VzIGltcGwKaW1wbDxUOiBDbG9uZT4gU3BhY2VMbGFtYSBmb3IgVCB7CiAgICBmbiBmbHkoJnNlbGYpIHt9Cn0KCi8vIHNpbmNlIGBpMzJgIGlzIGNsb25lLCB0aGlzIGNvbmZsaWN0cyB3aXRoIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbgppbXBsIFNwYWNlTGxhbWEgZm9yIGkzMiB7CiAgICBkZWZhdWx0IGZuIGZseSgmc2VsZikge30KICAgIC8vIGVycm9yOiBpdGVtIGBmbHlgIGlzIHByb3ZpZGVkIGJ5IGFuIGBpbXBsYCB0aGF0IHNwZWNpYWxpemVzCiAgICAvLyAgICAgICAgYW5vdGhlciwgYnV0IHRoZSBpdGVtIGluIHRoZSBwYXJlbnQgYGltcGxgIGlzIG5vdCBtYXJrZWQKICAgIC8vICAgICAgICBgZGVmYXVsdGAgYW5kIHNvIGl0IGNhbm5vdCBiZSBzcGVjaWFsaXplZC4KfQpgYGAKClNwZWNpYWxpemF0aW9uIG9ubHkgYWxsb3dzIHlvdSB0byBvdmVycmlkZSBgZGVmYXVsdGAgZnVuY3Rpb25zIGluCmltcGxlbWVudGF0aW9ucy4KClRvIGZpeCB0aGlzIGVycm9yLCB5b3UgbmVlZCB0byBtYXJrIGFsbCB0aGUgcGFyZW50IGltcGxlbWVudGF0aW9ucyBhcyBkZWZhdWx0LgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoc3BlY2lhbGl6YXRpb24pXQoKdHJhaXQgU3BhY2VMbGFtYSB7CiAgICBmbiBmbHkoJnNlbGYpOwp9CgovLyBhcHBsaWVzIHRvIGFsbCBUCmltcGw8VD4gU3BhY2VMbGFtYSBmb3IgVCB7CiAgICBkZWZhdWx0IGZuIGZseSgmc2VsZikge30gLy8gVGhpcyBpcyBhIHBhcmVudCBpbXBsZW1lbnRhdGlvbi4KfQoKLy8gYXBwbGllcyB0byBhbGwgYENsb25lYCBUOyBvdmVycmlkZXMgdGhlIHByZXZpb3VzIGltcGwKaW1wbDxUOiBDbG9uZT4gU3BhY2VMbGFtYSBmb3IgVCB7CiAgICBkZWZhdWx0IGZuIGZseSgmc2VsZikge30gLy8gVGhpcyBpcyBhIHBhcmVudCBpbXBsZW1lbnRhdGlvbiBidXQgd2FzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJldmlvdXNseSBub3QgYSBkZWZhdWx0IG9uZSwgY2F1c2luZyB0aGUgZXJyb3IKfQoKLy8gYXBwbGllcyB0byBpMzIsIG92ZXJyaWRlcyB0aGUgcHJldmlvdXMgdHdvIGltcGxzCmltcGwgU3BhY2VMbGFtYSBmb3IgaTMyIHsKICAgIGZuIGZseSgmc2VsZikge30gLy8gQW5kIG5vdyB0aGF0J3Mgb2shCn0KYGBgCkUwNTIyVGhlIGxhbmcgYXR0cmlidXRlIHdhcyB1c2VkIGluIGFuIGludmFsaWQgY29udGV4dC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjIKIyFbZmVhdHVyZShsYW5nX2l0ZW1zKV0KCiNbbGFuZyA9ICJjb29raWUiXQpmbiBjb29raWUoKSAtPiAhIHsgLy8gZXJyb3I6IGRlZmluaXRpb24gb2YgYW4gdW5rbm93biBsYW5ndWFnZSBpdGVtOiBgY29va2llYAogICAgbG9vcCB7fQp9CmBgYAoKVGhlIGxhbmcgYXR0cmlidXRlIGlzIGludGVuZGVkIGZvciBtYXJraW5nIHNwZWNpYWwgaXRlbXMgdGhhdCBhcmUgYnVpbHQtaW4gdG8KUnVzdCBpdHNlbGYuIFRoaXMgaW5jbHVkZXMgc3BlY2lhbCB0cmFpdHMgKGxpa2UgYENvcHlgIGFuZCBgU2l6ZWRgKSB0aGF0IGFmZmVjdApob3cgdGhlIGNvbXBpbGVyIGJlaGF2ZXMsIGFzIHdlbGwgYXMgc3BlY2lhbCBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgYXV0b21hdGljYWxseQppbnZva2VkIChzdWNoIGFzIHRoZSBoYW5kbGVyIGZvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdoZW4gaW5kZXhpbmcgYSBzbGljZSkuCkUwNTI0QSB2YXJpYWJsZSB3aGljaCByZXF1aXJlcyB1bmlxdWUgYWNjZXNzIGlzIGJlaW5nIHVzZWQgaW4gbW9yZSB0aGFuIG9uZSBjbG9zdXJlCmF0IHRoZSBzYW1lIHRpbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTI0CmZuIHNldCh4OiAmbXV0IGlzaXplKSB7CiAgICAqeCArPSA0Owp9CgpmbiBkcmFnb29vb24oeDogJm11dCBpc2l6ZSkgewogICAgbGV0IG11dCBjMSA9IHx8IHNldCh4KTsKICAgIGxldCBtdXQgYzIgPSB8fCBzZXQoeCk7IC8vIGVycm9yIQoKICAgIGMyKCk7CiAgICBjMSgpOwp9CmBgYAoKVG8gc29sdmUgdGhpcyBpc3N1ZSwgbXVsdGlwbGUgc29sdXRpb25zIGFyZSBhdmFpbGFibGUuIEZpcnN0LCBpcyBpdCByZXF1aXJlZApmb3IgdGhpcyB2YXJpYWJsZSB0byBiZSB1c2VkIGluIG1vcmUgdGhhbiBvbmUgY2xvc3VyZSBhdCBhIHRpbWU/IElmIGl0IGlzIHRoZQpjYXNlLCB1c2UgcmVmZXJlbmNlIGNvdW50ZWQgdHlwZXMgc3VjaCBhcyBgUmNgIChvciBgQXJjYCBpZiBpdCBydW5zCmNvbmN1cnJlbnRseSk6CgpgYGAKdXNlIHN0ZDo6cmM6OlJjOwp1c2Ugc3RkOjpjZWxsOjpSZWZDZWxsOwoKZm4gc2V0KHg6ICZtdXQgaXNpemUpIHsKICAgICp4ICs9IDQ7Cn0KCmZuIGRyYWdvb29vbih4OiAmbXV0IGlzaXplKSB7CiAgICBsZXQgeCA9IFJjOjpuZXcoUmVmQ2VsbDo6bmV3KHgpKTsKICAgIGxldCB5ID0gUmM6OmNsb25lKCZ4KTsKICAgIGxldCBtdXQgYzEgPSB8fCB7IGxldCBtdXQgeDIgPSB4LmJvcnJvd19tdXQoKTsgc2V0KCZtdXQgeDIpOyB9OwogICAgbGV0IG11dCBjMiA9IHx8IHsgbGV0IG11dCB4MiA9IHkuYm9ycm93X211dCgpOyBzZXQoJm11dCB4Mik7IH07IC8vIG9rIQoKICAgIGMyKCk7CiAgICBjMSgpOwp9CmBgYAoKSWYgbm90LCBqdXN0IHJ1biBjbG9zdXJlcyBvbmUgYXQgYSB0aW1lOgoKYGBgCmZuIHNldCh4OiAmbXV0IGlzaXplKSB7CiAgICAqeCArPSA0Owp9CgpmbiBkcmFnb29vb24oeDogJm11dCBpc2l6ZSkgewogICAgeyAvLyBUaGlzIGJsb2NrIGlzbid0IG5lY2Vzc2FyeSBzaW5jZSBub24tbGV4aWNhbCBsaWZldGltZXMsIGl0J3MganVzdCB0bwogICAgICAvLyBtYWtlIGl0IG1vcmUgY2xlYXIuCiAgICAgICAgbGV0IG11dCBjMSA9IHx8IHNldCgmbXV0ICp4KTsKICAgICAgICBjMSgpOwogICAgfSAvLyBgYzFgIGhhcyBiZWVuIGRyb3BwZWQgaGVyZSBzbyB3ZSdyZSBmcmVlIHRvIHVzZSBgeGAgYWdhaW4hCiAgICBsZXQgbXV0IGMyID0gfHwgc2V0KCZtdXQgKngpOwogICAgYzIoKTsKfQpgYGAKRTA1MjVBIGNsb3N1cmUgd2FzIHVzZWQgYnV0IGRpZG4ndCBpbXBsZW1lbnQgdGhlIGV4cGVjdGVkIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUyNQpzdHJ1Y3QgWDsKCmZuIGZvbzxUPihfOiBUKSB7fQpmbiBiYXI8VDogRm4odTMyKT4oXzogVCkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFg7CiAgICBsZXQgY2xvc3VyZSA9IHxffCBmb28oeCk7IC8vIGVycm9yOiBleHBlY3RlZCBhIGNsb3N1cmUgdGhhdCBpbXBsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGUgYEZuYCB0cmFpdCwgYnV0IHRoaXMgY2xvc3VyZSBvbmx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBpbXBsZW1lbnRzIGBGbk9uY2VgCiAgICBiYXIoY2xvc3VyZSk7Cn0KYGBgCgpJbiB0aGUgZXhhbXBsZSBhYm92ZSwgYGNsb3N1cmVgIGlzIGFuIGBGbk9uY2VgIGNsb3N1cmUgd2hlcmVhcyB0aGUgYGJhcmAKZnVuY3Rpb24gZXhwZWN0ZWQgYW4gYEZuYCBjbG9zdXJlLiBJbiB0aGlzIGNhc2UsIGl0J3Mgc2ltcGxlIHRvIGZpeCB0aGUgaXNzdWUsCnlvdSBqdXN0IGhhdmUgdG8gaW1wbGVtZW50IGBDb3B5YCBhbmQgYENsb25lYCB0cmFpdHMgb24gYHN0cnVjdCBYYCBhbmQgaXQnbGwKYmUgb2s6CgpgYGAKI1tkZXJpdmUoQ2xvbmUsIENvcHkpXSAvLyBXZSBpbXBsZW1lbnQgYENsb25lYCBhbmQgYENvcHlgIHRyYWl0cy4Kc3RydWN0IFg7CgpmbiBmb288VD4oXzogVCkge30KZm4gYmFyPFQ6IEZuKHUzMik+KF86IFQpIHt9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBYOwogICAgbGV0IGNsb3N1cmUgPSB8X3wgZm9vKHgpOwogICAgYmFyKGNsb3N1cmUpOyAvLyBvayEKfQpgYGAKClRvIGJldHRlciB1bmRlcnN0YW5kIGhvdyB0aGVzZSB3b3JrIGluIFJ1c3QsIHJlYWQgdGhlIFtDbG9zdXJlc11bY2xvc3VyZXNdCmNoYXB0ZXIgb2YgdGhlIEJvb2suCgpbY2xvc3VyZXNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxMy0wMS1jbG9zdXJlcy5odG1sCkUwNTI3VGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbiBhcnJheSBvciBzbGljZSBwYXR0ZXJuIGRpZmZlcmVkIGZyb20gdGhlIG51bWJlciBvZgplbGVtZW50cyBpbiB0aGUgYXJyYXkgYmVpbmcgbWF0Y2hlZC4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjcKbGV0IHIgPSAmWzEsIDIsIDMsIDRdOwptYXRjaCByIHsKICAgICZbYSwgYl0gPT4geyAvLyBlcnJvcjogcGF0dGVybiByZXF1aXJlcyAyIGVsZW1lbnRzIGJ1dCBhcnJheQogICAgICAgICAgICAgICAgIC8vICAgICAgICBoYXMgNAogICAgICAgIHByaW50bG4hKCJhPXt9LCBiPXt9IiwgYSwgYik7CiAgICB9Cn0KYGBgCgpFbnN1cmUgdGhhdCB0aGUgcGF0dGVybiBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHNpemUgb2YgdGhlIG1hdGNoZWQKYXJyYXkuIEFkZGl0aW9uYWwgZWxlbWVudHMgY2FuIGJlIG1hdGNoZWQgd2l0aCBgLi5gOgoKYGBgCmxldCByID0gJlsxLCAyLCAzLCA0XTsKbWF0Y2ggciB7CiAgICAmW2EsIGIsIC4uXSA9PiB7IC8vIG9rIQogICAgICAgIHByaW50bG4hKCJhPXt9LCBiPXt9IiwgYSwgYik7CiAgICB9Cn0KYGBgCkUwNTI4QW4gYXJyYXkgb3Igc2xpY2UgcGF0dGVybiByZXF1aXJlZCBtb3JlIGVsZW1lbnRzIHRoYW4gd2VyZSBwcmVzZW50IGluIHRoZQptYXRjaGVkIGFycmF5LgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUyOApsZXQgciA9ICZbMSwgMl07Cm1hdGNoIHIgewogICAgJlthLCBiLCBjLCByZXN0IEAgLi5dID0+IHsgLy8gZXJyb3I6IHBhdHRlcm4gcmVxdWlyZXMgYXQgbGVhc3QgMwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGVsZW1lbnRzIGJ1dCBhcnJheSBoYXMgMgogICAgICAgIHByaW50bG4hKCJhPXt9LCBiPXt9LCBjPXt9IHJlc3Q9ezo/fSIsIGEsIGIsIGMsIHJlc3QpOwogICAgfQp9CmBgYAoKRW5zdXJlIHRoYXQgdGhlIG1hdGNoZWQgYXJyYXkgaGFzIGF0IGxlYXN0IGFzIG1hbnkgZWxlbWVudHMgYXMgdGhlIHBhdHRlcm4KcmVxdWlyZXMuIFlvdSBjYW4gbWF0Y2ggYW4gYXJiaXRyYXJ5IG51bWJlciBvZiByZW1haW5pbmcgZWxlbWVudHMgd2l0aCBgLi5gOgoKYGBgCmxldCByID0gJlsxLCAyLCAzLCA0LCA1XTsKbWF0Y2ggciB7CiAgICAmW2EsIGIsIGMsIHJlc3QgQCAuLl0gPT4geyAvLyBvayEKICAgICAgICAvLyBwcmludHMgYGE9MSwgYj0yLCBjPTMgcmVzdD1bNCwgNV1gCiAgICAgICAgcHJpbnRsbiEoImE9e30sIGI9e30sIGM9e30gcmVzdD17Oj99IiwgYSwgYiwgYywgcmVzdCk7CiAgICB9Cn0KYGBgCkUwNTI5QW4gYXJyYXkgb3Igc2xpY2UgcGF0dGVybiB3YXMgbWF0Y2hlZCBhZ2FpbnN0IHNvbWUgb3RoZXIgdHlwZS4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjkKbGV0IHI6IGYzMiA9IDEuMDsKbWF0Y2ggciB7CiAgICBbYSwgYl0gPT4geyAvLyBlcnJvcjogZXhwZWN0ZWQgYW4gYXJyYXkgb3Igc2xpY2UsIGZvdW5kIGBmMzJgCiAgICAgICAgcHJpbnRsbiEoImE9e30sIGI9e30iLCBhLCBiKTsKICAgIH0KfQpgYGAKCkVuc3VyZSB0aGF0IHRoZSBwYXR0ZXJuIGFuZCB0aGUgZXhwcmVzc2lvbiBiZWluZyBtYXRjaGVkIG9uIGFyZSBvZiBjb25zaXN0ZW50CnR5cGVzOgoKYGBgCmxldCByID0gWzEuMCwgMi4wXTsKbWF0Y2ggciB7CiAgICBbYSwgYl0gPT4geyAvLyBvayEKICAgICAgICBwcmludGxuISgiYT17fSwgYj17fSIsIGEsIGIpOwogICAgfQp9CmBgYApFMDUzMEEgYmluZGluZyBzaGFkb3dlZCBzb21ldGhpbmcgaXQgc2hvdWxkbid0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzMApzdGF0aWMgVEVTVDogaTMyID0gMDsKCmxldCByOiAoaTMyLCBpMzIpID0gKDAsIDApOwptYXRjaCByIHsKICAgIFRFU1QgPT4ge30gLy8gZXJyb3I6IG1hdGNoIGJpbmRpbmdzIGNhbm5vdCBzaGFkb3cgc3RhdGljcwp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGp1c3QgY2hhbmdlIHRoZSBiaW5kaW5nJ3MgbmFtZSBpbiBvcmRlciB0byBhdm9pZCBzaGFkb3dpbmcKb25lIG9mIHRoZSBmb2xsb3dpbmc6CgoqIHN0cnVjdCBuYW1lCiogc3RydWN0L2VudW0gdmFyaWFudAoqIHN0YXRpYwoqIGNvbnN0CiogYXNzb2NpYXRlZCBjb25zdAoKRml4ZWQgZXhhbXBsZToKCmBgYApzdGF0aWMgVEVTVDogaTMyID0gMDsKCmxldCByOiAoaTMyLCBpMzIpID0gKDAsIDApOwptYXRjaCByIHsKICAgIHNvbWV0aGluZyA9PiB7fSAvLyBvayEKfQpgYGAKRTA1MzFBbiB1bmtub3duIHR1cGxlIHN0cnVjdC92YXJpYW50IGhhcyBiZWVuIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTMxCmxldCBUeXBlKHgpID0gVHlwZSgxMik7IC8vIGVycm9yIQptYXRjaCBCYXIoMTIpIHsKICAgIEJhcih4KSA9PiB7fSAvLyBlcnJvciEKICAgIF8gPT4ge30KfQpgYGAKCkluIG1vc3QgY2FzZXMsIGl0J3MgZWl0aGVyIGEgZm9yZ290dGVuIGltcG9ydCBvciBhIHR5cG8uIEhvd2V2ZXIsIGxldCdzIGxvb2sgYXQKaG93IHlvdSBjYW4gaGF2ZSBzdWNoIGEgdHlwZToKCmBgYGVkaXRpb24yMDE4CnN0cnVjdCBUeXBlKHUzMik7IC8vIHRoaXMgaXMgYSB0dXBsZSBzdHJ1Y3QKCmVudW0gRm9vIHsKICAgIEJhcih1MzIpLCAvLyB0aGlzIGlzIGEgdHVwbGUgdmFyaWFudAp9Cgp1c2UgRm9vOjoqOyAvLyBUbyB1c2UgRm9vJ3MgdmFyaWFudCBkaXJlY3RseSwgd2UgbmVlZCB0byBpbXBvcnQgdGhlbSBpbgogICAgICAgICAgICAvLyB0aGUgc2NvcGUuCmBgYAoKRWl0aGVyIHdheSwgaXQgc2hvdWxkIHdvcmsgZmluZSB3aXRoIG91ciBwcmV2aW91cyBjb2RlOgoKYGBgZWRpdGlvbjIwMTgKc3RydWN0IFR5cGUodTMyKTsKCmVudW0gRm9vIHsKICAgIEJhcih1MzIpLAp9CnVzZSBGb286Oio7CgpsZXQgVHlwZSh4KSA9IFR5cGUoMTIpOyAvLyBvayEKbWF0Y2ggVHlwZSgxMikgewogICAgVHlwZSh4KSA9PiB7fSAvLyBvayEKICAgIF8gPT4ge30KfQpgYGAKRTA1MzJQYXR0ZXJuIGFybSBkaWQgbm90IG1hdGNoIGV4cGVjdGVkIGtpbmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTMyCmVudW0gU3RhdGUgewogICAgU3VjY2VlZGVkLAogICAgRmFpbGVkKFN0cmluZyksCn0KCmZuIHByaW50X29uX2ZhaWx1cmUoc3RhdGU6ICZTdGF0ZSkgewogICAgbWF0Y2ggKnN0YXRlIHsKICAgICAgICAvLyBlcnJvcjogZXhwZWN0ZWQgdW5pdCBzdHJ1Y3QsIHVuaXQgdmFyaWFudCBvciBjb25zdGFudCwgZm91bmQgdHVwbGUKICAgICAgICAvLyAgICAgICAgdmFyaWFudCBgU3RhdGU6OkZhaWxlZGAKICAgICAgICBTdGF0ZTo6RmFpbGVkID0+IHByaW50bG4hKCJGYWlsZWQiKSwKICAgICAgICBfID0+ICgpCiAgICB9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZW5zdXJlIHRoZSBtYXRjaCBhcm0ga2luZCBpcyB0aGUgc2FtZSBhcyB0aGUgZXhwcmVzc2lvbgptYXRjaGVkLgoKRml4ZWQgZXhhbXBsZToKCmBgYAplbnVtIFN0YXRlIHsKICAgIFN1Y2NlZWRlZCwKICAgIEZhaWxlZChTdHJpbmcpLAp9CgpmbiBwcmludF9vbl9mYWlsdXJlKHN0YXRlOiAmU3RhdGUpIHsKICAgIG1hdGNoICpzdGF0ZSB7CiAgICAgICAgU3RhdGU6OkZhaWxlZChyZWYgbXNnKSA9PiBwcmludGxuISgiRmFpbGVkIHdpdGgge30iLCBtc2cpLAogICAgICAgIF8gPT4gKCkKICAgIH0KfQpgYGAKRTA1MzNBbiBpdGVtIHdoaWNoIGlzbid0IGEgdW5pdCBzdHJ1Y3QsIGEgdmFyaWFudCwgbm9yIGEgY29uc3RhbnQgaGFzIGJlZW4gdXNlZCBhcyBhCm1hdGNoIHBhdHRlcm4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTMzCnN0cnVjdCBUb3J0b2lzZTsKCmltcGwgVG9ydG9pc2UgewogICAgZm4gdHVydGxlKCZzZWxmKSAtPiB1MzIgeyAwIH0KfQoKbWF0Y2ggMHUzMiB7CiAgICBUb3J0b2lzZTo6dHVydGxlID0+IHt9IC8vIEVycm9yIQogICAgXyA9PiB7fQp9CmlmIGxldCBUb3J0b2lzZTo6dHVydGxlID0gMHUzMiB7fSAvLyBTYW1lIGVycm9yIQpgYGAKCklmIHlvdSB3YW50IHRvIG1hdGNoIGFnYWluc3QgYSB2YWx1ZSByZXR1cm5lZCBieSBhIG1ldGhvZCwgeW91IG5lZWQgdG8gYmluZCB0aGUKdmFsdWUgZmlyc3Q6CgpgYGAKc3RydWN0IFRvcnRvaXNlOwoKaW1wbCBUb3J0b2lzZSB7CiAgICBmbiB0dXJ0bGUoJnNlbGYpIC0+IHUzMiB7IDAgfQp9CgptYXRjaCAwdTMyIHsKICAgIHggaWYgeCA9PSBUb3J0b2lzZS50dXJ0bGUoKSA9PiB7fSAvLyBCb3VuZCBpbnRvIGB4YCB0aGVuIHdlIGNvbXBhcmUgaXQhCiAgICBfID0+IHt9Cn0KYGBgCkUwNTM0VGhlIGBpbmxpbmVgIGF0dHJpYnV0ZSB3YXMgbWFsZm9ybWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzNAojW2lubGluZSgpXSAvLyBlcnJvcjogZXhwZWN0ZWQgb25lIGFyZ3VtZW50CnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKZm4gbWFpbigpIHt9CmBgYAoKVGhlIHBhcmVudGhlc2l6ZWQgYGlubGluZWAgYXR0cmlidXRlIHJlcXVpcmVzIHRoZSBwYXJhbWV0ZXIgdG8gYmUgc3BlY2lmaWVkOgoKYGBgCiNbaW5saW5lKGFsd2F5cyldCmZuIHNvbWV0aGluZygpIHt9CmBgYAoKb3I6CgpgYGAKI1tpbmxpbmUobmV2ZXIpXQpmbiBzb21ldGhpbmcoKSB7fQpgYGAKCkFsdGVybmF0aXZlbHksIGEgcGFyZW4tbGVzcyB2ZXJzaW9uIG9mIHRoZSBhdHRyaWJ1dGUgbWF5IGJlIHVzZWQgdG8gaGludCB0aGUKY29tcGlsZXIgYWJvdXQgaW5saW5pbmcgb3Bwb3J0dW5pdHk6CgpgYGAKI1tpbmxpbmVdCmZuIHNvbWV0aGluZygpIHt9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBbYGlubGluZWAgYXR0cmlidXRlXVtpbmxpbmUtYXR0cmlidXRlXSBzZWN0aW9uCm9mIHRoZSBSZWZlcmVuY2UuCgpbaW5saW5lLWF0dHJpYnV0ZV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2F0dHJpYnV0ZXMvY29kZWdlbi5odG1sI3RoZS1pbmxpbmUtYXR0cmlidXRlCkUwNTM1QW4gdW5rbm93biBhcmd1bWVudCB3YXMgZ2l2ZW4gdG8gdGhlIGBpbmxpbmVgIGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MzUKI1tpbmxpbmUodW5rbm93bildIC8vIGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50CnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKZm4gbWFpbigpIHt9CmBgYAoKVGhlIGBpbmxpbmVgIGF0dHJpYnV0ZSBvbmx5IHN1cHBvcnRzIHR3byBhcmd1bWVudHM6CgogKiBhbHdheXMKICogbmV2ZXIKCkFsbCBvdGhlciBhcmd1bWVudHMgZ2l2ZW4gdG8gdGhlIGBpbmxpbmVgIGF0dHJpYnV0ZSB3aWxsIHJldHVybiB0aGlzIGVycm9yLgpFeGFtcGxlOgoKYGBgCiNbaW5saW5lKG5ldmVyKV0gLy8gb2shCnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKZm4gbWFpbigpIHt9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBbYGlubGluZWAgQXR0cmlidXRlXVtpbmxpbmUtYXR0cmlidXRlXSBzZWN0aW9uCm9mIHRoZSBSZWZlcmVuY2UuCgpbaW5saW5lLWF0dHJpYnV0ZV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2F0dHJpYnV0ZXMvY29kZWdlbi5odG1sI3RoZS1pbmxpbmUtYXR0cmlidXRlCkUwNTM2VGhlIGBub3RgIGNmZy1wcmVkaWNhdGUgd2FzIG1hbGZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MzYKI1tjZmcobm90KCkpXSAvLyBlcnJvcjogZXhwZWN0ZWQgMSBjZmctcGF0dGVybgpwdWIgZm4gc29tZXRoaW5nKCkge30KCnB1YiBmbiBtYWluKCkge30KYGBgCgpUaGUgYG5vdGAgcHJlZGljYXRlIGV4cGVjdHMgb25lIGNmZy1wYXR0ZXJuLiBFeGFtcGxlOgoKYGBgCiNbY2ZnKG5vdCh0YXJnZXRfb3MgPSAibGludXgiKSldIC8vIG9rIQpwdWIgZm4gc29tZXRoaW5nKCkge30KCnB1YiBmbiBtYWluKCkge30KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYGNmZ2AgYXR0cmlidXRlLCByZWFkIHRoZSBzZWN0aW9uIG9uCltDb25kaXRpb25hbCBDb21waWxhdGlvbl1bY29uZGl0aW9uYWwtY29tcGlsYXRpb25dIGluIHRoZSBSZWZlcmVuY2UuCgpbY29uZGl0aW9uYWwtY29tcGlsYXRpb25dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9jb25kaXRpb25hbC1jb21waWxhdGlvbi5odG1sCkUwNTM3QW4gdW5rbm93biBwcmVkaWNhdGUgd2FzIHVzZWQgaW5zaWRlIHRoZSBgY2ZnYCBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTM3CiNbY2ZnKHVua25vd24oKSldIC8vIGVycm9yOiBpbnZhbGlkIHByZWRpY2F0ZSBgdW5rbm93bmAKcHViIGZuIHNvbWV0aGluZygpIHt9CgpwdWIgZm4gbWFpbigpIHt9CmBgYAoKVGhlIGBjZmdgIGF0dHJpYnV0ZSBzdXBwb3J0cyBvbmx5IHRocmVlIGtpbmRzIG9mIHByZWRpY2F0ZXM6CgogKiBhbnkKICogYWxsCiAqIG5vdAoKRXhhbXBsZToKCmBgYAojW2NmZyhub3QodGFyZ2V0X29zID0gImxpbnV4IikpXSAvLyBvayEKcHViIGZuIHNvbWV0aGluZygpIHt9CgpwdWIgZm4gbWFpbigpIHt9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGBjZmdgIGF0dHJpYnV0ZSwgcmVhZCB0aGUgc2VjdGlvbiBvbgpbQ29uZGl0aW9uYWwgQ29tcGlsYXRpb25dW2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uXSBpbiB0aGUgUmVmZXJlbmNlLgoKW2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbApFMDUzOEF0dHJpYnV0ZSBjb250YWlucyBzYW1lIG1ldGEgaXRlbSBtb3JlIHRoYW4gb25jZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MzgKI1tkZXByZWNhdGVkKAogICAgc2luY2U9IjEuMC4wIiwKICAgIG5vdGU9IkZpcnN0IGRlcHJlY2F0aW9uIG5vdGUuIiwKICAgIG5vdGU9IlNlY29uZCBkZXByZWNhdGlvbiBub3RlLiIgLy8gZXJyb3I6IG11bHRpcGxlIHNhbWUgbWV0YSBpdGVtCildCmZuIGRlcHJlY2F0ZWRfZnVuY3Rpb24oKSB7fQpgYGAKCk1ldGEgaXRlbXMgYXJlIHRoZSBrZXktdmFsdWUgcGFpcnMgaW5zaWRlIG9mIGFuIGF0dHJpYnV0ZS4gRWFjaCBrZXkgbWF5IG9ubHkgYmUKdXNlZCBvbmNlIGluIGVhY2ggYXR0cmlidXRlLgoKVG8gZml4IHRoZSBwcm9ibGVtLCByZW1vdmUgYWxsIGJ1dCBvbmUgb2YgdGhlIG1ldGEgaXRlbXMgd2l0aCB0aGUgc2FtZSBrZXkuCgpFeGFtcGxlOgoKYGBgCiNbZGVwcmVjYXRlZCgKICAgIHNpbmNlPSIxLjAuMCIsCiAgICBub3RlPSJGaXJzdCBkZXByZWNhdGlvbiBub3RlLiIKKV0KZm4gZGVwcmVjYXRlZF9mdW5jdGlvbigpIHt9CmBgYApFMDUzOUFuIGludmFsaWQgbWV0YS1pdGVtIHdhcyB1c2VkIGluc2lkZSBhbiBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTM5CiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1tydXN0Y19kZXByZWNhdGVkKHJlYXNvbildIC8vIGVycm9yIQojW3Vuc3RhYmxlKGZlYXR1cmUgPSAiZGVwcmVjYXRlZF9mbiIsIGlzc3VlID0gIjEyMyIpXQpmbiBkZXByZWNhdGVkKCkge30KCiNbdW5zdGFibGUoZmVhdHVyZSA9ICJ1bnN0YWJsZV9zdHJ1Y3QiLCBpc3N1ZSldIC8vIGVycm9yIQpzdHJ1Y3QgVW5zdGFibGU7CgojW3J1c3RjX2NvbnN0X3Vuc3RhYmxlKGZlYXR1cmUpXSAvLyBlcnJvciEKY29uc3QgZm4gdW5zdGFibGVfZm4oKSB7fQoKI1tzdGFibGUoZmVhdHVyZSA9ICJzdGFibGVfc3RydWN0Iiwgc2luY2UpXSAvLyBlcnJvciEKc3RydWN0IFN0YWJsZTsKCiNbcnVzdGNfY29uc3Rfc3RhYmxlKGZlYXR1cmUpXSAvLyBlcnJvciEKY29uc3QgZm4gc3RhYmxlX2ZuKCkge30KYGBgCgpNZXRhIGl0ZW1zIGFyZSB0aGUga2V5LXZhbHVlIHBhaXJzIGluc2lkZSBvZiBhbiBhdHRyaWJ1dGUuClRvIGZpeCB0aGVzZSBpc3N1ZXMgeW91IG5lZWQgdG8gZ2l2ZSByZXF1aXJlZCBrZXktdmFsdWUgcGFpcnMuCgpgYGAKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3J1c3RjX2RlcHJlY2F0ZWQoc2luY2UgPSAiMS4zOS4wIiwgcmVhc29uID0gInJlYXNvbiIpXSAvLyBvayEKI1t1bnN0YWJsZShmZWF0dXJlID0gImRlcHJlY2F0ZWRfZm4iLCBpc3N1ZSA9ICIxMjMiKV0KZm4gZGVwcmVjYXRlZCgpIHt9CgojW3Vuc3RhYmxlKGZlYXR1cmUgPSAidW5zdGFibGVfc3RydWN0IiwgaXNzdWUgPSAiMTIzIildIC8vIG9rIQpzdHJ1Y3QgVW5zdGFibGU7CgojW3J1c3RjX2NvbnN0X3Vuc3RhYmxlKGZlYXR1cmUgPSAidW5zdGFibGVfZm4iLCBpc3N1ZSA9ICIxMjQiKV0gLy8gb2shCmNvbnN0IGZuIHVuc3RhYmxlX2ZuKCkge30KCiNbc3RhYmxlKGZlYXR1cmUgPSAic3RhYmxlX3N0cnVjdCIsIHNpbmNlID0gIjEuMzkuMCIpXSAvLyBvayEKc3RydWN0IFN0YWJsZTsKCiNbcnVzdGNfY29uc3Rfc3RhYmxlKGZlYXR1cmUgPSAic3RhYmxlX2ZuIiwgc2luY2UgPSAiMS4zOS4wIildIC8vIG9rIQpjb25zdCBmbiBzdGFibGVfZm4oKSB7fQpgYGAKRTA1NDFBbiB1bmtub3duIG1ldGEgaXRlbSB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NDEKI1tkZXByZWNhdGVkKAogICAgc2luY2U9IjEuMC4wIiwKICAgIC8vIGVycm9yOiB1bmtub3duIG1ldGEgaXRlbQogICAgcmVhc29uPSJFeGFtcGxlIGludmFsaWQgbWV0YSBpdGVtLiBTaG91bGQgYmUgJ25vdGUnIikKXQpmbiBkZXByZWNhdGVkX2Z1bmN0aW9uKCkge30KYGBgCgpNZXRhIGl0ZW1zIGFyZSB0aGUga2V5LXZhbHVlIHBhaXJzIGluc2lkZSBvZiBhbiBhdHRyaWJ1dGUuIFRoZSBrZXlzIHByb3ZpZGVkCm11c3QgYmUgb25lIG9mIHRoZSB2YWxpZCBrZXlzIGZvciB0aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZS4KClRvIGZpeCB0aGUgcHJvYmxlbSwgZWl0aGVyIHJlbW92ZSB0aGUgdW5rbm93biBtZXRhIGl0ZW0sIG9yIHJlbmFtZSBpdCBpZiB5b3UKcHJvdmlkZWQgdGhlIHdyb25nIG5hbWUuCgpJbiB0aGUgZXJyb25lb3VzIGNvZGUgZXhhbXBsZSBhYm92ZSwgdGhlIHdyb25nIG5hbWUgd2FzIHByb3ZpZGVkLCBzbyBjaGFuZ2luZwp0byBhIGNvcnJlY3Qgb25lIGl0IHdpbGwgZml4IHRoZSBlcnJvci4gRXhhbXBsZToKCmBgYAojW2RlcHJlY2F0ZWQoCiAgICBzaW5jZT0iMS4wLjAiLAogICAgbm90ZT0iVGhpcyBpcyBhIHZhbGlkIG1ldGEgaXRlbSBmb3IgdGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlLiIKKV0KZm4gZGVwcmVjYXRlZF9mdW5jdGlvbigpIHt9CmBgYApFMDU1ME1vcmUgdGhhbiBvbmUgYGRlcHJlY2F0ZWRgIGF0dHJpYnV0ZSBoYXMgYmVlbiBwdXQgb24gYW4gaXRlbS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NTAKI1tkZXByZWNhdGVkKG5vdGUgPSAiYmVjYXVzZSB3aHkgbm90PyIpXQojW2RlcHJlY2F0ZWQobm90ZSA9ICJyaWdodD8iKV0gLy8gZXJyb3IhCmZuIHRoZV9iYW5pc2hlZCgpIHt9CmBgYAoKVGhlIGBkZXByZWNhdGVkYCBhdHRyaWJ1dGUgY2FuIG9ubHkgYmUgcHJlc2VudCAqKm9uY2UqKiBvbiBhbiBpdGVtLgoKYGBgCiNbZGVwcmVjYXRlZChub3RlID0gImJlY2F1c2Ugd2h5IG5vdCwgcmlnaHQ/IildCmZuIHRoZV9iYW5pc2hlZCgpIHt9IC8vIG9rIQpgYGAKRTA1NTFBbiBpbnZhbGlkIG1ldGEtaXRlbSB3YXMgdXNlZCBpbnNpZGUgYW4gYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU1MQojW2RlcHJlY2F0ZWQobm90ZSldIC8vIGVycm9yIQpmbiBpX2FtX2RlcHJlY2F0ZWQoKSB7fQpgYGAKCk1ldGEgaXRlbXMgYXJlIHRoZSBrZXktdmFsdWUgcGFpcnMgaW5zaWRlIG9mIGFuIGF0dHJpYnV0ZS4gVG8gZml4IHRoaXMgaXNzdWUsCnlvdSBuZWVkIHRvIGdpdmUgYSB2YWx1ZSB0byB0aGUgYG5vdGVgIGtleS4gRXhhbXBsZToKCmBgYAojW2RlcHJlY2F0ZWQobm90ZSA9ICJiZWNhdXNlIildIC8vIG9rIQpmbiBpX2FtX2RlcHJlY2F0ZWQoKSB7fQpgYGAKRTA1NTJBIHVucmVjb2duaXplZCByZXByZXNlbnRhdGlvbiBhdHRyaWJ1dGUgd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTUyCiNbcmVwcihEKV0gLy8gZXJyb3I6IHVucmVjb2duaXplZCByZXByZXNlbnRhdGlvbiBoaW50CnN0cnVjdCBNeVN0cnVjdCB7CiAgICBteV9maWVsZDogdXNpemUKfQpgYGAKCllvdSBjYW4gdXNlIGEgYHJlcHJgIGF0dHJpYnV0ZSB0byB0ZWxsIHRoZSBjb21waWxlciBob3cgeW91IHdhbnQgYSBzdHJ1Y3Qgb3IKZW51bSB0byBiZSBsYWlkIG91dCBpbiBtZW1vcnkuCgpNYWtlIHN1cmUgeW91J3JlIHVzaW5nIG9uZSBvZiB0aGUgc3VwcG9ydGVkIG9wdGlvbnM6CgpgYGAKI1tyZXByKEMpXSAvLyBvayEKc3RydWN0IE15U3RydWN0IHsKICAgIG15X2ZpZWxkOiB1c2l6ZQp9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc3BlY2lmeWluZyByZXByZXNlbnRhdGlvbnMsIHNlZSB0aGUgWyJBbHRlcm5hdGl2ZQpSZXByZXNlbnRhdGlvbnMiIHNlY3Rpb25dIG9mIHRoZSBSdXN0b25vbWljb24uCgpbIkFsdGVybmF0aXZlIFJlcHJlc2VudGF0aW9ucyIgc2VjdGlvbl06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvbm9taWNvbi9vdGhlci1yZXBycy5odG1sCkUwNTU0RmVhdHVyZSBhdHRyaWJ1dGVzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIG5pZ2h0bHkgcmVsZWFzZSBjaGFubmVsLiBTdGFibGUgb3IKYmV0YSBjb21waWxlcnMgd2lsbCBub3QgY29tcGx5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGlnbm9yZSAoZGVwZW5kcyBvbiByZWxlYXNlIGNoYW5uZWwpCiMhW2ZlYXR1cmUobm9uX2FzY2lpX2lkZW50cyldIC8vIGVycm9yOiBgIyFbZmVhdHVyZV1gIG1heSBub3QgYmUgdXNlZCBvbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHN0YWJsZSByZWxlYXNlIGNoYW5uZWwKYGBgCgpJZiB5b3UgbmVlZCB0aGUgZmVhdHVyZSwgbWFrZSBzdXJlIHRvIHVzZSBhIG5pZ2h0bHkgcmVsZWFzZSBvZiB0aGUgY29tcGlsZXIKKGJ1dCBiZSB3YXJuZWQgdGhhdCB0aGUgZmVhdHVyZSBtYXkgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGluIHRoZSBmdXR1cmUpLgpFMDU1NlRoZSBgZmVhdHVyZWAgYXR0cmlidXRlIHdhcyBiYWRseSBmb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTU2CiMhW2ZlYXR1cmUoZm9vX2Jhcl9iYXosIGZvbyhiYXIpLCBmb28gPSAiYmF6IiwgZm9vKV0gLy8gZXJyb3IhCiMhW2ZlYXR1cmVdIC8vIGVycm9yIQojIVtmZWF0dXJlID0gImZvbyJdIC8vIGVycm9yIQpgYGAKClRoZSBgZmVhdHVyZWAgYXR0cmlidXRlIG9ubHkgYWNjZXB0IGEgImZlYXR1cmUgZmxhZyIgYW5kIGNhbiBvbmx5IGJlIHVzZWQgb24KbmlnaHRseS4gRXhhbXBsZToKCmBgYGlnbm9yZSAob25seSB3b3JrcyBpbiBuaWdodGx5KQojIVtmZWF0dXJlKGZsYWcpXQpgYGAKRTA1NTdBIGZlYXR1cmUgYXR0cmlidXRlIG5hbWVkIGEgZmVhdHVyZSB0aGF0IGhhcyBiZWVuIHJlbW92ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTU3CiMhW2ZlYXR1cmUobWFuYWdlZF9ib3hlcyldIC8vIGVycm9yOiBmZWF0dXJlIGhhcyBiZWVuIHJlbW92ZWQKYGBgCgpEZWxldGUgdGhlIG9mZmVuZGluZyBmZWF0dXJlIGF0dHJpYnV0ZS4KRTA1NTlBbiB1bmtub3duIGZpZWxkIHdhcyBzcGVjaWZpZWQgaW50byBhbiBlbnVtJ3Mgc3RydWN0dXJlIHZhcmlhbnQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTU5CmVudW0gRmllbGQgewogICAgRm9vbCB7IHg6IHUzMiB9LAp9CgpsZXQgcyA9IEZpZWxkOjpGb29sIHsgam9rZTogMCB9OwovLyBlcnJvcjogc3RydWN0IHZhcmlhbnQgYEZpZWxkOjpGb29sYCBoYXMgbm8gZmllbGQgbmFtZWQgYGpva2VgCmBgYAoKVmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIGZpZWxkJ3MgbmFtZSBvciB0aGF0IHRoZSBmaWVsZCBleGlzdHMuIEV4YW1wbGU6CgpgYGAKZW51bSBGaWVsZCB7CiAgICBGb29sIHsgam9rZTogdTMyIH0sCn0KCmxldCBzID0gRmllbGQ6OkZvb2wgeyBqb2tlOiAwIH07IC8vIG9rIQpgYGAKRTA1NjBBbiB1bmtub3duIGZpZWxkIHdhcyBzcGVjaWZpZWQgaW50byBhIHN0cnVjdHVyZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NjAKc3RydWN0IFNpbWJhIHsKICAgIG1vdGhlcjogdTMyLAp9CgpsZXQgcyA9IFNpbWJhIHsgbW90aGVyOiAxLCBmYXRoZXI6IDAgfTsKLy8gZXJyb3I6IHN0cnVjdHVyZSBgU2ltYmFgIGhhcyBubyBmaWVsZCBuYW1lZCBgZmF0aGVyYApgYGAKClZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSBmaWVsZCdzIG5hbWUgb3IgdGhhdCB0aGUgZmllbGQgZXhpc3RzLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBTaW1iYSB7CiAgICBtb3RoZXI6IHUzMiwKICAgIGZhdGhlcjogdTMyLAp9CgpsZXQgcyA9IFNpbWJhIHsgbW90aGVyOiAxLCBmYXRoZXI6IDAgfTsgLy8gb2shCmBgYApFMDU2MUEgbm9uLWlkZW50IG9yIG5vbi13aWxkY2FyZCBwYXR0ZXJuIGhhcyBiZWVuIHVzZWQgYXMgYSBwYXJhbWV0ZXIgb2YgYSBmdW5jdGlvbgpwb2ludGVyIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTYxCnR5cGUgQTEgPSBmbihtdXQgcGFyYW06IHU4KTsgLy8gZXJyb3IhCnR5cGUgQTIgPSBmbigmcGFyYW06IHUzMik7IC8vIGVycm9yIQpgYGAKCldoZW4gdXNpbmcgYW4gYWxpYXMgb3ZlciBhIGZ1bmN0aW9uIHR5cGUsIHlvdSBjYW5ub3QgZS5nLiBkZW5vdGUgYSBwYXJhbWV0ZXIgYXMKYmVpbmcgbXV0YWJsZS4KClRvIGZpeCB0aGUgaXNzdWUsIHJlbW92ZSBwYXR0ZXJucyAoYF9gIGlzIGFsbG93ZWQgdGhvdWdoKS4gRXhhbXBsZToKCmBgYAp0eXBlIEExID0gZm4ocGFyYW06IHU4KTsgLy8gb2shCnR5cGUgQTIgPSBmbihfOiB1MzIpOyAvLyBvayEKYGBgCgpZb3UgY2FuIGFsc28gb21pdCB0aGUgcGFyYW1ldGVyIG5hbWU6CgpgYGAKdHlwZSBBMyA9IGZuKGkxNik7IC8vIG9rIQpgYGAKRTA1NjJBYnN0cmFjdCByZXR1cm4gdHlwZXMgKHdyaXR0ZW4gYGltcGwgVHJhaXRgIGZvciBzb21lIHRyYWl0IGBUcmFpdGApIGFyZSBvbmx5CmFsbG93ZWQgYXMgZnVuY3Rpb24gYW5kIGluaGVyZW50IGltcGwgcmV0dXJuIHR5cGVzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2MgpmbiBtYWluKCkgewogICAgbGV0IGNvdW50X3RvX3RlbjogaW1wbCBJdGVyYXRvcjxJdGVtPXVzaXplPiA9IDAuLjEwOwogICAgLy8gZXJyb3I6IGBpbXBsIFRyYWl0YCBub3QgYWxsb3dlZCBvdXRzaWRlIG9mIGZ1bmN0aW9uIGFuZCBpbmhlcmVudCBtZXRob2QKICAgIC8vICAgICAgICByZXR1cm4gdHlwZXMKICAgIGZvciBpIGluIGNvdW50X3RvX3RlbiB7CiAgICAgICAgcHJpbnRsbiEoInt9IiwgaSk7CiAgICB9Cn0KYGBgCgpNYWtlIHN1cmUgYGltcGwgVHJhaXRgIG9ubHkgYXBwZWFycyBpbiByZXR1cm4tdHlwZSBwb3NpdGlvbi4KCmBgYApmbiBjb3VudF90b19uKG46IHVzaXplKSAtPiBpbXBsIEl0ZXJhdG9yPEl0ZW09dXNpemU+IHsKICAgIDAuLm4KfQoKZm4gbWFpbigpIHsKICAgIGZvciBpIGluIGNvdW50X3RvX24oMTApIHsgIC8vIG9rIQogICAgICAgIHByaW50bG4hKCJ7fSIsIGkpOwogICAgfQp9CmBgYAoKU2VlIFtSRkMgMTUyMl0gZm9yIG1vcmUgZGV0YWlscy4KCltSRkMgMTUyMl06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzE1MjItY29uc2VydmF0aXZlLWltcGwtdHJhaXQubWQKRTA1NjVBIGxpdGVyYWwgd2FzIHVzZWQgaW4gYSBidWlsdC1pbiBhdHRyaWJ1dGUgdGhhdCBkb2Vzbid0IHN1cHBvcnQgbGl0ZXJhbHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTY1CiNbcmVwcigiQyIpXSAvLyBlcnJvcjogbWV0YSBpdGVtIGluIGByZXByYCBtdXN0IGJlIGFuIGlkZW50aWZpZXIKc3RydWN0IFJlcHIge30KCmZuIG1haW4oKSB7fQpgYGAKCkxpdGVyYWxzIGluIGF0dHJpYnV0ZXMgYXJlIG5ldyBhbmQgbGFyZ2VseSB1bnN1cHBvcnRlZCBpbiBidWlsdC1pbiBhdHRyaWJ1dGVzLgpXb3JrIHRvIHN1cHBvcnQgbGl0ZXJhbHMgd2hlcmUgYXBwcm9wcmlhdGUgaXMgb25nb2luZy4gVHJ5IHVzaW5nIGFuIHVucXVvdGVkCm5hbWUgaW5zdGVhZDoKCmBgYAojW3JlcHIoQyldIC8vIG9rIQpzdHJ1Y3QgUmVwciB7fQoKZm4gbWFpbigpIHt9CmBgYApFMDU2NkNvbmZsaWN0aW5nIHJlcHJlc2VudGF0aW9uIGhpbnRzIGhhdmUgYmVlbiB1c2VkIG9uIGEgc2FtZSBpdGVtLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2NgojW3JlcHIodTMyLCB1NjQpXQplbnVtIFJlcHIgeyBBIH0KYGBgCgpJbiBtb3N0IGNhc2VzIChpZiBub3QgYWxsKSwgdXNpbmcganVzdCBvbmUgcmVwcmVzZW50YXRpb24gaGludCBpcyBtb3JlIHRoYW4KZW5vdWdoLiBJZiB5b3Ugd2FudCB0byBoYXZlIGEgcmVwcmVzZW50YXRpb24gaGludCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQKYXJjaGl0ZWN0dXJlLCB1c2UgYGNmZ19hdHRyYC4gRXhhbXBsZToKCmBgYAojW2NmZ19hdHRyKGxpbnV4LCByZXByKHUzMikpXQojW2NmZ19hdHRyKG5vdChsaW51eCksIHJlcHIodTY0KSldCmVudW0gUmVwciB7IEEgfQpgYGAKRTA1NjdHZW5lcmljcyBoYXZlIGJlZW4gdXNlZCBvbiBhbiBhdXRvIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2NwojIVtmZWF0dXJlKG9wdGluX2J1aWx0aW5fdHJhaXRzKV0KCmF1dG8gdHJhaXQgR2VuZXJpYzxUPiB7fSAvLyBlcnJvciEKIyBmbiBtYWluKCkge30KYGBgCgpTaW5jZSBhbiBhdXRvIHRyYWl0IGlzIGltcGxlbWVudGVkIG9uIGFsbCBleGlzdGluZyB0eXBlcywgdGhlCmNvbXBpbGVyIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGluZmVyIHRoZSB0eXBlcyBvZiB0aGUgdHJhaXQncyBnZW5lcmljCnBhcmFtZXRlcnMuCgpUbyBmaXggdGhpcyBpc3N1ZSwganVzdCByZW1vdmUgdGhlIGdlbmVyaWNzOgoKYGBgCiMhW2ZlYXR1cmUob3B0aW5fYnVpbHRpbl90cmFpdHMpXQoKYXV0byB0cmFpdCBHZW5lcmljIHt9IC8vIG9rIQojIGZuIG1haW4oKSB7fQpgYGAKRTA1NjhBIHN1cGVyIHRyYWl0IGhhcyBiZWVuIGFkZGVkIHRvIGFuIGF1dG8gdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTY4CiMhW2ZlYXR1cmUob3B0aW5fYnVpbHRpbl90cmFpdHMpXQoKYXV0byB0cmFpdCBCb3VuZCA6IENvcHkge30gLy8gZXJyb3IhCgpmbiBtYWluKCkge30KYGBgCgpTaW5jZSBhbiBhdXRvIHRyYWl0IGlzIGltcGxlbWVudGVkIG9uIGFsbCBleGlzdGluZyB0eXBlcywgYWRkaW5nIGEgc3VwZXIgdHJhaXQKd291bGQgZmlsdGVyIG91dCBhIGxvdCBvZiB0aG9zZSB0eXBlcy4gSW4gdGhlIGN1cnJlbnQgZXhhbXBsZSwgYWxtb3N0IG5vbmUgb2YKYWxsIHRoZSBleGlzdGluZyB0eXBlcyBjb3VsZCBpbXBsZW1lbnQgYEJvdW5kYCBiZWNhdXNlIHZlcnkgZmV3IG9mIHRoZW0gaGF2ZSB0aGUKYENvcHlgIHRyYWl0LgoKVG8gZml4IHRoaXMgaXNzdWUsIGp1c3QgcmVtb3ZlIHRoZSBzdXBlciB0cmFpdDoKCmBgYAojIVtmZWF0dXJlKG9wdGluX2J1aWx0aW5fdHJhaXRzKV0KCmF1dG8gdHJhaXQgQm91bmQge30gLy8gb2shCgpmbiBtYWluKCkge30KYGBgCkUwNTY5SWYgYW4gaW1wbCBoYXMgYSBnZW5lcmljIHBhcmFtZXRlciB3aXRoIHRoZSBgI1ttYXlfZGFuZ2xlXWAgYXR0cmlidXRlLCB0aGVuCnRoYXQgaW1wbCBtdXN0IGJlIGRlY2xhcmVkIGFzIGFuIGB1bnNhZmUgaW1wbGAuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTY5CiMhW2ZlYXR1cmUoZHJvcGNrX2V5ZXBhdGNoKV0KCnN0cnVjdCBGb288WD4oWCk7CmltcGw8I1ttYXlfZGFuZ2xlXSBYPiBEcm9wIGZvciBGb288WD4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsgfQp9CmBgYAoKSW4gdGhpcyBleGFtcGxlLCB3ZSBhcmUgYXNzZXJ0aW5nIHRoYXQgdGhlIGRlc3RydWN0b3IgZm9yIGBGb29gIHdpbGwgbm90CmFjY2VzcyBhbnkgZGF0YSBvZiB0eXBlIGBYYCwgYW5kIHJlcXVpcmUgdGhpcyBhc3NlcnRpb24gdG8gYmUgdHJ1ZSBmb3IKb3ZlcmFsbCBzYWZldHkgaW4gb3VyIHByb2dyYW0uIFRoZSBjb21waWxlciBkb2VzIG5vdCBjdXJyZW50bHkgYXR0ZW1wdCB0bwp2ZXJpZnkgdGhpcyBhc3NlcnRpb247IHRoZXJlZm9yZSB3ZSBtdXN0IHRhZyB0aGlzIGBpbXBsYCBhcyB1bnNhZmUuCkUwNTcwVGhlIHJlcXVlc3RlZCBBQkkgaXMgdW5zdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgdGFyZ2V0LgoKVGhlIHJ1c3QgY29tcGlsZXIgbWFpbnRhaW5zIGZvciBlYWNoIHRhcmdldCBhIGxpc3Qgb2YgdW5zdXBwb3J0ZWQgQUJJcyBvbgp0aGF0IHRhcmdldC4gSWYgYW4gQUJJIGlzIHByZXNlbnQgaW4gc3VjaCBhIGxpc3QgdGhpcyB1c3VhbGx5IG1lYW5zIHRoYXQgdGhlCnRhcmdldCAvIEFCSSBjb21iaW5hdGlvbiBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQgYnkgbGx2bS4KCklmIG5lY2Vzc2FyeSwgeW91IGNhbiBjaXJjdW12ZW50IHRoaXMgY2hlY2sgdXNpbmcgY3VzdG9tIHRhcmdldCBzcGVjaWZpY2F0aW9ucy4KRTA1NzFBIGBicmVha2Agc3RhdGVtZW50IHdpdGggYW4gYXJndW1lbnQgYXBwZWFyZWQgaW4gYSBub24tYGxvb3BgIGxvb3AuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTcxCiMgbGV0IG11dCBpID0gMTsKIyBmbiBzYXRpc2ZpZWQobjogdXNpemUpIC0+IGJvb2wgeyBuICUgMjMgPT0gMCB9CmxldCByZXN1bHQgPSB3aGlsZSB0cnVlIHsKICAgIGlmIHNhdGlzZmllZChpKSB7CiAgICAgICAgYnJlYWsgMiAqIGk7IC8vIGVycm9yOiBgYnJlYWtgIHdpdGggdmFsdWUgZnJvbSBhIGB3aGlsZWAgbG9vcAogICAgfQogICAgaSArPSAxOwp9OwpgYGAKClRoZSBgYnJlYWtgIHN0YXRlbWVudCBjYW4gdGFrZSBhbiBhcmd1bWVudCAod2hpY2ggd2lsbCBiZSB0aGUgdmFsdWUgb2YgdGhlIGxvb3AKZXhwcmVzc2lvbiBpZiB0aGUgYGJyZWFrYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQpIGluIGBsb29wYCBsb29wcywgYnV0IG5vdApgZm9yYCwgYHdoaWxlYCwgb3IgYHdoaWxlIGxldGAgbG9vcHMuCgpNYWtlIHN1cmUgYGJyZWFrIHZhbHVlO2Agc3RhdGVtZW50cyBvbmx5IG9jY3VyIGluIGBsb29wYCBsb29wczoKCmBgYAojIGxldCBtdXQgaSA9IDE7CiMgZm4gc2F0aXNmaWVkKG46IHVzaXplKSAtPiBib29sIHsgbiAlIDIzID09IDAgfQpsZXQgcmVzdWx0ID0gbG9vcCB7IC8vIFRoaXMgaXMgbm93IGEgImxvb3AiIGxvb3AuCiAgICBpZiBzYXRpc2ZpZWQoaSkgewogICAgICAgIGJyZWFrIDIgKiBpOyAvLyBvayEKICAgIH0KICAgIGkgKz0gMTsKfTsKYGBgCkUwNTcyQSByZXR1cm4gc3RhdGVtZW50IHdhcyBmb3VuZCBvdXRzaWRlIG9mIGEgZnVuY3Rpb24gYm9keS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NzIKY29uc3QgRk9POiB1MzIgPSByZXR1cm4gMDsgLy8gZXJyb3I6IHJldHVybiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBmdW5jdGlvbiBib2R5CgpmbiBtYWluKCkge30KYGBgCgpUbyBmaXggdGhpcyBpc3N1ZSwganVzdCByZW1vdmUgdGhlIHJldHVybiBrZXl3b3JkIG9yIG1vdmUgdGhlIGV4cHJlc3Npb24gaW50byBhCmZ1bmN0aW9uLiBFeGFtcGxlOgoKYGBgCmNvbnN0IEZPTzogdTMyID0gMDsKCmZuIHNvbWVfZm4oKSAtPiB1MzIgewogICAgcmV0dXJuIEZPTzsKfQoKZm4gbWFpbigpIHsKICAgIHNvbWVfZm4oKTsKfQpgYGAKRTA1NzNTb21ldGhpbmcgb3RoZXIgdGhhbiBhIHR5cGUgaGFzIGJlZW4gdXNlZCB3aGVuIG9uZSB3YXMgZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDU3MwplbnVtIERyYWdvbiB7CiAgICBCb3JuLAp9CgpmbiBvYmxpdmlvbigpIC0+IERyYWdvbjo6Qm9ybiB7IC8vIGVycm9yIQogICAgRHJhZ29uOjpCb3JuCn0KCmNvbnN0IEhPQkJJVDogdTMyID0gMjsKaW1wbCBIT0JCSVQge30gLy8gZXJyb3IhCgplbnVtIFdpemFyZCB7CiAgICBHYW5kYWxmLAogICAgU2FydW1hbiwKfQoKdHJhaXQgSXNlbmdhcmQgewogICAgZm4gd2l6YXJkKF86IFdpemFyZDo6U2FydW1hbik7IC8vIGVycm9yIQp9CmBgYAoKSW4gYWxsIHRoZXNlIGVycm9ycywgYSB0eXBlIHdhcyBleHBlY3RlZC4gRm9yIGV4YW1wbGUsIGluIHRoZSBmaXJzdCBlcnJvciwgaWYKd2Ugd2FudCB0byByZXR1cm4gdGhlIGBCb3JuYCB2YXJpYW50IGZyb20gdGhlIGBEcmFnb25gIGVudW0sIHdlIG11c3Qgc2V0IHRoZQpmdW5jdGlvbiB0byByZXR1cm4gdGhlIGVudW0gYW5kIG5vdCBpdHMgdmFyaWFudDoKCmBgYAplbnVtIERyYWdvbiB7CiAgICBCb3JuLAp9CgpmbiBvYmxpdmlvbigpIC0+IERyYWdvbiB7IC8vIG9rIQogICAgRHJhZ29uOjpCb3JuCn0KYGBgCgpJbiB0aGUgc2Vjb25kIGVycm9yLCB5b3UgY2FuJ3QgaW1wbGVtZW50IHNvbWV0aGluZyBvbiBhbiBpdGVtLCBvbmx5IG9uIHR5cGVzLgpXZSB3b3VsZCBuZWVkIHRvIGNyZWF0ZSBhIG5ldyB0eXBlIGlmIHdlIHdhbnRlZCB0byBkbyBzb21ldGhpbmcgc2ltaWxhcjoKCmBgYApzdHJ1Y3QgSG9iYml0KHUzMik7IC8vIHdlIGNyZWF0ZSBhIG5ldyB0eXBlCgpjb25zdCBIT0JCSVQ6IEhvYmJpdCA9IEhvYmJpdCgyKTsKaW1wbCBIb2JiaXQge30gLy8gb2shCmBgYAoKSW4gdGhlIHRoaXJkIGNhc2UsIHdlIHRyaWVkIHRvIG9ubHkgZXhwZWN0IG9uZSB2YXJpYW50IG9mIHRoZSBgV2l6YXJkYCBlbnVtLAp3aGljaCBpcyBub3QgcG9zc2libGUuIFRvIG1ha2UgdGhpcyB3b3JrLCB3ZSBuZWVkIHRvIHVzaW5nIHBhdHRlcm4gbWF0Y2hpbmcKb3ZlciB0aGUgYFdpemFyZGAgZW51bToKCmBgYAplbnVtIFdpemFyZCB7CiAgICBHYW5kYWxmLAogICAgU2FydW1hbiwKfQoKdHJhaXQgSXNlbmdhcmQgewogICAgZm4gd2l6YXJkKHc6IFdpemFyZCkgeyAvLyBvayEKICAgICAgICBtYXRjaCB3IHsKICAgICAgICAgICAgV2l6YXJkOjpTYXJ1bWFuID0+IHsKICAgICAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZwogICAgICAgICAgICB9CiAgICAgICAgICAgIF8gPT4ge30gLy8gaWdub3JlIGV2ZXJ5dGhpbmcgZWxzZQogICAgICAgIH0KICAgIH0KfQpgYGAKRTA1NzRTb21ldGhpbmcgb3RoZXIgdGhhbiBhIHN0cnVjdCwgdmFyaWFudCBvciB1bmlvbiBoYXMgYmVlbiB1c2VkIHdoZW4gb25lIHdhcwpleHBlY3RlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NzQKbW9kIE1vcmRvciB7fQoKbGV0IHNhdXJvbiA9IE1vcmRvciB7IHg6ICgpIH07IC8vIGVycm9yIQoKZW51bSBKYWsgewogICAgRGF4dGVyIHsgaTogaXNpemUgfSwKfQoKbGV0IGVjbyA9IEphazo6RGF4dGVyIHsgaTogMSB9OwptYXRjaCBlY28gewogICAgSmFrIHsgaSB9ID0+IHt9IC8vIGVycm9yIQp9CmBgYAoKSW4gYWxsIHRoZXNlIGVycm9ycywgYSB0eXBlIHdhcyBleHBlY3RlZC4gRm9yIGV4YW1wbGUsIGluIHRoZSBmaXJzdCBlcnJvciwKd2UgdHJpZWQgdG8gaW5zdGFudGlhdGUgdGhlIGBNb3Jkb3JgIG1vZHVsZSwgd2hpY2ggaXMgaW1wb3NzaWJsZS4gSWYgeW91IHdhbnQKdG8gaW5zdGFudGlhdGUgYSB0eXBlIGluc2lkZSBhIG1vZHVsZSwgeW91IGNhbiBkbyBpdCBhcyBmb2xsb3c6CgpgYGAKbW9kIE1vcmRvciB7CiAgICBwdWIgc3RydWN0IFRoZVJpbmcgewogICAgICAgIHB1YiB4OiB1c2l6ZSwKICAgIH0KfQoKbGV0IHNhdXJvbiA9IE1vcmRvcjo6VGhlUmluZyB7IHg6IDEgfTsgLy8gb2shCmBgYAoKSW4gdGhlIHNlY29uZCBlcnJvciwgd2UgdHJpZWQgdG8gYmluZCB0aGUgYEpha2AgZW51bSBkaXJlY3RseSwgd2hpY2ggaXMgbm90CnBvc3NpYmxlOiB5b3UgY2FuIG9ubHkgYmluZCBvbmUgb2YgaXRzIHZhcmlhbnRzLiBUbyBkbyBzbzoKCmBgYAplbnVtIEphayB7CiAgICBEYXh0ZXIgeyBpOiBpc2l6ZSB9LAp9CgpsZXQgZWNvID0gSmFrOjpEYXh0ZXIgeyBpOiAxIH07Cm1hdGNoIGVjbyB7CiAgICBKYWs6OkRheHRlciB7IGkgfSA9PiB7fSAvLyBvayEKfQpgYGAKRTA1NzVTb21ldGhpbmcgb3RoZXIgdGhhbiBhIHR5cGUgb3IgYW4gYXNzb2NpYXRlZCB0eXBlIHdhcyBnaXZlbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NzUKZW51bSBSaWNrIHsgTW9ydHkgfQoKbGV0IF86IDx1OCBhcyBSaWNrPjo6TW9ydHk7IC8vIGVycm9yIQoKdHJhaXQgQWdlIHsKICAgIHR5cGUgRW1waXJlOwogICAgZm4gTXl0aG9sb2d5KCkge30KfQoKaW1wbCBBZ2UgZm9yIHU4IHsKICAgIHR5cGUgRW1waXJlID0gdTE2Owp9CgpsZXQgXzogPHU4IGFzIEFnZT46Ok15dGhvbG9neTsgLy8gZXJyb3IhCmBgYAoKSW4gYm90aCBjYXNlcywgd2UncmUgZGVjbGFyaW5nIGEgdmFyaWFibGUgKGNhbGxlZCBgX2ApIGFuZCB3ZSdyZSBnaXZpbmcgaXQgYQp0eXBlLiBIb3dldmVyLCBgPHU4IGFzIFJpY2s+OjpNb3J0eWAgYW5kIGA8dTggYXMgQWdlPjo6TXl0aG9sb2d5YCBhcmVuJ3QgdHlwZXMsCnRoZXJlZm9yZSB0aGUgY29tcGlsZXIgdGhyb3dzIGFuIGVycm9yLgoKYDx1OCBhcyBSaWNrPjo6TW9ydHlgIGlzIGFuIGVudW0gdmFyaWFudCwgeW91IGNhbm5vdCB1c2UgYSB2YXJpYW50IGFzIGEgdHlwZSwKeW91IGhhdmUgdG8gdXNlIHRoZSBlbnVtIGRpcmVjdGx5OgoKYGBgCmVudW0gUmljayB7IE1vcnR5IH0KCmxldCBfOiBSaWNrOyAvLyBvayEKYGBgCgpgPHU4IGFzIEFnZT46Ok15dGhvbG9neWAgaXMgYSB0cmFpdCBtZXRob2QsIHdoaWNoIGlzIGRlZmluaXRlbHkgbm90IGEgdHlwZS4KSG93ZXZlciwgdGhlIGBBZ2VgIHRyYWl0IHByb3ZpZGVzIGFuIGFzc29jaWF0ZWQgdHlwZSBgRW1waXJlYCB3aGljaCBjYW4gYmUKdXNlZCBhcyBhIHR5cGU6CgpgYGAKdHJhaXQgQWdlIHsKICAgIHR5cGUgRW1waXJlOwogICAgZm4gTXl0aG9sb2d5KCkge30KfQoKaW1wbCBBZ2UgZm9yIHU4IHsKICAgIHR5cGUgRW1waXJlID0gdTE2Owp9CgpsZXQgXzogPHU4IGFzIEFnZT46OkVtcGlyZTsgLy8gb2shCmBgYApFMDU3NkFuIGFzc29jaWF0ZWQgaXRlbSB3YXNuJ3QgZm91bmQgaW4gdGhlIGdpdmVuIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTc2CnRyYWl0IEhlbGxvIHsKICAgIHR5cGUgV2hvOwoKICAgIGZuIGhlbGxvKCkgLT4gPFNlbGYgYXMgSGVsbG8+OjpZb3U7IC8vIGVycm9yIQp9CmBgYAoKSW4gdGhpcyBleGFtcGxlLCB3ZSB0cmllZCB0byB1c2UgdGhlIG5vbi1leGlzdGVudCBhc3NvY2lhdGVkIHR5cGUgYFlvdWAgb2YgdGhlCmBIZWxsb2AgdHJhaXQuIFRvIGZpeCB0aGlzIGVycm9yLCB1c2UgYW4gZXhpc3RpbmcgYXNzb2NpYXRlZCB0eXBlOgoKYGBgCnRyYWl0IEhlbGxvIHsKICAgIHR5cGUgV2hvOwoKICAgIGZuIGhlbGxvKCkgLT4gPFNlbGYgYXMgSGVsbG8+OjpXaG87IC8vIG9rIQp9CmBgYApFMDU3N1NvbWV0aGluZyBvdGhlciB0aGFuIGEgbW9kdWxlIHdhcyBmb3VuZCBpbiB2aXNpYmlsaXR5IHNjb3BlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU3NyxlZGl0aW9uMjAxOApwdWIgc3RydWN0IFNlYTsKCnB1YiAoaW4gY3JhdGU6OlNlYSkgc3RydWN0IFNoYXJrOyAvLyBlcnJvciEKCmZuIG1haW4oKSB7fQpgYGAKCmBTZWFgIGlzIG5vdCBhIG1vZHVsZSwgdGhlcmVmb3JlIGl0IGlzIGludmFsaWQgdG8gdXNlIGl0IGluIGEgdmlzaWJpbGl0eSBwYXRoLgpUbyBmaXggdGhpcyBlcnJvciB3ZSBuZWVkIHRvIGVuc3VyZSBgU2VhYCBpcyBhIG1vZHVsZS4KClBsZWFzZSBub3RlIHRoYXQgdGhlIHZpc2liaWxpdHkgc2NvcGUgY2FuIG9ubHkgYmUgYXBwbGllZCBvbiBhbmNlc3RvcnMhCgpgYGBlZGl0aW9uMjAxOApwdWIgbW9kIFNlYSB7CiAgICBwdWIgKGluIGNyYXRlOjpTZWEpIHN0cnVjdCBTaGFyazsgLy8gb2shCn0KCmZuIG1haW4oKSB7fQpgYGAKRTA1NzhBIG1vZHVsZSBjYW5ub3QgYmUgZm91bmQgYW5kIHRoZXJlZm9yZSwgdGhlIHZpc2liaWxpdHkgY2Fubm90IGJlIGRldGVybWluZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTc4LGVkaXRpb24yMDE4CmZvbyEoKTsKCnB1YiAoaW4gOjpTZWEpIHN0cnVjdCBTaGFyazsgLy8gZXJyb3IhCgpmbiBtYWluKCkge30KYGBgCgpCZWNhdXNlIG9mIHRoZSBjYWxsIHRvIHRoZSBgZm9vYCBtYWNybywgdGhlIGNvbXBpbGVyIGd1ZXNzZXMgdGhhdCB0aGUgbWlzc2luZwptb2R1bGUgY291bGQgYmUgaW5zaWRlIGl0IGFuZCBmYWlscyBiZWNhdXNlIHRoZSBtYWNybyBkZWZpbml0aW9uIGNhbm5vdCBiZQpmb3VuZC4KClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgYmUgc3VyZSB0aGF0IHRoZSBtb2R1bGUgaXMgaW4gc2NvcGU6CgpgYGBlZGl0aW9uMjAxOApwdWIgbW9kIFNlYSB7CiAgICBwdWIgKGluIGNyYXRlOjpTZWEpIHN0cnVjdCBTaGFyazsKfQoKZm4gbWFpbigpIHt9CmBgYApFMDU3OUEgbG93ZXIgcmFuZ2Ugd2Fzbid0IGxlc3MgdGhhbiB0aGUgdXBwZXIgcmFuZ2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTc5CiMhW2ZlYXR1cmUoZXhjbHVzaXZlX3JhbmdlX3BhdHRlcm4pXQoKZm4gbWFpbigpIHsKICAgIG1hdGNoIDV1MzIgewogICAgICAgIC8vIFRoaXMgcmFuZ2UgaXMgb2ssIGFsYmVpdCBwb2ludGxlc3MuCiAgICAgICAgMSAuLiAyID0+IHt9CiAgICAgICAgLy8gVGhpcyByYW5nZSBpcyBlbXB0eSwgYW5kIHRoZSBjb21waWxlciBjYW4gdGVsbC4KICAgICAgICA1IC4uIDUgPT4ge30gLy8gZXJyb3IhCiAgICB9Cn0KYGBgCgpXaGVuIG1hdGNoaW5nIGFnYWluc3QgYW4gZXhjbHVzaXZlIHJhbmdlLCB0aGUgY29tcGlsZXIgdmVyaWZpZXMgdGhhdCB0aGUgcmFuZ2UKaXMgbm9uLWVtcHR5LiBFeGNsdXNpdmUgcmFuZ2UgcGF0dGVybnMgaW5jbHVkZSB0aGUgc3RhcnQgcG9pbnQgYnV0IG5vdCB0aGUgZW5kCnBvaW50LCBzbyB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gcmVxdWlyaW5nIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgdG8gYmUgbGVzcwp0aGFuIHRoZSBlbmQgb2YgdGhlIHJhbmdlLgpFMDU4MFRoZSBgbWFpbmAgZnVuY3Rpb24gd2FzIGluY29ycmVjdGx5IGRlY2xhcmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4MApmbiBtYWluKHg6IGkzMikgeyAvLyBlcnJvcjogbWFpbiBmdW5jdGlvbiBoYXMgd3JvbmcgdHlwZQogICAgcHJpbnRsbiEoInt9IiwgeCk7Cn0KYGBgCgpUaGUgYG1haW5gIGZ1bmN0aW9uIHByb3RvdHlwZSBzaG91bGQgbmV2ZXIgdGFrZSBhcmd1bWVudHMuCkV4YW1wbGU6CgpgYGAKZm4gbWFpbigpIHsKICAgIC8vIHlvdXIgY29kZQp9CmBgYAoKSWYgeW91IHdhbnQgdG8gZ2V0IGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIHVzZSBgc3RkOjplbnY6OmFyZ3NgLiBUbyBleGl0IHdpdGggYQpzcGVjaWZpZWQgZXhpdCBjb2RlLCB1c2UgYHN0ZDo6cHJvY2Vzczo6ZXhpdGAuCkUwNTgxSW4gYSBgZm5gIHR5cGUsIGEgbGlmZXRpbWUgYXBwZWFycyBvbmx5IGluIHRoZSByZXR1cm4gdHlwZQphbmQgbm90IGluIHRoZSBhcmd1bWVudHMgdHlwZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTgxCmZuIG1haW4oKSB7CiAgICAvLyBIZXJlLCBgJ2FgIGFwcGVhcnMgb25seSBpbiB0aGUgcmV0dXJuIHR5cGU6CiAgICBsZXQgeDogZm9yPCdhPiBmbigpIC0+ICYnYSBpMzI7Cn0KYGBgCgpUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgdGhlIGxpZmV0aW1lIGlzbid0IGNvbnRyYWluZWQgYnkgYW55IG9mIHRoZSBhcmd1bWVudHMsCm1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIGRldGVybWluZSBob3cgbG9uZyBpdCdzIHN1cHBvc2VkIHRvIGxpdmUuCgpUbyBmaXggdGhpcyBpc3N1ZSwgZWl0aGVyIHVzZSB0aGUgbGlmZXRpbWUgaW4gdGhlIGFyZ3VtZW50cywgb3IgdXNlIHRoZQpgJ3N0YXRpY2AgbGlmZXRpbWUuIEV4YW1wbGU6CgpgYGAKZm4gbWFpbigpIHsKICAgIC8vIEhlcmUsIGAnYWAgYXBwZWFycyBvbmx5IGluIHRoZSByZXR1cm4gdHlwZToKICAgIGxldCB4OiBmb3I8J2E+IGZuKCYnYSBpMzIpIC0+ICYnYSBpMzI7CiAgICBsZXQgeTogZm4oKSAtPiAmJ3N0YXRpYyBpMzI7Cn0KYGBgCgpOb3RlOiBUaGUgZXhhbXBsZXMgYWJvdmUgdXNlZCB0byBiZSAoZXJyb25lb3VzbHkpIGFjY2VwdGVkIGJ5IHRoZQpjb21waWxlciwgYnV0IHRoaXMgd2FzIHNpbmNlIGNvcnJlY3RlZC4gU2VlIFtpc3N1ZSAjMzM2ODVdIGZvciBtb3JlCmRldGFpbHMuCgpbaXNzdWUgIzMzNjg1XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy8zMzY4NQpFMDU4MkEgbGlmZXRpbWUgaXMgb25seSBwcmVzZW50IGluIGFuIGFzc29jaWF0ZWQtdHlwZSBiaW5kaW5nLCBhbmQgbm90IGluIHRoZSBpbnB1dAp0eXBlcyB0byB0aGUgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTgyCmZuIGJhcjxGPih0OiBGKQogICAgLy8gTm8gdHlwZSBjYW4gc2F0aXNmeSB0aGlzIHJlcXVpcmVtZW50LCBzaW5jZSBgJ2FgIGRvZXMgbm90CiAgICAvLyBhcHBlYXIgaW4gYW55IG9mIHRoZSBpbnB1dCB0eXBlcyAoaGVyZSwgYGkzMmApOgogICAgd2hlcmUgRjogZm9yPCdhPiBGbihpMzIpIC0+IE9wdGlvbjwmJ2EgaTMyPgp7Cn0KCmZuIG1haW4oKSB7IH0KYGBgCgpUbyBmaXggdGhpcyBpc3N1ZSwgZWl0aGVyIHVzZSB0aGUgbGlmZXRpbWUgaW4gdGhlIGlucHV0cywgb3IgdXNlCmAnc3RhdGljYC4gRXhhbXBsZToKCmBgYApmbiBiYXI8RiwgRz4odDogRiwgdTogRykKICAgIHdoZXJlIEY6IGZvcjwnYT4gRm4oJidhIGkzMikgLT4gT3B0aW9uPCYnYSBpMzI+LAogICAgICAgICAgRzogRm4oaTMyKSAtPiBPcHRpb248JidzdGF0aWMgaTMyPiwKewp9CgpmbiBtYWluKCkgeyB9CmBgYAoKTm90ZTogVGhlIGV4YW1wbGVzIGFib3ZlIHVzZWQgdG8gYmUgKGVycm9uZW91c2x5KSBhY2NlcHRlZCBieSB0aGUKY29tcGlsZXIsIGJ1dCB0aGlzIHdhcyBzaW5jZSBjb3JyZWN0ZWQuIFNlZSBbaXNzdWUgIzMzNjg1XSBmb3IgbW9yZQpkZXRhaWxzLgoKW2lzc3VlICMzMzY4NV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvMzM2ODUKRTA1ODNBIGZpbGUgd2Fzbid0IGZvdW5kIGZvciBhbiBvdXQtb2YtbGluZSBtb2R1bGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTgzCm1vZCBmaWxlX3RoYXRfZG9lc250X2V4aXN0OyAvLyBlcnJvcjogZmlsZSBub3QgZm91bmQgZm9yIG1vZHVsZQoKZm4gbWFpbigpIHt9CmBgYAoKUGxlYXNlIGJlIHN1cmUgdGhhdCBhIGZpbGUgY29ycmVzcG9uZGluZyB0byB0aGUgbW9kdWxlIGV4aXN0cy4gSWYgeW91CndhbnQgdG8gdXNlIGEgbW9kdWxlIG5hbWVkIGBmaWxlX3RoYXRfZG9lc250X2V4aXN0YCwgeW91IG5lZWQgdG8gaGF2ZSBhIGZpbGUKbmFtZWQgYGZpbGVfdGhhdF9kb2VzbnRfZXhpc3QucnNgIG9yIGBmaWxlX3RoYXRfZG9lc250X2V4aXN0L21vZC5yc2AgaW4gdGhlCnNhbWUgZGlyZWN0b3J5LgpFMDU4NEEgZG9jIGNvbW1lbnQgdGhhdCBpcyBub3QgYXR0YWNoZWQgdG8gYW55dGhpbmcgaGFzIGJlZW4gZW5jb3VudGVyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTg0CnRyYWl0IElzbGFuZCB7CiAgICBmbiBsb3N0KCk7CgogICAgLy8vIEknbSBsb3N0IQp9CmBgYAoKQSBsaXR0bGUgcmVtaW5kZXI6IGEgZG9jIGNvbW1lbnQgaGFzIHRvIGJlIHBsYWNlZCBiZWZvcmUgdGhlIGl0ZW0gaXQncyBzdXBwb3NlZAp0byBkb2N1bWVudC4gU28gaWYgeW91IHdhbnQgdG8gZG9jdW1lbnQgdGhlIGBJc2xhbmRgIHRyYWl0LCB5b3UgbmVlZCB0byBwdXQgYQpkb2MgY29tbWVudCBiZWZvcmUgaXQsIG5vdCBpbnNpZGUgaXQuIFNhbWUgZ29lcyBmb3IgdGhlIGBsb3N0YCBtZXRob2Q6IHRoZSBkb2MKY29tbWVudCBuZWVkcyB0byBiZSBiZWZvcmUgaXQ6CgpgYGAKLy8vIEknbSBUSEUgaXNsYW5kIQp0cmFpdCBJc2xhbmQgewogICAgLy8vIEknbSBsb3N0IQogICAgZm4gbG9zdCgpOwp9CmBgYApFMDU4NUEgZG9jdW1lbnRhdGlvbiBjb21tZW50IHRoYXQgZG9lc24ndCBkb2N1bWVudCBhbnl0aGluZyB3YXMgZm91bmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTg1CmZuIG1haW4oKSB7CiAgICAvLyBUaGUgZm9sbG93aW5nIGRvYyBjb21tZW50IHdpbGwgZmFpbDoKICAgIC8vLyBUaGlzIGlzIGEgdXNlbGVzcyBkb2MgY29tbWVudCEKfQpgYGAKCkRvY3VtZW50YXRpb24gY29tbWVudHMgbmVlZCB0byBiZSBmb2xsb3dlZCBieSBpdGVtcywgaW5jbHVkaW5nIGZ1bmN0aW9ucywKdHlwZXMsIG1vZHVsZXMsIGV0Yy4gRXhhbXBsZXM6CgpgYGAKLy8vIEknbSBkb2N1bWVudGluZyB0aGUgZm9sbG93aW5nIHN0cnVjdDoKc3RydWN0IEZvbzsKCi8vLyBJJ20gZG9jdW1lbnRpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKZm4gZm9vKCkge30KYGBgCkUwNTg2QW4gaW5jbHVzaXZlIHJhbmdlIHdhcyB1c2VkIHdpdGggbm8gZW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4NgpmbiBtYWluKCkgewogICAgbGV0IHRtcCA9IHZlYyFbMCwgMSwgMiwgMywgNCwgNCwgMywgMywgMiwgMV07CiAgICBsZXQgeCA9ICZ0bXBbMS4uPV07IC8vIGVycm9yOiBpbmNsdXNpdmUgcmFuZ2Ugd2FzIHVzZWQgd2l0aCBubyBlbmQKfQpgYGAKCkFuIGluY2x1c2l2ZSByYW5nZSBuZWVkcyBhbiBlbmQgaW4gb3JkZXIgdG8gKmluY2x1ZGUqIGl0LiBJZiB5b3UganVzdCBuZWVkIGEKc3RhcnQgYW5kIG5vIGVuZCwgdXNlIGEgbm9uLWluY2x1c2l2ZSByYW5nZSAod2l0aCBgLi5gKToKCmBgYApmbiBtYWluKCkgewogICAgbGV0IHRtcCA9IHZlYyFbMCwgMSwgMiwgMywgNCwgNCwgMywgMywgMiwgMV07CiAgICBsZXQgeCA9ICZ0bXBbMS4uXTsgLy8gb2shCn0KYGBgCgpPciBwdXQgYW4gZW5kIHRvIHlvdXIgaW5jbHVzaXZlIHJhbmdlOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgdG1wID0gdmVjIVswLCAxLCAyLCAzLCA0LCA0LCAzLCAzLCAyLCAxXTsKICAgIGxldCB4ID0gJnRtcFsxLi49M107IC8vIG9rIQp9CmBgYApFMDU4N0EgdHlwZSBoYXMgYm90aCBgcGFja2VkYCBhbmQgYGFsaWduYCByZXByZXNlbnRhdGlvbiBoaW50cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODcKI1tyZXByKHBhY2tlZCwgYWxpZ24oOCkpXSAvLyBlcnJvciEKc3RydWN0IFVtYnJlbGxhKGkzMik7CmBgYAoKWW91IGNhbm5vdCB1c2UgYHBhY2tlZGAgYW5kIGBhbGlnbmAgaGludHMgb24gYSBzYW1lIHR5cGUuIElmIHlvdSB3YW50IHRvIHBhY2sgYQp0eXBlIHRvIGEgZ2l2ZW4gc2l6ZSwgeW91IHNob3VsZCBwcm92aWRlIGEgc2l6ZSB0byBwYWNrZWQ6CgpgYGAKI1tyZXByKHBhY2tlZCldIC8vIG9rIQpzdHJ1Y3QgVW1icmVsbGEoaTMyKTsKYGBgCkUwNTg4QSB0eXBlIHdpdGggYHBhY2tlZGAgcmVwcmVzZW50YXRpb24gaGludCBoYXMgYSBmaWVsZCB3aXRoIGBhbGlnbmAKcmVwcmVzZW50YXRpb24gaGludC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODgKI1tyZXByKGFsaWduKDE2KSldCnN0cnVjdCBBbGlnbmVkKGkzMik7CgojW3JlcHIocGFja2VkKV0gLy8gZXJyb3IhCnN0cnVjdCBQYWNrZWQoQWxpZ25lZCk7CmBgYAoKSnVzdCBsaWtlIHlvdSBjYW5ub3QgaGF2ZSBib3RoIGBhbGlnbmAgYW5kIGBwYWNrZWRgIHJlcHJlc2VudGF0aW9uIGhpbnRzIG9uIGEKc2FtZSB0eXBlLCBhIGBwYWNrZWRgIHR5cGUgY2Fubm90IGNvbnRhaW4gYW5vdGhlciB0eXBlIHdpdGggdGhlIGBhbGlnbmAKcmVwcmVzZW50YXRpb24gaGludC4gSG93ZXZlciwgeW91IGNhbiBkbyB0aGUgb3Bwb3NpdGU6CgpgYGAKI1tyZXByKHBhY2tlZCldCnN0cnVjdCBQYWNrZWQoaTMyKTsKCiNbcmVwcihhbGlnbigxNikpXSAvLyBvayEKc3RydWN0IEFsaWduZWQoUGFja2VkKTsKYGBgCkUwNTg5VGhlIHZhbHVlIG9mIGBOYCB0aGF0IHdhcyBzcGVjaWZpZWQgZm9yIGByZXByKGFsaWduKE4pKWAgd2FzIG5vdCBhIHBvd2VyCm9mIHR3bywgb3Igd2FzIGdyZWF0ZXIgdGhhbiAyXjI5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4OQojW3JlcHIoYWxpZ24oMTUpKV0gLy8gZXJyb3I6IGludmFsaWQgYHJlcHIoYWxpZ24pYCBhdHRyaWJ1dGU6IG5vdCBhIHBvd2VyIG9mIHR3bwplbnVtIEZvbyB7CiAgICBCYXIodTY0KSwKfQpgYGAKRTA1OTBgYnJlYWtgIG9yIGBjb250aW51ZWAga2V5d29yZHMgd2VyZSB1c2VkIGluIGEgY29uZGl0aW9uIG9mIGEgYHdoaWxlYCBsb29wCndpdGhvdXQgYSBsYWJlbC4KCkVycm9uZW91cyBjb2RlIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTAKd2hpbGUgYnJlYWsge30KYGBgCgpgYnJlYWtgIG9yIGBjb250aW51ZWAgbXVzdCBpbmNsdWRlIGEgbGFiZWwgd2hlbiB1c2VkIGluIHRoZSBjb25kaXRpb24gb2YgYQpgd2hpbGVgIGxvb3AuCgpUbyBmaXggdGhpcywgYWRkIGEgbGFiZWwgc3BlY2lmeWluZyB3aGljaCBsb29wIGlzIGJlaW5nIGJyb2tlbiBvdXQgb2Y6CgpgYGAKJ2Zvbzogd2hpbGUgYnJlYWsgJ2ZvbyB7fQpgYGAKRTA1OTFQZXIgW1JGQyA0MDFdW3JmYzQwMV0sIGlmIHlvdSBoYXZlIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gYGZvb2A6CgpgYGAKLy8gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGV4cGxhbmF0aW9uLCBhbGwgb2YgdGhlc2UKLy8gZGlmZmVyZW50IGtpbmRzIG9mIGBmbmAgZGVjbGFyYXRpb25zIGFyZSBlcXVpdmFsZW50OgpzdHJ1Y3QgUzsKZm4gZm9vKHg6IFMpIHsgLyogLi4uICovIH0KIyAjW2NmZyhmb3JfZGVtb25zdHJhdGlvbl9vbmx5KV0KZXh0ZXJuICJDIiB7IGZuIGZvbyh4OiBTKTsgfQojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQppbXBsIFMgeyBmbiBmb28oc2VsZikgeyAvKiAuLi4gKi8gfSB9CmBgYAoKdGhlIHR5cGUgb2YgYGZvb2AgaXMgKipub3QqKiBgZm4oUylgLCBhcyBvbmUgbWlnaHQgZXhwZWN0LgpSYXRoZXIsIGl0IGlzIGEgdW5pcXVlLCB6ZXJvLXNpemVkIG1hcmtlciB0eXBlIHdyaXR0ZW4gaGVyZSBhcyBgdHlwZW9mKGZvbylgLgpIb3dldmVyLCBgdHlwZW9mKGZvbylgIGNhbiBiZSBfY29lcmNlZF8gdG8gYSBmdW5jdGlvbiBwb2ludGVyIGBmbihTKWAsCnNvIHlvdSByYXJlbHkgbm90aWNlIHRoaXM6CgpgYGAKIyBzdHJ1Y3QgUzsKIyBmbiBmb28oXzogUykge30KbGV0IHg6IGZuKFMpID0gZm9vOyAvLyBPSywgY29lcmNlcwpgYGAKClRoZSByZWFzb24gdGhhdCB0aGlzIG1hdHRlciBpcyB0aGF0IHRoZSB0eXBlIGBmbihTKWAgaXMgbm90IHNwZWNpZmljIHRvCmFueSBwYXJ0aWN1bGFyIGZ1bmN0aW9uOiBpdCdzIGEgZnVuY3Rpb24gX3BvaW50ZXJfLiBTbyBjYWxsaW5nIGB4KClgIHJlc3VsdHMKaW4gYSB2aXJ0dWFsIGNhbGwsIHdoZXJlYXMgYGZvbygpYCBpcyBzdGF0aWNhbGx5IGRpc3BhdGNoZWQsIGJlY2F1c2UgdGhlIHR5cGUKb2YgYGZvb2AgdGVsbHMgdXMgcHJlY2lzZWx5IHdoYXQgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLgoKQXMgbm90ZWQgYWJvdmUsIGNvZXJjaW9ucyBtZWFuIHRoYXQgbW9zdCBjb2RlIGRvZXNuJ3QgaGF2ZSB0byBiZQpjb25jZXJuZWQgd2l0aCB0aGlzIGRpc3RpbmN0aW9uLiBIb3dldmVyLCB5b3UgY2FuIHRlbGwgdGhlIGRpZmZlcmVuY2UKd2hlbiB1c2luZyAqKnRyYW5zbXV0ZSoqIHRvIGNvbnZlcnQgYSBmbiBpdGVtIGludG8gYSBmbiBwb2ludGVyLgoKVGhpcyBpcyBzb21ldGltZXMgZG9uZSBhcyBwYXJ0IG9mIGFuIEZGSToKCmBgYGNvbXBpbGVfZmFpbCxFMDU5MQpleHRlcm4gIkMiIGZuIGZvbyh1c2VyZGF0YTogQm94PGkzMj4pIHsKICAgIC8qIC4uLiAqLwp9CgojIGZuIGNhbGxiYWNrKF86IGV4dGVybiAiQyIgZm4oKm11dCBpMzIpKSB7fQojIHVzZSBzdGQ6Om1lbTo6dHJhbnNtdXRlOwojIHVuc2FmZSB7CmxldCBmOiBleHRlcm4gIkMiIGZuKCptdXQgaTMyKSA9IHRyYW5zbXV0ZShmb28pOwpjYWxsYmFjayhmKTsKIyB9CmBgYAoKSGVyZSwgdHJhbnNtdXRlIGlzIGJlaW5nIHVzZWQgdG8gY29udmVydCB0aGUgdHlwZXMgb2YgdGhlIGZuIGFyZ3VtZW50cy4KVGhpcyBwYXR0ZXJuIGlzIGluY29ycmVjdCBiZWNhdXNlLCBiZWNhdXNlIHRoZSB0eXBlIG9mIGBmb29gIGlzIGEgZnVuY3Rpb24KKippdGVtKiogKGB0eXBlb2YoZm9vKWApLCB3aGljaCBpcyB6ZXJvLXNpemVkLCBhbmQgdGhlIHRhcmdldCB0eXBlIChgZm4oKWApCmlzIGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggaXMgbm90IHplcm8tc2l6ZWQuClRoaXMgcGF0dGVybiBzaG91bGQgYmUgcmV3cml0dGVuLiBUaGVyZSBhcmUgYSBmZXcgcG9zc2libGUgd2F5cyB0byBkbyB0aGlzOgoKLSBjaGFuZ2UgdGhlIG9yaWdpbmFsIGZuIGRlY2xhcmF0aW9uIHRvIG1hdGNoIHRoZSBleHBlY3RlZCBzaWduYXR1cmUsCiAgYW5kIGRvIHRoZSBjYXN0IGluIHRoZSBmbiBib2R5ICh0aGUgcHJlZmVycmVkIG9wdGlvbikKLSBjYXN0IHRoZSBmbiBpdGVtIG9mIGEgZm4gcG9pbnRlciBiZWZvcmUgY2FsbGluZyB0cmFuc211dGUsIGFzIHNob3duIGhlcmU6CgogICAgYGBgCiAgICAjIGV4dGVybiAiQyIgZm4gZm9vKF86IEJveDxpMzI+KSB7fQogICAgIyB1c2Ugc3RkOjptZW06OnRyYW5zbXV0ZTsKICAgICMgdW5zYWZlIHsKICAgIGxldCBmOiBleHRlcm4gIkMiIGZuKCptdXQgaTMyKSA9IHRyYW5zbXV0ZShmb28gYXMgZXh0ZXJuICJDIiBmbihfKSk7CiAgICBsZXQgZjogZXh0ZXJuICJDIiBmbigqbXV0IGkzMikgPSB0cmFuc211dGUoZm9vIGFzIHVzaXplKTsgLy8gd29ya3MgdG9vCiAgICAjIH0KICAgIGBgYAoKVGhlIHNhbWUgYXBwbGllcyB0byB0cmFuc211dGVzIHRvIGAqbXV0IGZuKClgLCB3aGljaCB3ZXJlIG9ic2VydmVkIGluIHByYWN0aWNlLgpOb3RlIHRob3VnaCB0aGF0IHVzZSBvZiB0aGlzIHR5cGUgaXMgZ2VuZXJhbGx5IGluY29ycmVjdC4KVGhlIGludGVudGlvbiBpcyB0eXBpY2FsbHkgdG8gZGVzY3JpYmUgYSBmdW5jdGlvbiBwb2ludGVyLCBidXQganVzdCBgZm4oKWAKYWxvbmUgc3VmZmljZXMgZm9yIHRoYXQuIGAqbXV0IGZuKClgIGlzIGEgcG9pbnRlciB0byBhIGZuIHBvaW50ZXIuCihTaW5jZSB0aGVzZSB2YWx1ZXMgYXJlIHR5cGljYWxseSBqdXN0IHBhc3NlZCB0byBDIGNvZGUsIGhvd2V2ZXIsIHRoaXMgcmFyZWx5Cm1ha2VzIGEgZGlmZmVyZW5jZSBpbiBwcmFjdGljZS4pCgpbcmZjNDAxXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMDQwMS1jb2VyY2lvbnMubWQKRTA1OTJUaGlzIGVycm9yIG9jY3VycyB3aGVuIHlvdSBkZWZpbmVkIG1ldGhvZHMgb3IgYXNzb2NpYXRlZCBmdW5jdGlvbnMgd2l0aCBzYW1lCm5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTkyCnN0cnVjdCBGb287CgppbXBsIEZvbyB7CiAgICBmbiBiYXIoKSB7fSAvLyBwcmV2aW91cyBkZWZpbml0aW9uIGhlcmUKfQoKaW1wbCBGb28gewogICAgZm4gYmFyKCkge30gLy8gZHVwbGljYXRlIGRlZmluaXRpb24gaGVyZQp9CmBgYAoKQSBzaW1pbGFyIGVycm9yIGlzIEUwMjAxLiBUaGUgZGlmZmVyZW5jZSBpcyB3aGV0aGVyIHRoZXJlIGlzIG9uZSBkZWNsYXJhdGlvbgpibG9jayBvciBub3QuIFRvIGF2b2lkIHRoaXMgZXJyb3IsIHlvdSBtdXN0IGdpdmUgZWFjaCBgZm5gIGEgdW5pcXVlIG5hbWUuCgpgYGAKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIGJhcigpIHt9Cn0KCmltcGwgRm9vIHsKICAgIGZuIGJheigpIHt9IC8vIGRlZmluZSB3aXRoIGRpZmZlcmVudCBuYW1lCn0KYGBgCkUwNTkzWW91IHRyaWVkIHRvIHN1cHBseSBhbiBgRm5gLWJhc2VkIHR5cGUgd2l0aCBhbiBpbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cwp0aGFuIHdoYXQgd2FzIGV4cGVjdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU5MwpmbiBmb288RjogRm4oKT4oeDogRikgeyB9CgpmbiBtYWluKCkgewogICAgLy8gW0UwNTkzXSBjbG9zdXJlIHRha2VzIDEgYXJndW1lbnQgYnV0IDAgYXJndW1lbnRzIGFyZSByZXF1aXJlZAogICAgZm9vKHx5fCB7IH0pOwp9CmBgYAoKWW91IGhhdmUgdG8gcHJvdmlkZSB0aGUgc2FtZSBudW1iZXIgb2YgYXJndW1lbnRzIGFzIGV4cGVjdGVkIGJ5IHRoZSBgRm5gLWJhc2VkCnR5cGUuIFNvIHRvIGZpeCB0aGUgcHJldmlvdXMgZXhhbXBsZSwgd2UgbmVlZCB0byByZW1vdmUgdGhlIGB5YCBhcmd1bWVudDoKCmBgYApmbiBmb288RjogRm4oKT4oeDogRikgeyB9CgpmbiBtYWluKCkgewogICAgZm9vKHx8IHsgfSk7IC8vIG9rIQp9CmBgYApFMDU5NEEgbm9uLW11dGFibGUgdmFsdWUgd2FzIGFzc2lnbmVkIGEgdmFsdWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk0CnN0cnVjdCBTb2xhclN5c3RlbSB7CiAgICBlYXJ0aDogaTMyLAp9CgpsZXQgc3MgPSBTb2xhclN5c3RlbSB7IGVhcnRoOiAzIH07CnNzLmVhcnRoID0gMjsgLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGRlY2xhcmUgYHNzYCBhcyBtdXRhYmxlIGJ5IHVzaW5nIHRoZSBgbXV0YCBrZXl3b3JkOgoKYGBgCnN0cnVjdCBTb2xhclN5c3RlbSB7CiAgICBlYXJ0aDogaTMyLAp9CgpsZXQgbXV0IHNzID0gU29sYXJTeXN0ZW0geyBlYXJ0aDogMyB9OyAvLyBkZWNsYXJpbmcgYHNzYCBhcyBtdXRhYmxlCnNzLmVhcnRoID0gMjsgLy8gb2shCmBgYApFMDU5NSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkNsb3N1cmVzIGNhbm5vdCBtdXRhdGUgaW1tdXRhYmxlIGNhcHR1cmVkIHZhcmlhYmxlcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTQKbGV0IHggPSAzOyAvLyBlcnJvcjogY2xvc3VyZSBjYW5ub3QgYXNzaWduIHRvIGltbXV0YWJsZSBsb2NhbCB2YXJpYWJsZSBgeGAKbGV0IG11dCBjID0gfHwgeyB4ICs9IDEgfTsKYGBgCgpNYWtlIHRoZSB2YXJpYWJsZSBiaW5kaW5nIG11dGFibGU6CgpgYGAKbGV0IG11dCB4ID0gMzsgLy8gb2shCmxldCBtdXQgYyA9IHx8IHsgeCArPSAxIH07CmBgYApFMDU5NlRoaXMgZXJyb3Igb2NjdXJzIGJlY2F1c2UgeW91IHRyaWVkIHRvIG11dGFibHkgYm9ycm93IGEgbm9uLW11dGFibGUgdmFyaWFibGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk2CmxldCB4ID0gMTsKbGV0IHkgPSAmbXV0IHg7IC8vIGVycm9yOiBjYW5ub3QgYm9ycm93IG11dGFibHkKYGBgCgpJbiBoZXJlLCBgeGAgaXNuJ3QgbXV0YWJsZSwgc28gd2hlbiB3ZSB0cnkgdG8gbXV0YWJseSBib3Jyb3cgaXQgaW4gYHlgLCBpdApmYWlscy4gVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBuZWVkIHRvIG1ha2UgYHhgIG11dGFibGU6CgpgYGAKbGV0IG11dCB4ID0gMTsKbGV0IHkgPSAmbXV0IHg7IC8vIG9rIQpgYGAKRTA1OTdUaGlzIGVycm9yIG9jY3VycyBiZWNhdXNlIGEgdmFsdWUgd2FzIGRyb3BwZWQgd2hpbGUgaXQgd2FzIHN0aWxsIGJvcnJvd2VkCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk3CnN0cnVjdCBGb288J2E+IHsKICAgIHg6IE9wdGlvbjwmJ2EgdTMyPiwKfQoKbGV0IG11dCB4ID0gRm9vIHsgeDogTm9uZSB9Owp7CiAgICBsZXQgeSA9IDA7CiAgICB4LnggPSBTb21lKCZ5KTsgLy8gZXJyb3I6IGB5YCBkb2VzIG5vdCBsaXZlIGxvbmcgZW5vdWdoCn0KcHJpbnRsbiEoIns6P30iLCB4LngpOwpgYGAKCkluIGhlcmUsIGB5YCBpcyBkcm9wcGVkIGF0IHRoZSBlbmQgb2YgdGhlIGlubmVyIHNjb3BlLCBidXQgaXQgaXMgYm9ycm93ZWQgYnkKYHhgIHVudGlsIHRoZSBgcHJpbnRsbmAuIFRvIGZpeCB0aGUgcHJldmlvdXMgZXhhbXBsZSwganVzdCByZW1vdmUgdGhlIHNjb3BlCnNvIHRoYXQgYHlgIGlzbid0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgdGhlIHByaW50bG4KCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiBPcHRpb248JidhIHUzMj4sCn0KCmxldCBtdXQgeCA9IEZvbyB7IHg6IE5vbmUgfTsKCmxldCB5ID0gMDsKeC54ID0gU29tZSgmeSk7CgpwcmludGxuISgiezo/fSIsIHgueCk7CmBgYApFMDU5OVRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYSBtZXRob2QgaXMgdXNlZCBvbiBhIHR5cGUgd2hpY2ggZG9lc24ndCBpbXBsZW1lbnQgaXQ6CgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk5CnN0cnVjdCBNb3V0aDsKCmxldCB4ID0gTW91dGg7CnguY2hvY29sYXRlKCk7IC8vIGVycm9yOiBubyBtZXRob2QgbmFtZWQgYGNob2NvbGF0ZWAgZm91bmQgZm9yIHR5cGUgYE1vdXRoYAogICAgICAgICAgICAgICAvLyAgICAgICAgaW4gdGhlIGN1cnJlbnQgc2NvcGUKYGBgCgpJbiB0aGlzIGNhc2UsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGUgYGNob2NvbGF0ZWAgbWV0aG9kIHRvIGZpeCB0aGUgZXJyb3I6CgpgYGAKc3RydWN0IE1vdXRoOwoKaW1wbCBNb3V0aCB7CiAgICBmbiBjaG9jb2xhdGUoJnNlbGYpIHsgLy8gV2UgaW1wbGVtZW50IHRoZSBgY2hvY29sYXRlYCBtZXRob2QgaGVyZS4KICAgICAgICBwcmludGxuISgiSG1tbSEgSSBsb3ZlIGNob2NvbGF0ZSEiKTsKICAgIH0KfQoKbGV0IHggPSBNb3V0aDsKeC5jaG9jb2xhdGUoKTsgLy8gb2shCmBgYApFMDYwMEFuIHVuYXJ5IG9wZXJhdG9yIHdhcyB1c2VkIG9uIGEgdHlwZSB3aGljaCBkb2Vzbid0IGltcGxlbWVudCBpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MDAKZW51bSBRdWVzdGlvbiB7CiAgICBZZXMsCiAgICBObywKfQoKIVF1ZXN0aW9uOjpZZXM7IC8vIGVycm9yOiBjYW5ub3QgYXBwbHkgdW5hcnkgb3BlcmF0b3IgYCFgIHRvIHR5cGUgYFF1ZXN0aW9uYApgYGAKCkluIHRoaXMgY2FzZSwgYFF1ZXN0aW9uYCB3b3VsZCBuZWVkIHRvIGltcGxlbWVudCB0aGUgYHN0ZDo6b3BzOjpOb3RgIHRyYWl0IGluCm9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIGAhYCBvbiBpdC4gTGV0J3MgaW1wbGVtZW50IGl0OgoKYGBgCnVzZSBzdGQ6Om9wczo6Tm90OwoKZW51bSBRdWVzdGlvbiB7CiAgICBZZXMsCiAgICBObywKfQoKLy8gV2UgaW1wbGVtZW50IHRoZSBgTm90YCB0cmFpdCBvbiB0aGUgZW51bS4KaW1wbCBOb3QgZm9yIFF1ZXN0aW9uIHsKICAgIHR5cGUgT3V0cHV0ID0gYm9vbDsKCiAgICBmbiBub3Qoc2VsZikgLT4gYm9vbCB7CiAgICAgICAgbWF0Y2ggc2VsZiB7CiAgICAgICAgICAgIFF1ZXN0aW9uOjpZZXMgPT4gZmFsc2UsIC8vIElmIHRoZSBgQW5zd2VyYCBpcyBgWWVzYCwgdGhlbiBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlLgogICAgICAgICAgICBRdWVzdGlvbjo6Tm8gPT4gdHJ1ZSwgLy8gQW5kIGhlcmUgd2UgZG8gdGhlIG9wcG9zaXRlLgogICAgICAgIH0KICAgIH0KfQoKYXNzZXJ0X2VxISghUXVlc3Rpb246OlllcywgZmFsc2UpOwphc3NlcnRfZXEhKCFRdWVzdGlvbjo6Tm8sIHRydWUpOwpgYGAKRTA2MDFObyBgbWFpbmAgZnVuY3Rpb24gd2FzIGZvdW5kIGluIGEgYmluYXJ5IGNyYXRlLgoKVG8gZml4IHRoaXMgZXJyb3IsIGFkZCBhIGBtYWluYCBmdW5jdGlvbjoKCmBgYApmbiBtYWluKCkgewogICAgLy8gWW91ciBwcm9ncmFtIHdpbGwgc3RhcnQgaGVyZS4KICAgIHByaW50bG4hKCJIZWxsbyB3b3JsZCEiKTsKfQpgYGAKCklmIHlvdSBkb24ndCBrbm93IHRoZSBiYXNpY3Mgb2YgUnVzdCwgeW91IGNhbiBsb29rIGF0IHRoZQpbUnVzdCBCb29rXVtydXN0LWJvb2tdIHRvIGdldCBzdGFydGVkLgoKW3J1c3QtYm9va106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay8KRTA2MDJBbiB1bmtub3duIGxpbnQgd2FzIHVzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBzaApydXN0YyAtRCBib2d1cyBydXN0X2ZpbGUucnMKYGBgCgpNYXliZSB5b3UganVzdCBtaXNzcGVsbGVkIHRoZSBsaW50IG5hbWUgb3IgdGhlIGxpbnQgZG9lc24ndCBleGlzdCBhbnltb3JlLgpFaXRoZXIgd2F5LCB0cnkgdG8gdXBkYXRlL3JlbW92ZSBpdCBpbiBvcmRlciB0byBmaXggdGhlIGVycm9yLgpFMDYwM0EgcHJpdmF0ZSBpdGVtIHdhcyB1c2VkIG91dHNpZGUgaXRzIHNjb3BlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYwMwptb2QgU29tZU1vZHVsZSB7CiAgICBjb25zdCBQUklWQVRFOiB1MzIgPSAweF9hX2JhZF8xZGVhX3UzMjsgLy8gVGhpcyBjb25zdCBpcyBwcml2YXRlLCBzbyB3ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbid0IHVzZSBpdCBvdXRzaWRlIG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGBTb21lTW9kdWxlYCBtb2R1bGUuCn0KCnByaW50bG4hKCJjb25zdCB2YWx1ZToge30iLCBTb21lTW9kdWxlOjpQUklWQVRFKTsgLy8gZXJyb3I6IGNvbnN0YW50IGBQUklWQVRFYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBpcyBwcml2YXRlCmBgYAoKSW4gb3JkZXIgdG8gZml4IHRoaXMgZXJyb3IsIHlvdSBuZWVkIHRvIG1ha2UgdGhlIGl0ZW0gcHVibGljIGJ5IHVzaW5nIHRoZSBgcHViYAprZXl3b3JkLiBFeGFtcGxlOgoKYGBgCm1vZCBTb21lTW9kdWxlIHsKICAgIHB1YiBjb25zdCBQUklWQVRFOiB1MzIgPSAweF9hX2JhZF8xZGVhX3UzMjsgLy8gV2Ugc2V0IGl0IHB1YmxpYyBieSB1c2luZyB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYHB1YmAga2V5d29yZC4KfQoKcHJpbnRsbiEoImNvbnN0IHZhbHVlOiB7fSIsIFNvbWVNb2R1bGU6OlBSSVZBVEUpOyAvLyBvayEKYGBgCkUwNjA0QSBjYXN0IHRvIGBjaGFyYCB3YXMgYXR0ZW1wdGVkIG9uIGEgdHlwZSBvdGhlciB0aGFuIGB1OGAuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjA0CjB1MzIgYXMgY2hhcjsgLy8gZXJyb3I6IG9ubHkgYHU4YCBjYW4gYmUgY2FzdCBhcyBgY2hhcmAsIG5vdCBgdTMyYApgYGAKCkFzIHRoZSBlcnJvciBtZXNzYWdlIGluZGljYXRlcywgb25seSBgdThgIGNhbiBiZSBjYXN0IGludG8gYGNoYXJgLiBFeGFtcGxlOgoKYGBgCmxldCBjID0gODZ1OCBhcyBjaGFyOyAvLyBvayEKYXNzZXJ0X2VxIShjLCAnVicpOwpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNhc3RzLCB0YWtlIGEgbG9vayBhdCB0aGUgVHlwZSBjYXN0IHNlY3Rpb24gaW4KW1RoZSBSZWZlcmVuY2UgQm9va11bMV0uCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2V4cHJlc3Npb25zL29wZXJhdG9yLWV4cHIuaHRtbCN0eXBlLWNhc3QtZXhwcmVzc2lvbnMKRTA2MDVBbiBpbnZhbGlkIGNhc3Qgd2FzIGF0dGVtcHRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNjA1CmxldCB4ID0gMHU4Owp4IGFzIFZlYzx1OD47IC8vIGVycm9yOiBub24tcHJpbWl0aXZlIGNhc3Q6IGB1OGAgYXMgYHN0ZDo6dmVjOjpWZWM8dTg+YAoKLy8gQW5vdGhlciBleGFtcGxlCgpsZXQgdiA9IGNvcmU6OnB0cjo6bnVsbDo6PHU4PigpOyAvLyBTbyBoZXJlLCBgdmAgaXMgYSBgKmNvbnN0IHU4YC4KdiBhcyAmdTg7IC8vIGVycm9yOiBub24tcHJpbWl0aXZlIGNhc3Q6IGAqY29uc3QgdThgIGFzIGAmdThgCmBgYAoKT25seSBwcmltaXRpdmUgdHlwZXMgY2FuIGJlIGNhc3QgaW50byBlYWNoIG90aGVyLiBFeGFtcGxlczoKCmBgYApsZXQgeCA9IDB1ODsKeCBhcyB1MzI7IC8vIG9rIQoKbGV0IHYgPSBjb3JlOjpwdHI6Om51bGw6Ojx1OD4oKTsKdiBhcyAqY29uc3QgaTg7IC8vIG9rIQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNhc3RzLCB0YWtlIGEgbG9vayBhdCB0aGUgVHlwZSBjYXN0IHNlY3Rpb24gaW4KW1RoZSBSZWZlcmVuY2UgQm9va11bMV0uCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2V4cHJlc3Npb25zL29wZXJhdG9yLWV4cHIuaHRtbCN0eXBlLWNhc3QtZXhwcmVzc2lvbnMKRTA2MDZBbiBpbmNvbXBhdGlibGUgY2FzdCB3YXMgYXR0ZW1wdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYwNgpsZXQgeCA9ICYwdTg7IC8vIEhlcmUsIGB4YCBpcyBhIGAmdThgLgpsZXQgeTogdTMyID0geCBhcyB1MzI7IC8vIGVycm9yOiBjYXN0aW5nIGAmdThgIGFzIGB1MzJgIGlzIGludmFsaWQKYGBgCgpXaGVuIGNhc3RpbmcsIGtlZXAgaW4gbWluZCB0aGF0IG9ubHkgcHJpbWl0aXZlIHR5cGVzIGNhbiBiZSBjYXN0IGludG8gZWFjaApvdGhlci4gRXhhbXBsZToKCmBgYApsZXQgeCA9ICYwdTg7CmxldCB5OiB1MzIgPSAqeCBhcyB1MzI7IC8vIFdlIGRlcmVmZXJlbmNlIGl0IGZpcnN0IGFuZCB0aGVuIGNhc3QgaXQuCmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY2FzdHMsIHRha2UgYSBsb29rIGF0IHRoZSBUeXBlIGNhc3Qgc2VjdGlvbiBpbgpbVGhlIFJlZmVyZW5jZSBCb29rXVsxXS4KClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMvb3BlcmF0b3ItZXhwci5odG1sI3R5cGUtY2FzdC1leHByZXNzaW9ucwpFMDYwN0EgY2FzdCBiZXR3ZWVuIGEgdGhpbiBhbmQgYSBmYXQgcG9pbnRlciB3YXMgYXR0ZW1wdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYwNwpsZXQgdiA9IGNvcmU6OnB0cjo6bnVsbDo6PHU4PigpOwp2IGFzICpjb25zdCBbdThdOwpgYGAKCkZpcnN0OiB3aGF0IGFyZSB0aGluIGFuZCBmYXQgcG9pbnRlcnM/CgpUaGluIHBvaW50ZXJzIGFyZSAic2ltcGxlIiBwb2ludGVyczogdGhleSBhcmUgcHVyZWx5IGEgcmVmZXJlbmNlIHRvIGEgbWVtb3J5CmFkZHJlc3MuCgpGYXQgcG9pbnRlcnMgYXJlIHBvaW50ZXJzIHJlZmVyZW5jaW5nIER5bmFtaWNhbGx5IFNpemVkIFR5cGVzIChhbHNvIGNhbGxlZCBEU1QpLgpEU1QgZG9uJ3QgaGF2ZSBhIHN0YXRpY2FsbHkga25vd24gc2l6ZSwgdGhlcmVmb3JlIHRoZXkgY2FuIG9ubHkgZXhpc3QgYmVoaW5kCnNvbWUga2luZCBvZiBwb2ludGVycyB0aGF0IGNvbnRhaW4gYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4gU2xpY2VzIGFuZCB0cmFpdApvYmplY3RzIGFyZSBEU1RzLiBJbiB0aGUgY2FzZSBvZiBzbGljZXMsIHRoZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHRoZSBmYXQKcG9pbnRlciBob2xkcyBpcyB0aGVpciBzaXplLgoKVG8gZml4IHRoaXMgZXJyb3IsIGRvbid0IHRyeSB0byBjYXN0IGRpcmVjdGx5IGJldHdlZW4gdGhpbiBhbmQgZmF0IHBvaW50ZXJzLgoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY2FzdHMsIHRha2UgYSBsb29rIGF0IHRoZSBUeXBlIGNhc3Qgc2VjdGlvbiBpbgpbVGhlIFJlZmVyZW5jZSBCb29rXVsxXS4KClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMvb3BlcmF0b3ItZXhwci5odG1sI3R5cGUtY2FzdC1leHByZXNzaW9ucwpFMDYwOEFuIGF0dGVtcHQgdG8gdXNlIGluZGV4IG9uIGEgdHlwZSB3aGljaCBkb2Vzbid0IGltcGxlbWVudCB0aGUgYHN0ZDo6b3BzOjpJbmRleGAKdHJhaXQgd2FzIHBlcmZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MDgKMHU4WzJdOyAvLyBlcnJvcjogY2Fubm90IGluZGV4IGludG8gYSB2YWx1ZSBvZiB0eXBlIGB1OGAKYGBgCgpUbyBiZSBhYmxlIHRvIGluZGV4IGludG8gYSB0eXBlIGl0IG5lZWRzIHRvIGltcGxlbWVudCB0aGUgYHN0ZDo6b3BzOjpJbmRleGAKdHJhaXQuIEV4YW1wbGU6CgpgYGAKbGV0IHY6IFZlYzx1OD4gPSB2ZWMhWzAsIDEsIDIsIDNdOwoKLy8gVGhlIGBWZWNgIHR5cGUgaW1wbGVtZW50cyB0aGUgYEluZGV4YCB0cmFpdCBzbyB5b3UgY2FuIGRvOgpwcmludGxuISgie30iLCB2WzJdKTsKYGBgCkUwNjA5QXR0ZW1wdGVkIHRvIGFjY2VzcyBhIG5vbi1leGlzdGVudCBmaWVsZCBpbiBhIHN0cnVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MDkKc3RydWN0IFN0cnVjdFdpdGhGaWVsZHMgewogICAgeDogdTMyLAp9CgpsZXQgcyA9IFN0cnVjdFdpdGhGaWVsZHMgeyB4OiAwIH07CnByaW50bG4hKCJ7fSIsIHMuZm9vKTsgLy8gZXJyb3I6IG5vIGZpZWxkIGBmb29gIG9uIHR5cGUgYFN0cnVjdFdpdGhGaWVsZHNgCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGNoZWNrIHRoYXQgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgZmllbGQncyBuYW1lIG9yIHRoYXQgdGhlCmZpZWxkIGFjdHVhbGx5IGV4aXN0cy4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgU3RydWN0V2l0aEZpZWxkcyB7CiAgICB4OiB1MzIsCn0KCmxldCBzID0gU3RydWN0V2l0aEZpZWxkcyB7IHg6IDAgfTsKcHJpbnRsbiEoInt9Iiwgcy54KTsgLy8gb2shCmBgYApFMDYxMEF0dGVtcHRlZCB0byBhY2Nlc3MgYSBmaWVsZCBvbiBhIHByaW1pdGl2ZSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYxMApsZXQgeDogdTMyID0gMDsKcHJpbnRsbiEoInt9IiwgeC5mb28pOyAvLyBlcnJvcjogYHtpbnRlZ2VyfWAgaXMgYSBwcmltaXRpdmUgdHlwZSwgdGhlcmVmb3JlCiAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGRvZXNuJ3QgaGF2ZSBmaWVsZHMKYGBgCgpQcmltaXRpdmUgdHlwZXMgYXJlIHRoZSBtb3N0IGJhc2ljIHR5cGVzIGF2YWlsYWJsZSBpbiBSdXN0IGFuZCBkb24ndCBoYXZlCmZpZWxkcy4gVG8gYWNjZXNzIGRhdGEgdmlhIG5hbWVkIGZpZWxkcywgc3RydWN0IHR5cGVzIGFyZSB1c2VkLiBFeGFtcGxlOgoKYGBgCi8vIFdlIGRlY2xhcmUgc3RydWN0IGNhbGxlZCBgRm9vYCBjb250YWluaW5nIHR3byBmaWVsZHM6CnN0cnVjdCBGb28gewogICAgeDogdTMyLAogICAgeTogaTY0LAp9CgovLyBXZSBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3Q6CmxldCB2YXJpYWJsZSA9IEZvbyB7IHg6IDAsIHk6IC0xMiB9OwovLyBBbmQgd2UgY2FuIG5vdyBhY2Nlc3MgaXRzIGZpZWxkczoKcHJpbnRsbiEoIng6IHt9LCB5OiB7fSIsIHZhcmlhYmxlLngsIHZhcmlhYmxlLnkpOwpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFtwcmltaXRpdmVzXSBhbmQgW3N0cnVjdHNdLCB0YWtlIGEgbG9vayBhdCB0aGUgQm9vay4KCltwcmltaXRpdmVzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDMtMDItZGF0YS10eXBlcy5odG1sCltzdHJ1Y3RzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDUtMDAtc3RydWN0cy5odG1sCkUwNjE0QXR0ZW1wdGVkIHRvIGRlcmVmZXJlbmNlIGEgdmFyaWFibGUgd2hpY2ggY2Fubm90IGJlIGRlcmVmZXJlbmNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTQKbGV0IHkgPSAwdTMyOwoqeTsgLy8gZXJyb3I6IHR5cGUgYHUzMmAgY2Fubm90IGJlIGRlcmVmZXJlbmNlZApgYGAKCk9ubHkgdHlwZXMgaW1wbGVtZW50aW5nIGBzdGQ6Om9wczo6RGVyZWZgIGNhbiBiZSBkZXJlZmVyZW5jZWQgKHN1Y2ggYXMgYCZUYCkuCkV4YW1wbGU6CgpgYGAKbGV0IHkgPSAwdTMyOwpsZXQgeCA9ICZ5OwovLyBTbyBoZXJlLCBgeGAgaXMgYSBgJnUzMmAsIHNvIHdlIGNhbiBkZXJlZmVyZW5jZSBpdDoKKng7IC8vIG9rIQpgYGAKRTA2MTVBdHRlbXB0ZWQgdG8gYWNjZXNzIGEgbWV0aG9kIGxpa2UgYSBmaWVsZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTUKc3RydWN0IEZvbyB7CiAgICB4OiB1MzIsCn0KCmltcGwgRm9vIHsKICAgIGZuIG1ldGhvZCgmc2VsZikge30KfQoKbGV0IGYgPSBGb28geyB4OiAwIH07CmYubWV0aG9kOyAvLyBlcnJvcjogYXR0ZW1wdGVkIHRvIHRha2UgdmFsdWUgb2YgbWV0aG9kIGBtZXRob2RgIG9uIHR5cGUgYEZvb2AKYGBgCgpJZiB5b3Ugd2FudCB0byB1c2UgYSBtZXRob2QsIGFkZCBgKClgIGFmdGVyIGl0OgoKYGBgCiMgc3RydWN0IEZvbyB7IHg6IHUzMiB9CiMgaW1wbCBGb28geyBmbiBtZXRob2QoJnNlbGYpIHt9IH0KIyBsZXQgZiA9IEZvbyB7IHg6IDAgfTsKZi5tZXRob2QoKTsKYGBgCgpIb3dldmVyLCBpZiB5b3Ugd2FudGVkIHRvIGFjY2VzcyBhIGZpZWxkIG9mIGEgc3RydWN0IGNoZWNrIHRoYXQgdGhlIGZpZWxkIG5hbWUKaXMgc3BlbGxlZCBjb3JyZWN0bHkuIEV4YW1wbGU6CgpgYGAKIyBzdHJ1Y3QgRm9vIHsgeDogdTMyIH0KIyBpbXBsIEZvbyB7IGZuIG1ldGhvZCgmc2VsZikge30gfQojIGxldCBmID0gRm9vIHsgeDogMCB9OwpwcmludGxuISgie30iLCBmLngpOwpgYGAKRTA2MTZBdHRlbXB0ZWQgdG8gYWNjZXNzIGEgcHJpdmF0ZSBmaWVsZCBvbiBhIHN0cnVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTYKbW9kIHNvbWVfbW9kdWxlIHsKICAgIHB1YiBzdHJ1Y3QgRm9vIHsKICAgICAgICB4OiB1MzIsIC8vIFNvIGB4YCBpcyBwcml2YXRlIGluIGhlcmUuCiAgICB9CgogICAgaW1wbCBGb28gewogICAgICAgIHB1YiBmbiBuZXcoKSAtPiBGb28geyBGb28geyB4OiAwIH0gfQogICAgfQp9CgpsZXQgZiA9IHNvbWVfbW9kdWxlOjpGb286Om5ldygpOwpwcmludGxuISgie30iLCBmLngpOyAvLyBlcnJvcjogZmllbGQgYHhgIG9mIHN0cnVjdCBgc29tZV9tb2R1bGU6OkZvb2AgaXMgcHJpdmF0ZQpgYGAKCklmIHlvdSB3YW50IHRvIGFjY2VzcyB0aGlzIGZpZWxkLCB5b3UgaGF2ZSB0d28gb3B0aW9uczoKCjEpIFNldCB0aGUgZmllbGQgcHVibGljOgoKYGBgCm1vZCBzb21lX21vZHVsZSB7CiAgICBwdWIgc3RydWN0IEZvbyB7CiAgICAgICAgcHViIHg6IHUzMiwgLy8gYHhgIGlzIG5vdyBwdWJsaWMuCiAgICB9CgogICAgaW1wbCBGb28gewogICAgICAgIHB1YiBmbiBuZXcoKSAtPiBGb28geyBGb28geyB4OiAwIH0gfQogICAgfQp9CgpsZXQgZiA9IHNvbWVfbW9kdWxlOjpGb286Om5ldygpOwpwcmludGxuISgie30iLCBmLngpOyAvLyBvayEKYGBgCgoyKSBBZGQgYSBnZXR0ZXIgZnVuY3Rpb246CgpgYGAKbW9kIHNvbWVfbW9kdWxlIHsKICAgIHB1YiBzdHJ1Y3QgRm9vIHsKICAgICAgICB4OiB1MzIsIC8vIFNvIGB4YCBpcyBzdGlsbCBwcml2YXRlIGluIGhlcmUuCiAgICB9CgogICAgaW1wbCBGb28gewogICAgICAgIHB1YiBmbiBuZXcoKSAtPiBGb28geyBGb28geyB4OiAwIH0gfQoKICAgICAgICAvLyBXZSBjcmVhdGUgdGhlIGdldHRlciBmdW5jdGlvbiBoZXJlOgogICAgICAgIHB1YiBmbiBnZXRfeCgmc2VsZikgLT4gJnUzMiB7ICZzZWxmLnggfQogICAgfQp9CgpsZXQgZiA9IHNvbWVfbW9kdWxlOjpGb286Om5ldygpOwpwcmludGxuISgie30iLCBmLmdldF94KCkpOyAvLyBvayEKYGBgCkUwNjE3QXR0ZW1wdGVkIHRvIHBhc3MgYW4gaW52YWxpZCB0eXBlIG9mIHZhcmlhYmxlIGludG8gYSB2YXJpYWRpYyBmdW5jdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTcKZXh0ZXJuIHsKICAgIGZuIHByaW50ZihjOiAqY29uc3QgaTgsIC4uLik7Cn0KCnVuc2FmZSB7CiAgICBwcmludGYoOjpzdGQ6OnB0cjo6bnVsbCgpLCAwZjMyKTsKICAgIC8vIGVycm9yOiBjYW5ub3QgcGFzcyBhbiBgZjMyYCB0byB2YXJpYWRpYyBmdW5jdGlvbiwgY2FzdCB0byBgY19kb3VibGVgCn0KYGBgCgpDZXJ0YWluIFJ1c3QgdHlwZXMgbXVzdCBiZSBjYXN0IGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gYSB2YXJpYWRpYyBmdW5jdGlvbiwKYmVjYXVzZSBvZiBhcmNhbmUgQUJJIHJ1bGVzIGRpY3RhdGVkIGJ5IHRoZSBDIHN0YW5kYXJkLiBUbyBmaXggdGhlIGVycm9yLApjYXN0IHRoZSB2YWx1ZSB0byB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgdGhlIGVycm9yIG1lc3NhZ2UgKHdoaWNoIHlvdSBtYXkgbmVlZAp0byBpbXBvcnQgZnJvbSBgc3RkOjpvczo6cmF3YCkuCgpJbiB0aGlzIGNhc2UsIGBjX2RvdWJsZWAgaGFzIHRoZSBzYW1lIHNpemUgYXMgYGY2NGAgc28gd2UgY2FuIHVzZSBpdCBkaXJlY3RseToKCmBgYG5vX3J1bgojIGV4dGVybiB7CiMgICAgIGZuIHByaW50ZihjOiAqY29uc3QgaTgsIC4uLik7CiMgfQp1bnNhZmUgewogICAgcHJpbnRmKDo6c3RkOjpwdHI6Om51bGwoKSwgMGY2NCk7IC8vIG9rIQp9CmBgYApFMDYxOEF0dGVtcHRlZCB0byBjYWxsIHNvbWV0aGluZyB3aGljaCBpc24ndCBhIGZ1bmN0aW9uIG5vciBhIG1ldGhvZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNjE4CmVudW0gWCB7CiAgICBFbnRyeSwKfQoKWDo6RW50cnkoKTsgLy8gZXJyb3I6IGV4cGVjdGVkIGZ1bmN0aW9uLCB0dXBsZSBzdHJ1Y3Qgb3IgdHVwbGUgdmFyaWFudCwKICAgICAgICAgICAgLy8gZm91bmQgYFg6OkVudHJ5YAoKLy8gT3IgZXZlbiBzaW1wbGVyOgpsZXQgeCA9IDBpMzI7CngoKTsgLy8gZXJyb3I6IGV4cGVjdGVkIGZ1bmN0aW9uLCB0dXBsZSBzdHJ1Y3Qgb3IgdHVwbGUgdmFyaWFudCwgZm91bmQgYGkzMmAKYGBgCgpPbmx5IGZ1bmN0aW9ucyBhbmQgbWV0aG9kcyBjYW4gYmUgY2FsbGVkIHVzaW5nIGAoKWAuIEV4YW1wbGU6CgpgYGAKLy8gV2UgZGVjbGFyZSBhIGZ1bmN0aW9uOgpmbiBpX2FtX2FfZnVuY3Rpb24oKSB7fQoKLy8gQW5kIHdlIGNhbGwgaXQ6CmlfYW1fYV9mdW5jdGlvbigpOwpgYGAKRTA2MTkjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGUgdHlwZS1jaGVja2VyIG5lZWRlZCB0byBrbm93IHRoZSB0eXBlIG9mIGFuIGV4cHJlc3Npb24sIGJ1dCB0aGF0IHR5cGUgaGFkIG5vdAp5ZXQgYmVlbiBpbmZlcnJlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKbGV0IG11dCB4ID0gdmVjIVtdOwptYXRjaCB4LnBvcCgpIHsKICAgIFNvbWUodikgPT4gewogICAgICAgIC8vIEhlcmUsIHRoZSB0eXBlIG9mIGB2YCBpcyBub3QgKHlldCkga25vd24sIHNvIHdlCiAgICAgICAgLy8gY2Fubm90IHJlc29sdmUgdGhpcyBtZXRob2QgY2FsbDoKICAgICAgICB2LnRvX3VwcGVyY2FzZSgpOyAvLyBlcnJvcjogdGhlIHR5cGUgb2YgdGhpcyB2YWx1ZSBtdXN0IGJlIGtub3duIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHRoaXMgY29udGV4dAogICAgfQogICAgTm9uZSA9PiB7fQp9CmBgYAoKVHlwZSBpbmZlcmVuY2UgdHlwaWNhbGx5IHByb2NlZWRzIGZyb20gdGhlIHRvcCBvZiB0aGUgZnVuY3Rpb24gdG8gdGhlIGJvdHRvbSwKZmlndXJpbmcgb3V0IHR5cGVzIGFzIGl0IGdvZXMuIEluIHNvbWUgY2FzZXMgLS0gbm90YWJseSBtZXRob2QgY2FsbHMgYW5kCm92ZXJsb2FkYWJsZSBvcGVyYXRvcnMgbGlrZSBgKmAgLS0gdGhlIHR5cGUgY2hlY2tlciBtYXkgbm90IGhhdmUgZW5vdWdoCmluZm9ybWF0aW9uICp5ZXQqIHRvIG1ha2UgcHJvZ3Jlc3MuIFRoaXMgY2FuIGJlIHRydWUgZXZlbiBpZiB0aGUgcmVzdCBvZiB0aGUKZnVuY3Rpb24gcHJvdmlkZXMgZW5vdWdoIGNvbnRleHQgKGJlY2F1c2UgdGhlIHR5cGUtY2hlY2tlciBoYXNuJ3QgbG9va2VkIHRoYXQKZmFyIGFoZWFkIHlldCkuIEluIHRoaXMgY2FzZSwgdHlwZSBhbm5vdGF0aW9ucyBjYW4gYmUgdXNlZCB0byBoZWxwIGl0IGFsb25nLgoKVG8gZml4IHRoaXMgZXJyb3IsIGp1c3Qgc3BlY2lmeSB0aGUgdHlwZSBvZiB0aGUgdmFyaWFibGUuIEV4YW1wbGU6CgpgYGAKbGV0IG11dCB4OiBWZWM8U3RyaW5nPiA9IHZlYyFbXTsgLy8gV2UgcHJlY2lzZSB0aGUgdHlwZSBvZiB0aGUgdmVjIGVsZW1lbnRzLgptYXRjaCB4LnBvcCgpIHsKICAgIFNvbWUodikgPT4gewogICAgICAgIHYudG9fdXBwZXJjYXNlKCk7IC8vIFNpbmNlIHJ1c3RjIG5vdyBrbm93cyB0aGUgdHlwZSBvZiB0aGUgdmVjIGVsZW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGNhbiB1c2UgYHZgJ3MgbWV0aG9kcy4KICAgIH0KICAgIE5vbmUgPT4ge30KfQpgYGAKRTA2MjBBIGNhc3QgdG8gYW4gdW5zaXplZCB0eXBlIHdhcyBhdHRlbXB0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjIwCmxldCB4ID0gJlsxX3VzaXplLCAyXSBhcyBbdXNpemVdOyAvLyBlcnJvcjogY2FzdCB0byB1bnNpemVkIHR5cGU6IGAmW3VzaXplOyAyXWAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBhcyBgW3VzaXplXWAKYGBgCgpJbiBSdXN0LCBzb21lIHR5cGVzIGRvbid0IGhhdmUgYSBrbm93biBzaXplIGF0IGNvbXBpbGUtdGltZS4gRm9yIGV4YW1wbGUsIGluIGEKc2xpY2UgdHlwZSBsaWtlIGBbdTMyXWAsIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaXMgbm90IGtub3duIGF0IGNvbXBpbGUtdGltZSBhbmQKaGVuY2UgdGhlIG92ZXJhbGwgc2l6ZSBjYW5ub3QgYmUgY29tcHV0ZWQuIEFzIGEgcmVzdWx0LCBzdWNoIHR5cGVzIGNhbiBvbmx5IGJlCm1hbmlwdWxhdGVkIHRocm91Z2ggYSByZWZlcmVuY2UgKGUuZy4sIGAmVGAgb3IgYCZtdXQgVGApIG9yIG90aGVyIHBvaW50ZXItdHlwZQooZS5nLiwgYEJveGAgb3IgYFJjYCkuIFRyeSBjYXN0aW5nIHRvIGEgcmVmZXJlbmNlIGluc3RlYWQ6CgpgYGAKbGV0IHggPSAmWzFfdXNpemUsIDJdIGFzICZbdXNpemVdOyAvLyBvayEKYGBgCkUwNjIxVGhpcyBlcnJvciBjb2RlIGluZGljYXRlcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGxpZmV0aW1lcyBhcHBlYXJpbmcgaW4gdGhlCmZ1bmN0aW9uIHNpZ25hdHVyZSAoaS5lLiwgdGhlIHBhcmFtZXRlciB0eXBlcyBhbmQgdGhlIHJldHVybiB0eXBlKSBhbmQgdGhlCmRhdGEtZmxvdyBmb3VuZCBpbiB0aGUgZnVuY3Rpb24gYm9keS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjEKZm4gZm9vPCdhPih4OiAmJ2EgaTMyLCB5OiAmaTMyKSAtPiAmJ2EgaTMyIHsgLy8gZXJyb3I6IGV4cGxpY2l0IGxpZmV0aW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICByZXF1aXJlZCBpbiB0aGUgdHlwZSBvZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYHlgCiAgICBpZiB4ID4geSB7IHggfSBlbHNlIHsgeSB9Cn0KYGBgCgpJbiB0aGUgY29kZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIGlzIHJldHVybmluZyBkYXRhIGJvcnJvd2VkIGZyb20gZWl0aGVyIGB4YCBvcgpgeWAsIGJ1dCB0aGUgYCdhYCBhbm5vdGF0aW9uIGluZGljYXRlcyB0aGF0IGl0IGlzIHJldHVybmluZyBkYXRhIG9ubHkgZnJvbSBgeGAuClRvIGZpeCB0aGUgZXJyb3IsIHRoZSBzaWduYXR1cmUgYW5kIHRoZSBib2R5IG11c3QgYmUgbWFkZSB0byBtYXRjaC4gVHlwaWNhbGx5LAp0aGlzIGlzIGRvbmUgYnkgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS4gU28sIGluIHRoaXMgY2FzZSwgd2UgY2hhbmdlCnRoZSB0eXBlIG9mIGB5YCB0byBgJidhIGkzMmAsIGxpa2Ugc286CgpgYGAKZm4gZm9vPCdhPih4OiAmJ2EgaTMyLCB5OiAmJ2EgaTMyKSAtPiAmJ2EgaTMyIHsKICAgIGlmIHggPiB5IHsgeCB9IGVsc2UgeyB5IH0KfQpgYGAKCk5vdyB0aGUgc2lnbmF0dXJlIGluZGljYXRlcyB0aGF0IHRoZSBmdW5jdGlvbiBkYXRhIGJvcnJvd2VkIGZyb20gZWl0aGVyIGB4YCBvcgpgeWAuIEFsdGVybmF0aXZlbHksIHlvdSBjb3VsZCBjaGFuZ2UgdGhlIGJvZHkgdG8gbm90IHJldHVybiBkYXRhIGZyb20gYHlgOgoKYGBgCmZuIGZvbzwnYT4oeDogJidhIGkzMiwgeTogJmkzMikgLT4gJidhIGkzMiB7CiAgICB4Cn0KYGBgCkUwNjIyQW4gaW50cmluc2ljIHdhcyBkZWNsYXJlZCB3aXRob3V0IGJlaW5nIGEgZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjIyCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIHB1YiBzdGF0aWMgYnJlYWtwb2ludCA6IGZuKCk7IC8vIGVycm9yOiBpbnRyaW5zaWMgbXVzdCBiZSBhIGZ1bmN0aW9uCn0KCmZuIG1haW4oKSB7IHVuc2FmZSB7IGJyZWFrcG9pbnQoKTsgfSB9CmBgYAoKQW4gaW50cmluc2ljIGlzIGEgZnVuY3Rpb24gYXZhaWxhYmxlIGZvciB1c2UgaW4gYSBnaXZlbiBwcm9ncmFtbWluZyBsYW5ndWFnZQp3aG9zZSBpbXBsZW1lbnRhdGlvbiBpcyBoYW5kbGVkIHNwZWNpYWxseSBieSB0aGUgY29tcGlsZXIuIEluIG9yZGVyIHRvIGZpeCB0aGlzCmVycm9yLCBqdXN0IGRlY2xhcmUgYSBmdW5jdGlvbi4gRXhhbXBsZToKCmBgYG5vX3J1bgojIVtmZWF0dXJlKGludHJpbnNpY3MpXQpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBwdWIgZm4gYnJlYWtwb2ludCgpOyAvLyBvayEKfQoKZm4gbWFpbigpIHsgdW5zYWZlIHsgYnJlYWtwb2ludCgpOyB9IH0KYGBgCkUwNjIzQSBsaWZldGltZSBkaWRuJ3QgbWF0Y2ggd2hhdCB3YXMgZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjIzCnN0cnVjdCBGb288J2E+IHsKICAgIHg6ICYnYSBpc2l6ZSwKfQoKZm4gYmFyPCdzaG9ydCwgJ2xvbmc+KGM6IEZvbzwnc2hvcnQ+LCBsOiAmJ2xvbmcgaXNpemUpIHsKICAgIGxldCBfOiBGb288J2xvbmc+ID0gYzsgLy8gZXJyb3IhCn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIHdlIHRyaWVkIHRvIHNldCBhIHZhbHVlIHdpdGggYW4gaW5jb21wYXRpYmxlIGxpZmV0aW1lIHRvCmFub3RoZXIgb25lIChgJ2xvbmdgIGlzIHVucmVsYXRlZCB0byBgJ3Nob3J0YCkuIFdlIGNhbiBzb2x2ZSB0aGlzIGlzc3VlIGluCnR3byBkaWZmZXJlbnQgd2F5czoKCkVpdGhlciB3ZSBtYWtlIGAnc2hvcnRgIGxpdmUgYXQgbGVhc3QgYXMgbG9uZyBhcyBgJ2xvbmdgOgoKYGBgCnN0cnVjdCBGb288J2E+IHsKICAgIHg6ICYnYSBpc2l6ZSwKfQoKLy8gd2Ugc2V0ICdzaG9ydCB0byBsaXZlIGF0IGxlYXN0IGFzIGxvbmcgYXMgJ2xvbmcKZm4gYmFyPCdzaG9ydDogJ2xvbmcsICdsb25nPihjOiBGb288J3Nob3J0PiwgbDogJidsb25nIGlzaXplKSB7CiAgICBsZXQgXzogRm9vPCdsb25nPiA9IGM7IC8vIG9rIQp9CmBgYAoKT3Igd2UgdXNlIG9ubHkgb25lIGxpZmV0aW1lOgoKYGBgCnN0cnVjdCBGb288J2E+IHsKICAgIHg6ICYnYSBpc2l6ZSwKfQpmbiBiYXI8J3Nob3J0PihjOiBGb288J3Nob3J0PiwgbDogJidzaG9ydCBpc2l6ZSkgewogICAgbGV0IF86IEZvbzwnc2hvcnQ+ID0gYzsgLy8gb2shCn0KYGBgCkUwNjI0QSBwcml2YXRlIGl0ZW0gd2FzIHVzZWQgb3V0c2lkZSBvZiBpdHMgc2NvcGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjI0Cm1vZCBpbm5lciB7CiAgICBwdWIgc3RydWN0IEZvbzsKCiAgICBpbXBsIEZvbyB7CiAgICAgICAgZm4gbWV0aG9kKCZzZWxmKSB7fQogICAgfQp9CgpsZXQgZm9vID0gaW5uZXI6OkZvbzsKZm9vLm1ldGhvZCgpOyAvLyBlcnJvcjogbWV0aG9kIGBtZXRob2RgIGlzIHByaXZhdGUKYGBgCgpUd28gcG9zc2liaWxpdGllcyBhcmUgYXZhaWxhYmxlIHRvIHNvbHZlIHRoaXMgaXNzdWU6CgoxLiBPbmx5IHVzZSB0aGUgaXRlbSBpbiB0aGUgc2NvcGUgaXQgaGFzIGJlZW4gZGVmaW5lZDoKCmBgYAptb2QgaW5uZXIgewogICAgcHViIHN0cnVjdCBGb287CgogICAgaW1wbCBGb28gewogICAgICAgIGZuIG1ldGhvZCgmc2VsZikge30KICAgIH0KCiAgICBwdWIgZm4gY2FsbF9tZXRob2QoZm9vOiAmRm9vKSB7IC8vIFdlIGNyZWF0ZSBhIHB1YmxpYyBmdW5jdGlvbi4KICAgICAgICBmb28ubWV0aG9kKCk7IC8vIFdoaWNoIGNhbGxzIHRoZSBpdGVtLgogICAgfQp9CgpsZXQgZm9vID0gaW5uZXI6OkZvbzsKaW5uZXI6OmNhbGxfbWV0aG9kKCZmb28pOyAvLyBBbmQgc2luY2UgdGhlIGZ1bmN0aW9uIGlzIHB1YmxpYywgd2UgY2FuIGNhbGwgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWV0aG9kIHRocm91Z2ggaXQuCmBgYAoKMi4gTWFrZSB0aGUgaXRlbSBwdWJsaWM6CgpgYGAKbW9kIGlubmVyIHsKICAgIHB1YiBzdHJ1Y3QgRm9vOwoKICAgIGltcGwgRm9vIHsKICAgICAgICBwdWIgZm4gbWV0aG9kKCZzZWxmKSB7fSAvLyBJdCdzIG5vdyBwdWJsaWMuCiAgICB9Cn0KCmxldCBmb28gPSBpbm5lcjo6Rm9vOwpmb28ubWV0aG9kKCk7IC8vIE9rIQpgYGAKRTA2MjZUaGlzIGVycm9yIG9jY3VycyBiZWNhdXNlIGEgYm9ycm93IGluIGEgZ2VuZXJhdG9yIHBlcnNpc3RzIGFjcm9zcyBhCnlpZWxkIHBvaW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyNgojICMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0LCBwaW4pXQojIHVzZSBzdGQ6Om9wczo6R2VuZXJhdG9yOwojIHVzZSBzdGQ6OnBpbjo6UGluOwpsZXQgbXV0IGIgPSB8fCB7CiAgICBsZXQgYSA9ICZTdHJpbmc6Om5ldygpOyAvLyA8LS0gVGhpcyBib3Jyb3cuLi4KICAgIHlpZWxkICgpOyAvLyAuLi5pcyBzdGlsbCBpbiBzY29wZSBoZXJlLCB3aGVuIHRoZSB5aWVsZCBvY2N1cnMuCiAgICBwcmludGxuISgie30iLCBhKTsKfTsKUGluOjpuZXcoJm11dCBiKS5yZXN1bWUoKCkpOwpgYGAKCkF0IHByZXNlbnQsIGl0IGlzIG5vdCBwZXJtaXR0ZWQgdG8gaGF2ZSBhIHlpZWxkIHRoYXQgb2NjdXJzIHdoaWxlIGEKYm9ycm93IGlzIHN0aWxsIGluIHNjb3BlLiBUbyByZXNvbHZlIHRoaXMgZXJyb3IsIHRoZSBib3Jyb3cgbXVzdAplaXRoZXIgYmUgImNvbnRhaW5lZCIgdG8gYSBzbWFsbGVyIHNjb3BlIHRoYXQgZG9lcyBub3Qgb3ZlcmxhcCB0aGUKeWllbGQgb3IgZWxzZSBlbGltaW5hdGVkIGluIGFub3RoZXIgd2F5LiBTbywgZm9yIGV4YW1wbGUsIHdlIG1pZ2h0CnJlc29sdmUgdGhlIHByZXZpb3VzIGV4YW1wbGUgYnkgcmVtb3ZpbmcgdGhlIGJvcnJvdyBhbmQganVzdCBzdG9yaW5nCnRoZSBpbnRlZ2VyIGJ5IHZhbHVlOgoKYGBgCiMgIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQsIHBpbildCiMgdXNlIHN0ZDo6b3BzOjpHZW5lcmF0b3I7CiMgdXNlIHN0ZDo6cGluOjpQaW47CmxldCBtdXQgYiA9IHx8IHsKICAgIGxldCBhID0gMzsKICAgIHlpZWxkICgpOwogICAgcHJpbnRsbiEoInt9IiwgYSk7Cn07ClBpbjo6bmV3KCZtdXQgYikucmVzdW1lKCgpKTsKYGBgCgpUaGlzIGlzIGEgdmVyeSBzaW1wbGUgY2FzZSwgb2YgY291cnNlLiBJbiBtb3JlIGNvbXBsZXggY2FzZXMsIHdlIG1heQp3aXNoIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSByZWZlcmVuY2UgdG8gdGhlIHZhbHVlIHRoYXQgd2FzIGJvcnJvd2VkIC0tCmluIHRob3NlIGNhc2VzLCBzb21ldGhpbmcgbGlrZSB0aGUgYFJjYCBvciBgQXJjYCB0eXBlcyBtYXkgYmUgdXNlZnVsLgoKVGhpcyBlcnJvciBhbHNvIGZyZXF1ZW50bHkgYXJpc2VzIHdpdGggaXRlcmF0aW9uOgoKYGBgY29tcGlsZV9mYWlsLEUwNjI2CiMgIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQsIHBpbildCiMgdXNlIHN0ZDo6b3BzOjpHZW5lcmF0b3I7CiMgdXNlIHN0ZDo6cGluOjpQaW47CmxldCBtdXQgYiA9IHx8IHsKICBsZXQgdiA9IHZlYyFbMSwyLDNdOwogIGZvciAmeCBpbiAmdiB7IC8vIDwtLSBib3Jyb3cgb2YgYHZgIGlzIHN0aWxsIGluIHNjb3BlLi4uCiAgICB5aWVsZCB4OyAvLyAuLi53aGVuIHRoaXMgeWllbGQgb2NjdXJzLgogIH0KfTsKUGluOjpuZXcoJm11dCBiKS5yZXN1bWUoKCkpOwpgYGAKClN1Y2ggY2FzZXMgY2FuIHNvbWV0aW1lcyBiZSByZXNvbHZlZCBieSBpdGVyYXRpbmcgImJ5IHZhbHVlIiAob3IgdXNpbmcKYGludG9faXRlcigpYCkgdG8gYXZvaWQgYm9ycm93aW5nOgoKYGBgCiMgIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQsIHBpbildCiMgdXNlIHN0ZDo6b3BzOjpHZW5lcmF0b3I7CiMgdXNlIHN0ZDo6cGluOjpQaW47CmxldCBtdXQgYiA9IHx8IHsKICBsZXQgdiA9IHZlYyFbMSwyLDNdOwogIGZvciB4IGluIHYgeyAvLyA8LS0gVGFrZSBvd25lcnNoaXAgb2YgdGhlIHZhbHVlcyBpbnN0ZWFkIQogICAgeWllbGQgeDsgLy8gPC0tIE5vdyB5aWVsZCBpcyBPSy4KICB9Cn07ClBpbjo6bmV3KCZtdXQgYikucmVzdW1lKCgpKTsKYGBgCgpJZiB0YWtpbmcgb3duZXJzaGlwIGlzIG5vdCBhbiBvcHRpb24sIHVzaW5nIGluZGljZXMgY2FuIHdvcmsgdG9vOgoKYGBgCiMgIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQsIHBpbildCiMgdXNlIHN0ZDo6b3BzOjpHZW5lcmF0b3I7CiMgdXNlIHN0ZDo6cGluOjpQaW47CmxldCBtdXQgYiA9IHx8IHsKICBsZXQgdiA9IHZlYyFbMSwyLDNdOwogIGxldCBsZW4gPSB2LmxlbigpOyAvLyAoKikKICBmb3IgaSBpbiAwLi5sZW4gewogICAgbGV0IHggPSB2W2ldOyAvLyAoKikKICAgIHlpZWxkIHg7IC8vIDwtLSBOb3cgeWllbGQgaXMgT0suCiAgfQp9OwpQaW46Om5ldygmbXV0IGIpLnJlc3VtZSgoKSk7CgovLyAoKikgLS0gVW5mb3J0dW5hdGVseSwgdGhlc2UgdGVtcG9yYXJpZXMgYXJlIGN1cnJlbnRseSByZXF1aXJlZC4KLy8gU2VlIDxodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzQzMTIyPi4KYGBgCkUwNjI3QSB5aWVsZCBleHByZXNzaW9uIHdhcyB1c2VkIG91dHNpZGUgb2YgdGhlIGdlbmVyYXRvciBsaXRlcmFsLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyNwojIVtmZWF0dXJlKGdlbmVyYXRvcnMsIGdlbmVyYXRvcl90cmFpdCldCgpmbiBmYWtlX2dlbmVyYXRvcigpIC0+ICYnc3RhdGljIHN0ciB7CiAgICB5aWVsZCAxOwogICAgcmV0dXJuICJmb28iCn0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IGdlbmVyYXRvciA9IGZha2VfZ2VuZXJhdG9yOwp9CmBgYAoKVGhlIGVycm9yIG9jY3VycyBiZWNhdXNlIGtleXdvcmQgYHlpZWxkYCBjYW4gb25seSBiZSB1c2VkIGluc2lkZSB0aGUgZ2VuZXJhdG9yCmxpdGVyYWwuIFRoaXMgY2FuIGJlIGZpeGVkIGJ5IGNvbnN0cnVjdGluZyB0aGUgZ2VuZXJhdG9yIGNvcnJlY3RseS4KCmBgYAojIVtmZWF0dXJlKGdlbmVyYXRvcnMsIGdlbmVyYXRvcl90cmFpdCldCgpmbiBtYWluKCkgewogICAgbGV0IG11dCBnZW5lcmF0b3IgPSB8fCB7CiAgICAgICAgeWllbGQgMTsKICAgICAgICByZXR1cm4gImZvbyIKICAgIH07Cn0KYGBgCkUwNjI4TW9yZSB0aGFuIG9uZSBwYXJhbWV0ZXIgd2FzIHVzZWQgZm9yIGEgZ2VuZXJhdG9yLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyOAojIVtmZWF0dXJlKGdlbmVyYXRvcnMsIGdlbmVyYXRvcl90cmFpdCldCgpmbiBtYWluKCkgewogICAgbGV0IGdlbmVyYXRvciA9IHxhOiBpMzIsIGI6IGkzMnwgewogICAgICAgIC8vIGVycm9yOiB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBhIGdlbmVyYXRvcgogICAgICAgIC8vIEFsbG93ZWQgb25seSAwIG9yIDEgcGFyYW1ldGVyCiAgICAgICAgeWllbGQgYTsKICAgIH07Cn0KYGBgCgpBdCBwcmVzZW50LCBpdCBpcyBub3QgcGVybWl0dGVkIHRvIHBhc3MgbW9yZSB0aGFuIG9uZSBleHBsaWNpdApwYXJhbWV0ZXIgZm9yIGEgZ2VuZXJhdG9yLlRoaXMgY2FuIGJlIGZpeGVkIGJ5IHVzaW5nCmF0IG1vc3QgMSBwYXJhbWV0ZXIgZm9yIHRoZSBnZW5lcmF0b3IuIEZvciBleGFtcGxlLCB3ZSBtaWdodCByZXNvbHZlCnRoZSBwcmV2aW91cyBleGFtcGxlIGJ5IHBhc3Npbmcgb25seSBvbmUgcGFyYW1ldGVyLgoKYGBgCiMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0KV0KCmZuIG1haW4oKSB7CiAgICBsZXQgZ2VuZXJhdG9yID0gfGE6IGkzMnwgewogICAgICAgIHlpZWxkIGE7CiAgICB9Owp9CmBgYApFMDYzMVRoaXMgZXJyb3IgaW5kaWNhdGVzIGEgdHlwZSBtaXNtYXRjaCBpbiBjbG9zdXJlIGFyZ3VtZW50cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MzEKZm4gZm9vPEY6IEZuKGkzMik+KGY6IEYpIHsKfQoKZm4gbWFpbigpIHsKICAgIGZvbyh8eDogJnN0cnwge30pOwp9CmBgYAoKVGhlIGVycm9yIG9jY3VycyBiZWNhdXNlIGBmb29gIGFjY2VwdHMgYSBjbG9zdXJlIHRoYXQgdGFrZXMgYW4gYGkzMmAgYXJndW1lbnQsCmJ1dCBpbiBgbWFpbmAsIGl0IGlzIHBhc3NlZCBhIGNsb3N1cmUgd2l0aCBhIGAmc3RyYCBhcmd1bWVudC4KClRoaXMgY2FuIGJlIHJlc29sdmVkIGJ5IGNoYW5naW5nIHRoZSB0eXBlIGFubm90YXRpb24gb3IgcmVtb3ZpbmcgaXQgZW50aXJlbHkKaWYgaXQgY2FuIGJlIGluZmVycmVkLgoKYGBgCmZuIGZvbzxGOiBGbihpMzIpPihmOiBGKSB7Cn0KCmZuIG1haW4oKSB7CiAgICBmb28ofHg6IGkzMnwge30pOwp9CmBgYApFMDYzM1RoZSBgdW53aW5kYCBhdHRyaWJ1dGUgd2FzIG1hbGZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MzMKIyFbZmVhdHVyZSh1bndpbmRfYXR0cmlidXRlcyldCgojW3Vud2luZCgpXSAvLyBlcnJvcjogZXhwZWN0ZWQgb25lIGFyZ3VtZW50CnB1YiBleHRlcm4gZm4gc29tZXRoaW5nKCkge30KCmZuIG1haW4oKSB7fQpgYGAKClRoZSBgI1t1bndpbmRdYCBhdHRyaWJ1dGUgc2hvdWxkIGJlIHVzZWQgYXMgZm9sbG93czoKCi0gYCNbdW53aW5kKGFib3J0cyldYCAtLSBzcGVjaWZpZXMgdGhhdCBpZiBhIG5vbi1SdXN0IEFCSSBmdW5jdGlvbgogIHNob3VsZCBhYm9ydCB0aGUgcHJvY2VzcyBpZiBpdCBhdHRlbXB0cyB0byB1bndpbmQuIFRoaXMgaXMgdGhlIHNhZmVyCiAgYW5kIHByZWZlcnJlZCBvcHRpb24uCgotIGAjW3Vud2luZChhbGxvd2VkKV1gIC0tIHNwZWNpZmllcyB0aGF0IGEgbm9uLVJ1c3QgQUJJIGZ1bmN0aW9uCiAgc2hvdWxkIGJlIGFsbG93ZWQgdG8gdW53aW5kLiBUaGlzIGNhbiBlYXNpbHkgcmVzdWx0IGluIFVuZGVmaW5lZAogIEJlaGF2aW9yIChVQiksIHNvIGJlIGNhcmVmdWwuCgpOQi4gVGhlIGRlZmF1bHQgYmVoYXZpb3IgaGVyZSBpcyAiYWxsb3dlZCIsIGJ1dCB0aGlzIGlzIHVuc3BlY2lmaWVkCmFuZCBsaWtlbHkgdG8gY2hhbmdlIGluIHRoZSBmdXR1cmUuCkUwNjM0QSB0eXBlIGhhcyBjb25mbGljdGluZyBgcGFja2VkYCByZXByZXNlbnRhdGlvbiBoaW50cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNjM0CiNbcmVwcihwYWNrZWQsIHBhY2tlZCgyKSldIC8vIGVycm9yIQpzdHJ1Y3QgQ29tcGFueShpMzIpOwoKI1tyZXByKHBhY2tlZCgyKSldIC8vIGVycm9yIQojW3JlcHIocGFja2VkKV0Kc3RydWN0IENvbXBhbnkoaTMyKTsKYGBgCgpZb3UgY2Fubm90IHVzZSBjb25mbGljdGluZyBgcGFja2VkYCBoaW50cyBvbiBhIHNhbWUgdHlwZS4gSWYgeW91IHdhbnQgdG8gcGFjayBhCnR5cGUgdG8gYSBnaXZlbiBzaXplLCB5b3Ugc2hvdWxkIHByb3ZpZGUgYSBzaXplIHRvIHBhY2tlZDoKCmBgYAojW3JlcHIocGFja2VkKV0gLy8gb2shCnN0cnVjdCBDb21wYW55KGkzMik7CmBgYApFMDYzNVRoZSBgIyFbZmVhdHVyZV1gIGF0dHJpYnV0ZSBzcGVjaWZpZWQgYW4gdW5rbm93biBmZWF0dXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYzNQojIVtmZWF0dXJlKG5vbmV4aXN0ZW50X3J1c3RfZmVhdHVyZSldIC8vIGVycm9yOiB1bmtub3duIGZlYXR1cmUKYGBgCkUwNjM2QSBgIyFbZmVhdHVyZV1gIGF0dHJpYnV0ZSB3YXMgZGVjbGFyZWQgbXVsdGlwbGUgdGltZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjM2CiMhW2FsbG93KHN0YWJsZV9mZWF0dXJlcyldCiMhW2ZlYXR1cmUocnVzdDEpXQojIVtmZWF0dXJlKHJ1c3QxKV0gLy8gZXJyb3I6IHRoZSBmZWF0dXJlIGBydXN0MWAgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZApgYGAKRTA2MzdBbiB1bmRlcnNjb3JlIGBfYCBjaGFyYWN0ZXIgaGFzIGJlZW4gdXNlZCBhcyB0aGUgaWRlbnRpZmllciBmb3IgYSBsaWZldGltZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDYsRTA2MzcKZm4gbG9uZ2VzdDwnXz4oc3RyMTogJidfIHN0ciwgc3RyMjogJidfIHN0cikgLT4gJidfIHN0ciB7CiAgICAgICAgIC8vXl4gYCdfYCBpcyBhIHJlc2VydmVkIGxpZmV0aW1lIG5hbWUKICAgIGlmIHN0cjEubGVuKCkgPiBzdHIyLmxlbigpIHsKICAgICAgICBzdHIxCiAgICB9IGVsc2UgewogICAgICAgIHN0cjIKICAgIH0KfQpgYGAKCmAnX2AsIGNhbm5vdCBiZSB1c2VkIGFzIGEgbGlmZXRpbWUgaWRlbnRpZmllciBiZWNhdXNlIGl0IGlzIGEgcmVzZXJ2ZWQgZm9yIHRoZQphbm9ueW1vdXMgbGlmZXRpbWUuIFRvIGZpeCB0aGlzLCB1c2UgYSBsb3dlcmNhc2UgbGV0dGVyIHN1Y2ggYXMgJ2EsIG9yIGEgc2VyaWVzCm9mIGxvd2VyY2FzZSBsZXR0ZXJzIHN1Y2ggYXMgYCdmb29gLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbdGhlCmJvb2tdW2JrLW5vXS4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSBhbm9ueW1vdXMgbGlmZXRpbWUgaW4gcnVzdApuaWdodGx5LCBzZWUgW3RoZSBuaWdodGx5IGJvb2tdW2JrLWFsXS4KCkNvcnJlY3RlZCBleGFtcGxlOgoKYGBgCmZuIGxvbmdlc3Q8J2E+KHN0cjE6ICYnYSBzdHIsIHN0cjI6ICYnYSBzdHIpIC0+ICYnYSBzdHIgewogICAgaWYgc3RyMS5sZW4oKSA+IHN0cjIubGVuKCkgewogICAgICAgIHN0cjEKICAgIH0gZWxzZSB7CiAgICAgICAgc3RyMgogICAgfQp9CmBgYAoKW2JrLW5vXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2FwcGVuZGl4LTAyLW9wZXJhdG9ycy5odG1sI25vbi1vcGVyYXRvci1zeW1ib2xzCltiay1hbF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvbmlnaHRseS9lZGl0aW9uLWd1aWRlL3J1c3QtMjAxOC9vd25lcnNoaXAtYW5kLWxpZmV0aW1lcy90aGUtYW5vbnltb3VzLWxpZmV0aW1lLmh0bWwKRTA2MzhUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBzdHJ1Y3QsIGVudW0gb3IgZW51bSB2YXJpYW50IG11c3QgYmUgbWF0Y2hlZApub24tZXhoYXVzdGl2ZWx5IGFzIGl0IGhhcyBiZWVuIG1hcmtlZCBhcyBgbm9uX2V4aGF1c3RpdmVgLgoKV2hlbiBhcHBsaWVkIHdpdGhpbiBhIGNyYXRlLCBkb3duc3RyZWFtIHVzZXJzIG9mIHRoZSBjcmF0ZSB3aWxsIG5lZWQgdG8gdXNlIHRoZQpgX2AgcGF0dGVybiB3aGVuIG1hdGNoaW5nIGVudW1zIGFuZCB1c2UgdGhlIGAuLmAgcGF0dGVybiB3aGVuIG1hdGNoaW5nIHN0cnVjdHMuCkRvd25zdHJlYW0gY3JhdGVzIGNhbm5vdCBtYXRjaCBhZ2FpbnN0IG5vbi1leGhhdXN0aXZlIGVudW0gdmFyaWFudHMuCgpGb3IgZXhhbXBsZSwgaW4gdGhlIGJlbG93IGV4YW1wbGUsIHNpbmNlIHRoZSBlbnVtIGlzIG1hcmtlZCBhcwpgbm9uX2V4aGF1c3RpdmVgLCBpdCBpcyByZXF1aXJlZCB0aGF0IGRvd25zdHJlYW0gY3JhdGVzIG1hdGNoIG5vbi1leGhhdXN0aXZlbHkKb24gaXQuCgpgYGBydXN0LGlnbm9yZSAocHNldWRvLVJ1c3QpCiNbbm9uX2V4aGF1c3RpdmVdCnB1YiBlbnVtIEVycm9yIHsKICAgIE1lc3NhZ2UoU3RyaW5nKSwKICAgIE90aGVyLAp9CgppbXBsIERpc3BsYXkgZm9yIEVycm9yIHsKICAgIGZuIGZtdCgmc2VsZiwgZm9ybWF0dGVyOiAmbXV0IGZtdDo6Rm9ybWF0dGVyKSAtPiBmbXQ6OlJlc3VsdCB7CiAgICAgICAgLy8gVGhpcyB3aWxsIG5vdCBlcnJvciwgZGVzcGl0ZSBiZWluZyBtYXJrZWQgYXMgbm9uX2V4aGF1c3RpdmUsIGFzIHRoaXMKICAgICAgICAvLyBlbnVtIGlzIGRlZmluZWQgd2l0aGluIHRoZSBjdXJyZW50IGNyYXRlLCBpdCBjYW4gYmUgbWF0Y2hlZAogICAgICAgIC8vIGV4aGF1c3RpdmVseS4KICAgICAgICBsZXQgZGlzcGxheSA9IG1hdGNoIHNlbGYgewogICAgICAgICAgICBNZXNzYWdlKHMpID0+IHMsCiAgICAgICAgICAgIE90aGVyID0+ICJvdGhlciBvciB1bmtub3duIGVycm9yIiwKICAgICAgICB9OwogICAgICAgIGZvcm1hdHRlci53cml0ZV9zdHIoZGlzcGxheSkKICAgIH0KfQpgYGAKCkFuIGV4YW1wbGUgb2YgbWF0Y2hpbmcgbm9uLWV4aGF1c3RpdmVseSBvbiB0aGUgYWJvdmUgZW51bSBpcyBwcm92aWRlZCBiZWxvdzoKCmBgYHJ1c3QsaWdub3JlIChwc2V1ZG8tUnVzdCkKdXNlIG15Y3JhdGU6OkVycm9yOwoKLy8gVGhpcyB3aWxsIG5vdCBlcnJvciBhcyB0aGUgbm9uX2V4aGF1c3RpdmUgRXJyb3IgZW51bSBoYXMgYmVlbiBtYXRjaGVkIHdpdGggYQovLyB3aWxkY2FyZC4KbWF0Y2ggZXJyb3IgewogICAgTWVzc2FnZShzKSA9PiAuLi4sCiAgICBPdGhlciA9PiAuLi4sCiAgICBfID0+IC4uLiwKfQpgYGAKClNpbWlsYXJseSwgZm9yIHN0cnVjdHMsIG1hdGNoIHdpdGggYC4uYCB0byBhdm9pZCB0aGlzIGVycm9yLgpFMDYzOVRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIHN0cnVjdCwgZW51bSBvciBlbnVtIHZhcmlhbnQgY2Fubm90IGJlCmluc3RhbnRpYXRlZCBmcm9tIG91dHNpZGUgb2YgdGhlIGRlZmluaW5nIGNyYXRlIGFzIGl0IGhhcyBiZWVuIG1hcmtlZAphcyBgbm9uX2V4aGF1c3RpdmVgIGFuZCBhcyBzdWNoIG1vcmUgZmllbGRzL3ZhcmlhbnRzIG1heSBiZSBhZGRlZCBpbgpmdXR1cmUgdGhhdCBjb3VsZCBjYXVzZSBhZHZlcnNlIHNpZGUgZWZmZWN0cyBmb3IgdGhpcyBjb2RlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGlnbm9yZSAoaXQgb25seSB3b3JrcyBjcm9zcy1jcmF0ZSkKI1tub25fZXhoYXVzdGl2ZV0KcHViIHN0cnVjdCBOb3JtYWxTdHJ1Y3QgewogICAgcHViIGZpcnN0X2ZpZWxkOiB1MTYsCiAgICBwdWIgc2Vjb25kX2ZpZWxkOiB1MTYsCn0KCmxldCBucyA9IE5vcm1hbFN0cnVjdCB7IGZpcnN0X2ZpZWxkOiA2NDAsIHNlY29uZF9maWVsZDogNDgwIH07IC8vIGVycm9yIQpgYGAKCkl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGxvb2sgZm9yIGEgYG5ld2AgZnVuY3Rpb24gb3IgZXF1aXZhbGVudCBpbiB0aGUKY3JhdGUncyBkb2N1bWVudGF0aW9uLgpFMDY0MUF0dGVtcHRlZCB0byBjYXN0IHRvL2Zyb20gYSBwb2ludGVyIHdpdGggYW4gdW5rbm93biBraW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY0MQpsZXQgYiA9IDAgYXMgKmNvbnN0IF87IC8vIGVycm9yCmBgYAoKVHlwZSBpbmZvcm1hdGlvbiBtdXN0IGJlIHByb3ZpZGVkIGlmIGEgcG9pbnRlciB0eXBlIGJlaW5nIGNhc3QgZnJvbS9pbnRvIGFub3RoZXIKdHlwZSB3aGljaCBjYW5ub3QgYmUgaW5mZXJyZWQ6CgpgYGAKLy8gQ3JlYXRpbmcgYSBwb2ludGVyIGZyb20gcmVmZXJlbmNlOiB0eXBlIGNhbiBiZSBpbmZlcnJlZApsZXQgYSA9ICYoU3RyaW5nOjpmcm9tKCJIZWxsbyB3b3JsZCEiKSkgYXMgKmNvbnN0IF87IC8vIG9rIQoKbGV0IGIgPSAwIGFzICpjb25zdCBpMzI7IC8vIG9rIQoKbGV0IGM6ICpjb25zdCBpMzIgPSAwIGFzICpjb25zdCBfOyAvLyBvayEKYGBgCkUwNjQyVHJhaXQgbWV0aG9kcyBjdXJyZW50bHkgY2Fubm90IHRha2UgcGF0dGVybnMgYXMgYXJndW1lbnRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY0Mgp0cmFpdCBGb28gewogICAgZm4gZm9vKCh4LCB5KTogKGkzMiwgaTMyKSk7IC8vIGVycm9yOiBwYXR0ZXJucyBhcmVuJ3QgYWxsb3dlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBpbiB0cmFpdCBtZXRob2RzCn0KYGBgCgpZb3UgY2FuIGluc3RlYWQgdXNlIGEgc2luZ2xlIG5hbWUgZm9yIHRoZSBhcmd1bWVudDoKCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vKHhfYW5kX3k6IChpMzIsIGkzMikpOyAvLyBvayEKfQpgYGAKRTA2NDNUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiBnZW5lcmljIHBhcmFtZXRlcnMgYW5kCmltcGwgVHJhaXQgcGFyYW1ldGVycyBpbiBhIHRyYWl0IGRlY2xhcmF0aW9uIHZlcnN1cyBpdHMgaW1wbC4KCmBgYGNvbXBpbGVfZmFpbCxFMDY0Mwp0cmFpdCBGb28gewogICAgZm4gZm9vKCZzZWxmLCBfOiAmaW1wbCBJdGVyYXRvcik7Cn0KaW1wbCBGb28gZm9yICgpIHsKICAgIGZuIGZvbzxVOiBJdGVyYXRvcj4oJnNlbGYsIF86ICZVKSB7IH0gLy8gZXJyb3IgbWV0aG9kIGBmb29gIGhhcyBpbmNvbXBhdGlibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2lnbmF0dXJlIGZvciB0cmFpdAp9CmBgYApFMDY0NEEgY2xvc3VyZSBvciBnZW5lcmF0b3Igd2FzIGNvbnN0cnVjdGVkIHRoYXQgcmVmZXJlbmNlcyBpdHMgb3duIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjQ0CmZuIGZpeDxGPihmOiAmRikKICB3aGVyZSBGOiBGbigmRikKewogICAgZigmZik7Cn0KCmZuIG1haW4oKSB7CiAgICBmaXgoJnx5fCB7CiAgICAgICAgLy8gSGVyZSwgd2hlbiBgeGAgaXMgY2FsbGVkLCB0aGUgcGFyYW1ldGVyIGB5YCBpcyBlcXVhbCB0byBgeGAuCiAgICB9KTsKfQpgYGAKClJ1c3QgZG9lcyBub3QgcGVybWl0IGEgY2xvc3VyZSB0byBkaXJlY3RseSByZWZlcmVuY2UgaXRzIG93biB0eXBlLAplaXRoZXIgdGhyb3VnaCBhbiBhcmd1bWVudCAoYXMgaW4gdGhlIGV4YW1wbGUgYWJvdmUpIG9yIGJ5IGNhcHR1cmluZwppdHNlbGYgdGhyb3VnaCBpdHMgZW52aXJvbm1lbnQuIFRoaXMgcmVzdHJpY3Rpb24gaGVscHMga2VlcCBjbG9zdXJlCmluZmVyZW5jZSB0cmFjdGFibGUuCgpUaGUgZWFzaWVzdCBmaXggaXMgdG8gcmV3cml0ZSB5b3VyIGNsb3N1cmUgaW50byBhIHRvcC1sZXZlbCBmdW5jdGlvbiwKb3IgaW50byBhIG1ldGhvZC4gSW4gc29tZSBjYXNlcywgeW91IG1heSBhbHNvIGJlIGFibGUgdG8gaGF2ZSB5b3VyCmNsb3N1cmUgY2FsbCBpdHNlbGYgYnkgY2FwdHVyaW5nIGEgYCZGbigpYCBvYmplY3Qgb3IgYGZuKClgIHBvaW50ZXIKdGhhdCByZWZlcnMgdG8gaXRzZWxmLiBUaGF0IGlzIHBlcm1pdHRpbmcsIHNpbmNlIHRoZSBjbG9zdXJlIHdvdWxkIGJlCmludm9raW5nIGl0c2VsZiB2aWEgYSB2aXJ0dWFsIGNhbGwsIGFuZCBoZW5jZSBkb2VzIG5vdCBkaXJlY3RseQpyZWZlcmVuY2UgaXRzIG93biAqdHlwZSouCkUwNjQ2SXQgaXMgbm90IHBvc3NpYmxlIHRvIGRlZmluZSBgbWFpbmAgd2l0aCBhIHdoZXJlIGNsYXVzZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDYKZm4gbWFpbigpIHdoZXJlIGkzMjogQ29weSB7IC8vIGVycm9yOiBtYWluIGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkIHRvIGhhdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgd2hlcmUgY2xhdXNlCn0KYGBgCkUwNjQ3VGhlIGBzdGFydGAgZnVuY3Rpb24gd2FzIGRlZmluZWQgd2l0aCBhIHdoZXJlIGNsYXVzZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDcKIyFbZmVhdHVyZShzdGFydCldCgojW3N0YXJ0XQpmbiBzdGFydChfOiBpc2l6ZSwgXzogKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemUgd2hlcmUgKCk6IENvcHkgewogICAgLy9eIGVycm9yOiBzdGFydCBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byBoYXZlIGEgd2hlcmUgY2xhdXNlCiAgICAwCn0KYGBgCkUwNjQ4QW4gYGV4cG9ydF9uYW1lYCBhdHRyaWJ1dGUgY29udGFpbnMgbnVsbCBjaGFyYWN0ZXJzIChgXDBgKS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDgKI1tleHBvcnRfbmFtZT0iXDBmb28iXSAvLyBlcnJvcjogYGV4cG9ydF9uYW1lYCBtYXkgbm90IGNvbnRhaW4gbnVsbCBjaGFyYWN0ZXJzCnB1YiBmbiBiYXIoKSB7fQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCByZW1vdmUgdGhlIG51bGwgY2hhcmFjdGVyczoKCmBgYAojW2V4cG9ydF9uYW1lPSJmb28iXSAvLyBvayEKcHViIGZuIGJhcigpIHt9CmBgYApFMDY1N0EgbGlmZXRpbWUgYm91bmQgb24gYSB0cmFpdCBpbXBsZW1lbnRhdGlvbiB3YXMgY2FwdHVyZWQgYXQgYW4gaW5jb3JyZWN0IHBsYWNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY1Nwp0cmFpdCBJZDxUPiB7fQp0cmFpdCBMdDwnYT4ge30KCmltcGw8J2E+IEx0PCdhPiBmb3IgKCkge30KaW1wbDxUPiBJZDxUPiBmb3IgVCB7fQoKZm4gZnJlZV9mbl9jYXB0dXJlX2hydGJfaW5faW1wbF90cmFpdCgpCiAgICAtPiBCb3g8Zm9yPCdhPiBJZDxpbXBsIEx0PCdhPj4+IC8vIGVycm9yIQp7CiAgICBCb3g6Om5ldygoKSkKfQoKc3RydWN0IEZvbzsKaW1wbCBGb28gewogICAgZm4gaW1wbF9mbl9jYXB0dXJlX2hydGJfaW5faW1wbF90cmFpdCgpCiAgICAgICAgLT4gQm94PGZvcjwnYT4gSWQ8aW1wbCBMdDwnYT4+PiAvLyBlcnJvciEKICAgIHsKICAgICAgICBCb3g6Om5ldygoKSkKICAgIH0KfQpgYGAKCkhlcmUsIHlvdSBoYXZlIHVzZWQgdGhlIGluYXBwcm9wcmlhdGUgbGlmZXRpbWUgaW4gdGhlIGBpbXBsIFRyYWl0YCwKVGhlIGBpbXBsIFRyYWl0YCBjYW4gb25seSBjYXB0dXJlIGxpZmV0aW1lcyBib3VuZCBhdCB0aGUgZm4gb3IgaW1wbApsZXZlbC4KClRvIGZpeCB0aGlzIHdlIGhhdmUgdG8gZGVmaW5lIHRoZSBsaWZldGltZSBhdCB0aGUgZnVuY3Rpb24gb3IgaW1wbApsZXZlbCBhbmQgdXNlIHRoYXQgbGlmZXRpbWUgaW4gdGhlIGBpbXBsIFRyYWl0YC4gRm9yIGV4YW1wbGUgeW91IGNhbgpkZWZpbmUgdGhlIGxpZmV0aW1lIGF0IHRoZSBmdW5jdGlvbjoKCmBgYAp0cmFpdCBJZDxUPiB7fQp0cmFpdCBMdDwnYT4ge30KCmltcGw8J2E+IEx0PCdhPiBmb3IgKCkge30KaW1wbDxUPiBJZDxUPiBmb3IgVCB7fQoKZm4gZnJlZV9mbl9jYXB0dXJlX2hydGJfaW5faW1wbF90cmFpdDwnYj4oKQogICAgLT4gQm94PGZvcjwnYT4gSWQ8aW1wbCBMdDwnYj4+PiAvLyBvayEKewogICAgQm94OjpuZXcoKCkpCn0KCnN0cnVjdCBGb287CmltcGwgRm9vIHsKICAgIGZuIGltcGxfZm5fY2FwdHVyZV9ocnRiX2luX2ltcGxfdHJhaXQ8J2I+KCkKICAgICAgICAtPiBCb3g8Zm9yPCdhPiBJZDxpbXBsIEx0PCdiPj4+IC8vIG9rIQogICAgewogICAgICAgIEJveDo6bmV3KCgpKQogICAgfQp9CmBgYApFMDY1OEFuIHVuc3RhYmxlIGZlYXR1cmUgd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjU4CiNbcmVwcih1MTI4KV0gLy8gZXJyb3I6IHVzZSBvZiB1bnN0YWJsZSBsaWJyYXJ5IGZlYXR1cmUgJ3JlcHIxMjgnCmVudW0gRm9vIHsKICAgIEJhcih1NjQpLAp9CmBgYAoKSWYgeW91J3JlIHVzaW5nIGEgc3RhYmxlIG9yIGEgYmV0YSB2ZXJzaW9uIG9mIHJ1c3RjLCB5b3Ugd29uJ3QgYmUgYWJsZSB0byB1c2UKYW55IHVuc3RhYmxlIGZlYXR1cmVzLiBJbiBvcmRlciB0byBkbyBzbywgcGxlYXNlIHN3aXRjaCB0byBhIG5pZ2h0bHkgdmVyc2lvbiBvZgpydXN0YyAoYnkgdXNpbmcgcnVzdHVwKS4KCklmIHlvdSdyZSB1c2luZyBhIG5pZ2h0bHkgdmVyc2lvbiBvZiBydXN0YywganVzdCBhZGQgdGhlIGNvcnJlc3BvbmRpbmcgZmVhdHVyZQp0byBiZSBhYmxlIHRvIHVzZSBpdDoKCmBgYAojIVtmZWF0dXJlKHJlcHIxMjgpXQoKI1tyZXByKHUxMjgpXSAvLyBvayEKZW51bSBGb28gewogICAgQmFyKHU2NCksCn0KYGBgCkUwNjU5QW4gaXRlbSB1c2FnZSBpcyBhbWJpZ3VvdXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLGVkaXRpb24yMDE4LEUwNjU5CnB1YiBtb2QgbW9vbiB7CiAgICBwdWIgZm4gZm9vKCkge30KfQoKcHViIG1vZCBlYXJ0aCB7CiAgICBwdWIgZm4gZm9vKCkge30KfQoKbW9kIGNvbGxpZGVyIHsKICAgIHB1YiB1c2UgY3JhdGU6Om1vb246Oio7CiAgICBwdWIgdXNlIGNyYXRlOjplYXJ0aDo6KjsKfQoKZm4gbWFpbigpIHsKICAgIGNyYXRlOjpjb2xsaWRlcjo6Zm9vKCk7IC8vIEVSUk9SOiBgZm9vYCBpcyBhbWJpZ3VvdXMKfQpgYGAKClRoaXMgZXJyb3IgZ2VuZXJhbGx5IGFwcGVhcnMgd2hlbiB0d28gaXRlbXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFyZSBpbXBvcnRlZCBpbnRvCmEgbW9kdWxlLiBIZXJlLCB0aGUgYGZvb2AgZnVuY3Rpb25zIGFyZSBpbXBvcnRlZCBhbmQgcmVleHBvcnRlZCBmcm9tIHRoZQpgY29sbGlkZXJgIG1vZHVsZSBhbmQgdGhlcmVmb3JlLCB3aGVuIHdlJ3JlIHVzaW5nIGBjb2xsaWRlcjo6Zm9vKClgLCBib3RoCmZ1bmN0aW9ucyBjb2xsaWRlLgoKVG8gc29sdmUgdGhpcyBlcnJvciwgdGhlIGJlc3Qgc29sdXRpb24gaXMgZ2VuZXJhbGx5IHRvIGtlZXAgdGhlIHBhdGggYmVmb3JlIHRoZQppdGVtIHdoZW4gdXNpbmcgaXQuIEV4YW1wbGU6CgpgYGBlZGl0aW9uMjAxOApwdWIgbW9kIG1vb24gewogICAgcHViIGZuIGZvbygpIHt9Cn0KCnB1YiBtb2QgZWFydGggewogICAgcHViIGZuIGZvbygpIHt9Cn0KCm1vZCBjb2xsaWRlciB7CiAgICBwdWIgdXNlIGNyYXRlOjptb29uOwogICAgcHViIHVzZSBjcmF0ZTo6ZWFydGg7Cn0KCmZuIG1haW4oKSB7CiAgICBjcmF0ZTo6Y29sbGlkZXI6Om1vb246OmZvbygpOyAvLyBvayEKICAgIGNyYXRlOjpjb2xsaWRlcjo6ZWFydGg6OmZvbygpOyAvLyBvayEKfQpgYGAKRTA2NjBUaGUgYXJndW1lbnQgdG8gdGhlIGBsbHZtX2FzbWAgbWFjcm8gaXMgbm90IHdlbGwtZm9ybWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY2MApsbHZtX2FzbSEoIm5vcCIgIm5vcCIpOwpgYGAKCkNvbnNpZGVyaW5nIHRoYXQgdGhpcyB3b3VsZCBiZSBhIGxvbmcgZXhwbGFuYXRpb24sIHdlIGluc3RlYWQgcmVjb21tZW5kIHlvdQp0YWtlIGEgbG9vayBhdCB0aGUgW2BsbHZtX2FzbWBdIGNoYXB0ZXIgb2YgdGhlIFVuc3RhYmxlIGJvb2s6CgpbbGx2bV9hc21dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0YWJsZS91bnN0YWJsZS1ib29rL2xpYnJhcnktZmVhdHVyZXMvbGx2bS1hc20uaHRtbApFMDY2MUFuIGludmFsaWQgc3ludGF4IHdhcyBwYXNzZWQgdG8gdGhlIHNlY29uZCBhcmd1bWVudCBvZiBhbiBgbGx2bV9hc21gIG1hY3JvIGxpbmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjYxCmxldCBhOwpsbHZtX2FzbSEoIm5vcCIgOiAiciIoYSkpOwpgYGAKCkNvbnNpZGVyaW5nIHRoYXQgdGhpcyB3b3VsZCBiZSBhIGxvbmcgZXhwbGFuYXRpb24sIHdlIGluc3RlYWQgcmVjb21tZW5kIHlvdQp0YWtlIGEgbG9vayBhdCB0aGUgW2BsbHZtX2FzbWBdIGNoYXB0ZXIgb2YgdGhlIFVuc3RhYmxlIGJvb2s6CgpbbGx2bV9hc21dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0YWJsZS91bnN0YWJsZS1ib29rL2xpYnJhcnktZmVhdHVyZXMvbGx2bS1hc20uaHRtbApFMDY2MkFuIGludmFsaWQgaW5wdXQgb3BlcmFuZCBjb25zdHJhaW50IHdhcyBwYXNzZWQgdG8gdGhlIGBsbHZtX2FzbWAgbWFjcm8KKHRoaXJkIGxpbmUpLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY2MgpsbHZtX2FzbSEoInhvciAlZWF4LCAlZWF4IgogICAgICAgICAgOgogICAgICAgICAgOiAiPXRlc3QiKCJhIikKICAgICAgICAgKTsKYGBgCgpDb25zaWRlcmluZyB0aGF0IHRoaXMgd291bGQgYmUgYSBsb25nIGV4cGxhbmF0aW9uLCB3ZSBpbnN0ZWFkIHJlY29tbWVuZCB5b3UKdGFrZSBhIGxvb2sgYXQgdGhlIFtgbGx2bV9hc21gXSBjaGFwdGVyIG9mIHRoZSBVbnN0YWJsZSBib29rOgoKW2xsdm1fYXNtXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGFibGUvdW5zdGFibGUtYm9vay9saWJyYXJ5LWZlYXR1cmVzL2xsdm0tYXNtLmh0bWwKRTA2NjNBbiBpbnZhbGlkIGlucHV0IG9wZXJhbmQgY29uc3RyYWludCB3YXMgcGFzc2VkIHRvIHRoZSBgbGx2bV9hc21gIG1hY3JvCih0aGlyZCBsaW5lKS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NjMKbGx2bV9hc20hKCJ4b3IgJWVheCwgJWVheCIKICAgICAgICAgIDoKICAgICAgICAgIDogIit0ZXN0IigiYSIpCiAgICAgICAgICk7CmBgYAoKQ29uc2lkZXJpbmcgdGhhdCB0aGlzIHdvdWxkIGJlIGEgbG9uZyBleHBsYW5hdGlvbiwgd2UgaW5zdGVhZCByZWNvbW1lbmQgeW91CnRha2UgYSBsb29rIGF0IHRoZSBbYGxsdm1fYXNtYF0gY2hhcHRlciBvZiB0aGUgVW5zdGFibGUgYm9vazoKCltsbHZtX2FzbV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RhYmxlL3Vuc3RhYmxlLWJvb2svbGlicmFyeS1mZWF0dXJlcy9sbHZtLWFzbS5odG1sCkUwNjY0QSBjbG9iYmVyIHdhcyBzdXJyb3VuZGVkIGJ5IGJyYWNlcyBpbiB0aGUgYGxsdm1fYXNtYCBtYWNyby4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NjQKbGx2bV9hc20hKCJtb3YgJCQweDIwMCwgJWVheCIKICAgICAgICAgIDoKICAgICAgICAgIDoKICAgICAgICAgIDogIntlYXh9IgogICAgICAgICApOwpgYGAKCkNvbnNpZGVyaW5nIHRoYXQgdGhpcyB3b3VsZCBiZSBhIGxvbmcgZXhwbGFuYXRpb24sIHdlIGluc3RlYWQgcmVjb21tZW5kIHlvdQp0YWtlIGEgbG9vayBhdCB0aGUgW2BsbHZtX2FzbWBdIGNoYXB0ZXIgb2YgdGhlIFVuc3RhYmxlIGJvb2s6CgpbbGx2bV9hc21dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0YWJsZS91bnN0YWJsZS1ib29rL2xpYnJhcnktZmVhdHVyZXMvbGx2bS1hc20uaHRtbApFMDY2NVRoZSBgRGVmYXVsdGAgdHJhaXQgd2FzIGRlcml2ZWQgb24gYW4gZW51bS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NjUKI1tkZXJpdmUoRGVmYXVsdCldCmVudW0gRm9vZCB7CiAgICBTd2VldCwKICAgIFNhbHR5LAp9CmBgYAoKVGhlIGBEZWZhdWx0YCBjYW5ub3QgYmUgZGVyaXZlZCBvbiBhbiBlbnVtIGZvciB0aGUgc2ltcGxlIHJlYXNvbiB0aGF0IHRoZQpjb21waWxlciBkb2Vzbid0IGtub3cgd2hpY2ggdmFsdWUgdG8gcGljayBieSBkZWZhdWx0IHdoZXJlYXMgaXQgY2FuIGZvciBhCnN0cnVjdCBhcyBsb25nIGFzIGFsbCBpdHMgZmllbGRzIGltcGxlbWVudCB0aGUgYERlZmF1bHRgIHRyYWl0IGFzIHdlbGwuCgpJZiB5b3Ugc3RpbGwgd2FudCB0byBpbXBsZW1lbnQgYERlZmF1bHRgIG9uIHlvdXIgZW51bSwgeW91J2xsIGhhdmUgdG8gZG8gaXQgImJ5CmhhbmQiOgoKYGBgCmVudW0gRm9vZCB7CiAgICBTd2VldCwKICAgIFNhbHR5LAp9CgppbXBsIERlZmF1bHQgZm9yIEZvb2QgewogICAgZm4gZGVmYXVsdCgpIC0+IEZvb2QgewogICAgICAgIEZvb2Q6OlN3ZWV0CiAgICB9Cn0KYGBgCkUwNjY2YGltcGwgVHJhaXRgIHR5cGVzIGNhbm5vdCBhcHBlYXIgbmVzdGVkIGluIHRoZSBnZW5lcmljIGFyZ3VtZW50cyBvZiBvdGhlcgpgaW1wbCBUcmFpdGAgdHlwZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjY2CnRyYWl0IE15R2VuZXJpY1RyYWl0PFQ+IHt9CnRyYWl0IE15SW5uZXJUcmFpdCB7fQoKZm4gZm9vKAogICAgYmFyOiBpbXBsIE15R2VuZXJpY1RyYWl0PGltcGwgTXlJbm5lclRyYWl0PiwgLy8gZXJyb3IhCikge30KYGBgCgpUeXBlIHBhcmFtZXRlcnMgZm9yIGBpbXBsIFRyYWl0YCB0eXBlcyBtdXN0IGJlIGV4cGxpY2l0bHkgZGVmaW5lZCBhcyBuYW1lZApnZW5lcmljIHBhcmFtZXRlcnM6CgpgYGAKdHJhaXQgTXlHZW5lcmljVHJhaXQ8VD4ge30KdHJhaXQgTXlJbm5lclRyYWl0IHt9CgpmbiBmb288VDogTXlJbm5lclRyYWl0PigKICAgIGJhcjogaW1wbCBNeUdlbmVyaWNUcmFpdDxUPiwgLy8gb2shCikge30KYGBgCkUwNjY4TWFsZm9ybWVkIGlubGluZSBhc3NlbWJseSByZWplY3RlZCBieSBMTFZNLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY2OAojIVtmZWF0dXJlKGxsdm1fYXNtKV0KCmZuIG1haW4oKSB7CiAgICBsZXQgcmF4OiB1NjQ7CiAgICB1bnNhZmUgewogICAgICAgIGxsdm1fYXNtISgiIiA6Ij17cmF4IihyYXgpKTsKICAgICAgICBwcmludGxuISgiQWNjdW11bGF0b3IgaXM6IHt9IiwgcmF4KTsKICAgIH0KfQpgYGAKCkxMVk0gY2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGUgY29uc3RyYWludHMgYW5kIHRoZSBhc3NlbWJseSBzdHJpbmcgcGFzc2VkIHRvCml0LiBUaGlzIGVycm9yIGltcGxpZXMgdGhhdCBMTFZNIHNlZW1zIHNvbWV0aGluZyB3cm9uZyB3aXRoIHRoZSBpbmxpbmUKYXNzZW1ibHkgY2FsbC4KCkluIHBhcnRpY3VsYXIsIGl0IGNhbiBoYXBwZW4gaWYgeW91IGZvcmdvdCB0aGUgY2xvc2luZyBicmFja2V0IG9mIGEgcmVnaXN0ZXIKY29uc3RyYWludCAoc2VlIGlzc3VlICM1MTQzMCksIGxpa2UgaW4gdGhlIHByZXZpb3VzIGNvZGUgZXhhbXBsZS4KRTA2NjlDYW5ub3QgY29udmVydCBpbmxpbmUgYXNzZW1ibHkgb3BlcmFuZCB0byBhIHNpbmdsZSBMTFZNIHZhbHVlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY2OQojIVtmZWF0dXJlKGxsdm1fYXNtKV0KCmZuIG1haW4oKSB7CiAgICB1bnNhZmUgewogICAgICAgIGxsdm1fYXNtISgiIiA6OiAiciIoIiIpKTsgLy8gZXJyb3IhCiAgICB9Cn0KYGBgCgpUaGlzIGVycm9yIHVzdWFsbHkgaGFwcGVucyB3aGVuIHRyeWluZyB0byBwYXNzIGluIGEgdmFsdWUgdG8gYW4gaW5wdXQgaW5saW5lCmFzc2VtYmx5IG9wZXJhbmQgdGhhdCBpcyBhY3R1YWxseSBhIHBhaXIgb2YgdmFsdWVzLiBJbiBwYXJ0aWN1bGFyLCB0aGlzIGNhbgpoYXBwZW4gd2hlbiB0cnlpbmcgdG8gcGFzcyBpbiBhIHNsaWNlLCBmb3IgaW5zdGFuY2UgYSBgJnN0cmAuIEluIFJ1c3QsIHRoZXNlCnZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgaW50ZXJuYWxseSBhcyBhIHBhaXIgb2YgdmFsdWVzLCB0aGUgcG9pbnRlciBhbmQgaXRzCmxlbmd0aC4gV2hlbiBwYXNzZWQgYXMgYW4gaW5wdXQgb3BlcmFuZCwgdGhpcyBwYWlyIG9mIHZhbHVlcyBjYW4gbm90IGJlCmNvZXJjZWQgaW50byBhIHJlZ2lzdGVyIGFuZCB0aHVzIHdlIG11c3QgZmFpbCB3aXRoIGFuIGVycm9yLgpFMDY3MFJ1c3QgMjAxNSBkb2VzIG5vdCBwZXJtaXQgdGhlIHVzZSBvZiBgYXN5bmMgZm5gLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY3MAphc3luYyBmbiBmb28oKSB7fQpgYGAKClN3aXRjaCB0byB0aGUgUnVzdCAyMDE4IGVkaXRpb24gdG8gdXNlIGBhc3luYyBmbmAuCkUwNjcxIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQ29uc3QgcGFyYW1ldGVycyBjYW5ub3QgZGVwZW5kIG9uIHR5cGUgcGFyYW1ldGVycy4KVGhlIGZvbGxvd2luZyBpcyB0aGVyZWZvcmUgaW52YWxpZDoKCmBgYGNvbXBpbGVfZmFpbCxFMDc3MAojIVtmZWF0dXJlKGNvbnN0X2dlbmVyaWNzKV0KCmZuIGNvbnN0X2lkPFQsIGNvbnN0IE46IFQ+KCkgLT4gVCB7IC8vIGVycm9yCiAgICBOCn0KYGBgCkUwNjg3SW4tYmFuZCBsaWZldGltZXMgY2Fubm90IGJlIHVzZWQgaW4gYGZuYC9gRm5gIHN5bnRheC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNjg3CiMhW2ZlYXR1cmUoaW5fYmFuZF9saWZldGltZXMpXQoKZm4gZm9vKHg6IGZuKCYnYSB1MzIpKSB7fSAvLyBlcnJvciEKCmZuIGJhcih4OiAmRm4oJidhIHUzMikpIHt9IC8vIGVycm9yIQoKZm4gYmF6KHg6IGZuKCYnYSB1MzIpLCB5OiAmJ2EgdTMyKSB7fSAvLyBlcnJvciEKCnN0cnVjdCBGb288J2E+IHsgeDogJidhIHUzMiB9CgppbXBsIEZvbzwnYT4gewogICAgZm4gYmFyKCZzZWxmLCB4OiBmbigmJ2EgdTMyKSkge30gLy8gZXJyb3IhCn0KYGBgCgpMaWZldGltZXMgdXNlZCBpbiBgZm5gIG9yIGBGbmAgc3ludGF4IG11c3QgYmUgZXhwbGljaXRseQpkZWNsYXJlZCB1c2luZyBgPC4uLj5gIGJpbmRlcnMuIEZvciBleGFtcGxlOgoKYGBgCmZuIGZvbzwnYT4oeDogZm4oJidhIHUzMikpIHt9IC8vIG9rIQoKZm4gYmFyPCdhPih4OiAmRm4oJidhIHUzMikpIHt9IC8vIG9rIQoKZm4gYmF6PCdhPih4OiBmbigmJ2EgdTMyKSwgeTogJidhIHUzMikge30gLy8gb2shCgpzdHJ1Y3QgRm9vPCdhPiB7IHg6ICYnYSB1MzIgfQoKaW1wbDwnYT4gRm9vPCdhPiB7CiAgICBmbiBiYXIoJnNlbGYsIHg6IGZuKCYnYSB1MzIpKSB7fSAvLyBvayEKfQpgYGAKRTA2ODhJbi1iYW5kIGxpZmV0aW1lcyB3ZXJlIG1peGVkIHdpdGggZXhwbGljaXQgbGlmZXRpbWUgYmluZGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2ODgKIyFbZmVhdHVyZShpbl9iYW5kX2xpZmV0aW1lcyldCgpmbiBmb288J2E+KHg6ICYnYSB1MzIsIHk6ICYnYiB1MzIpIHt9ICAgLy8gZXJyb3IhCgpzdHJ1Y3QgRm9vPCdhPiB7IHg6ICYnYSB1MzIgfQoKaW1wbCBGb288J2E+IHsKICAgIGZuIGJhcjwnYj4oeDogJidhIHUzMiwgeTogJidiIHUzMiwgejogJidjIHUzMikge30gICAvLyBlcnJvciEKfQoKaW1wbDwnYj4gRm9vPCdhPiB7ICAvLyBlcnJvciEKICAgIGZuIGJheigpIHt9Cn0KYGBgCgpJbi1iYW5kIGxpZmV0aW1lcyBjYW5ub3QgYmUgbWl4ZWQgd2l0aCBleHBsaWNpdCBsaWZldGltZSBiaW5kZXJzLgpGb3IgZXhhbXBsZToKCmBgYApmbiBmb288J2EsICdiPih4OiAmJ2EgdTMyLCB5OiAmJ2IgdTMyKSB7fSAgIC8vIG9rIQoKc3RydWN0IEZvbzwnYT4geyB4OiAmJ2EgdTMyIH0KCmltcGw8J2E+IEZvbzwnYT4gewogICAgZm4gYmFyPCdiLCdjPih4OiAmJ2EgdTMyLCB5OiAmJ2IgdTMyLCB6OiAmJ2MgdTMyKSB7fSAgICAvLyBvayEKfQoKaW1wbDwnYT4gRm9vPCdhPiB7ICAvLyBvayEKICAgIGZuIGJheigpIHt9Cn0KYGBgCkUwNjg5QSBtZXRob2Qgd2FzIGNhbGxlZCBvbiBhbiBhbWJpZ3VvdXMgbnVtZXJpYyB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY4OQoyLjAubmVnKCk7IC8vIGVycm9yIQpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIG51bWVyaWMgdmFsdWUgZm9yIHRoZSBtZXRob2QgYmVpbmcgcGFzc2VkIGV4aXN0cwpidXQgdGhlIHR5cGUgb2YgdGhlIG51bWVyaWMgdmFsdWUgb3IgYmluZGluZyBjb3VsZCBub3QgYmUgaWRlbnRpZmllZC4KClRoZSBlcnJvciBoYXBwZW5zIG9uIG51bWVyaWMgbGl0ZXJhbHMgYW5kIG9uIG51bWVyaWMgYmluZGluZ3Mgd2l0aG91dCBhbgppZGVudGlmaWVkIGNvbmNyZXRlIHR5cGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2ODkKbGV0IHggPSAyLjA7CngubmVnKCk7ICAvLyBzYW1lIGVycm9yIGFzIGFib3ZlCmBgYAoKQmVjYXVzZSBvZiB0aGlzLCB5b3UgbXVzdCBnaXZlIHRoZSBudW1lcmljIGxpdGVyYWwgb3IgYmluZGluZyBhIHR5cGU6CgpgYGAKdXNlIHN0ZDo6b3BzOjpOZWc7CgpsZXQgXyA9IDIuMF9mMzIubmVnKCk7IC8vIG9rIQpsZXQgeDogZjMyID0gMi4wOwpsZXQgXyA9IHgubmVnKCk7IC8vIG9rIQpsZXQgXyA9ICgyLjAgYXMgZjMyKS5uZWcoKTsgLy8gb2shCmBgYApFMDY5MEEgc3RydWN0IHdpdGggdGhlIHJlcHJlc2VudGF0aW9uIGhpbnQgYHJlcHIodHJhbnNwYXJlbnQpYCBoYWQgemVybyBvciBtb3JlIHRoYW4Kb25lIGZpZWxkcyB0aGF0IHdlcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgemVyby1zaXplZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2OTAKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IExlbmd0aFdpdGhVbml0PFU+IHsgLy8gZXJyb3I6IHRyYW5zcGFyZW50IHN0cnVjdCBuZWVkcyBleGFjdGx5IG9uZQogICAgdmFsdWU6IGYzMiwgICAgICAgICAgICAvLyAgICAgICAgbm9uLXplcm8tc2l6ZWQgZmllbGQsIGJ1dCBoYXMgMgogICAgdW5pdDogVSwKfQpgYGAKCkJlY2F1c2UgdHJhbnNwYXJlbnQgc3RydWN0cyBhcmUgcmVwcmVzZW50ZWQgZXhhY3RseSBsaWtlIG9uZSBvZiB0aGVpciBmaWVsZHMgYXQKcnVuIHRpbWUsIHNhaWQgZmllbGQgbXVzdCBiZSB1bmlxdWVseSBkZXRlcm1pbmVkLiBJZiB0aGVyZSBpcyBubyBmaWVsZCwgb3IgaWYKdGhlcmUgYXJlIG11bHRpcGxlIGZpZWxkcywgaXQgaXMgbm90IGNsZWFyIGhvdyB0aGUgc3RydWN0IHNob3VsZCBiZSByZXByZXNlbnRlZC4KTm90ZSB0aGF0IGZpZWxkcyBvZiB6ZXJvLXNpemVkIHR5cGVzIChlLmcuLCBgUGhhbnRvbURhdGFgKSBjYW4gYWxzbyBleGlzdAphbG9uZ3NpZGUgdGhlIGZpZWxkIHRoYXQgY29udGFpbnMgdGhlIGFjdHVhbCBkYXRhLCB0aGV5IGRvIG5vdCBjb3VudCBmb3IgdGhpcwplcnJvci4gV2hlbiBnZW5lcmljIHR5cGVzIGFyZSBpbnZvbHZlZCAoYXMgaW4gdGhlIGFib3ZlIGV4YW1wbGUpLCBhbiBlcnJvciBpcwpyZXBvcnRlZCBiZWNhdXNlIHRoZSB0eXBlIHBhcmFtZXRlciBjb3VsZCBiZSBub24temVyby1zaXplZC4KClRvIGNvbWJpbmUgYHJlcHIodHJhbnNwYXJlbnQpYCB3aXRoIHR5cGUgcGFyYW1ldGVycywgYFBoYW50b21EYXRhYCBtYXkgYmUKdXNlZnVsOgoKYGBgCnVzZSBzdGQ6Om1hcmtlcjo6UGhhbnRvbURhdGE7CgojW3JlcHIodHJhbnNwYXJlbnQpXQpzdHJ1Y3QgTGVuZ3RoV2l0aFVuaXQ8VT4gewogICAgdmFsdWU6IGYzMiwKICAgIHVuaXQ6IFBoYW50b21EYXRhPFU+LAp9CmBgYApFMDY5MUEgc3RydWN0LCBlbnVtLCBvciB1bmlvbiB3aXRoIHRoZSBgcmVwcih0cmFuc3BhcmVudClgIHJlcHJlc2VudGF0aW9uIGhpbnQKY29udGFpbnMgYSB6ZXJvLXNpemVkIGZpZWxkIHRoYXQgcmVxdWlyZXMgbm9uLXRyaXZpYWwgYWxpZ25tZW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY5MQojIVtmZWF0dXJlKHJlcHJfYWxpZ24pXQoKI1tyZXByKGFsaWduKDMyKSldCnN0cnVjdCBGb3JjZUFsaWduMzI7CgojW3JlcHIodHJhbnNwYXJlbnQpXQpzdHJ1Y3QgV3JhcHBlcihmMzIsIEZvcmNlQWxpZ24zMik7IC8vIGVycm9yOiB6ZXJvLXNpemVkIGZpZWxkIGluIHRyYW5zcGFyZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHN0cnVjdCBoYXMgYWxpZ25tZW50IGxhcmdlciB0aGFuIDEKYGBgCgpBIHRyYW5zcGFyZW50IHN0cnVjdCwgZW51bSwgb3IgdW5pb24gaXMgc3VwcG9zZWQgdG8gYmUgcmVwcmVzZW50ZWQgZXhhY3RseSBsaWtlCnRoZSBwaWVjZSBvZiBkYXRhIGl0IGNvbnRhaW5zLiBaZXJvLXNpemVkIGZpZWxkcyB3aXRoIGRpZmZlcmVudCBhbGlnbm1lbnQKcmVxdWlyZW1lbnRzIHBvdGVudGlhbGx5IGNvbmZsaWN0IHdpdGggdGhpcyBwcm9wZXJ0eS4gSW4gdGhlIGV4YW1wbGUgYWJvdmUsCmBXcmFwcGVyYCB3b3VsZCBoYXZlIHRvIGJlIGFsaWduZWQgdG8gMzIgYnl0ZXMgZXZlbiB0aG91Z2ggYGYzMmAgaGFzIGEgc21hbGxlcgphbGlnbm1lbnQgcmVxdWlyZW1lbnQuCgpDb25zaWRlciByZW1vdmluZyB0aGUgb3Zlci1hbGlnbmVkIHplcm8tc2l6ZWQgZmllbGQ6CgpgYGAKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IFdyYXBwZXIoZjMyKTsKYGBgCgpBbHRlcm5hdGl2ZWx5LCBgUGhhbnRvbURhdGE8VD5gIGhhcyBhbGlnbm1lbnQgMSBmb3IgYWxsIGBUYCwgc28geW91IGNhbiB1c2UgaXQKaWYgeW91IG5lZWQgdG8ga2VlcCB0aGUgZmllbGQgZm9yIHNvbWUgcmVhc29uOgoKYGBgCiMhW2ZlYXR1cmUocmVwcl9hbGlnbildCgp1c2Ugc3RkOjptYXJrZXI6OlBoYW50b21EYXRhOwoKI1tyZXByKGFsaWduKDMyKSldCnN0cnVjdCBGb3JjZUFsaWduMzI7CgojW3JlcHIodHJhbnNwYXJlbnQpXQpzdHJ1Y3QgV3JhcHBlcihmMzIsIFBoYW50b21EYXRhPEZvcmNlQWxpZ24zMj4pOwpgYGAKCk5vdGUgdGhhdCBlbXB0eSBhcnJheXMgYFtUOyAwXWAgaGF2ZSB0aGUgc2FtZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgYXMgdGhlCmVsZW1lbnQgdHlwZSBgVGAuIEFsc28gbm90ZSB0aGF0IHRoZSBlcnJvciBpcyBjb25zZXJ2YXRpdmVseSByZXBvcnRlZCBldmVuIHdoZW4KdGhlIGFsaWdubWVudCBvZiB0aGUgemVyby1zaXplZCB0eXBlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgZGF0YSBmaWVsZCdzCmFsaWdubWVudC4KRTA2OTJBIGByZXByKHRyYW5zcGFyZW50KWAgdHlwZSB3YXMgYWxzbyBhbm5vdGF0ZWQgd2l0aCBvdGhlciwgaW5jb21wYXRpYmxlCnJlcHJlc2VudGF0aW9uIGhpbnRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY5MgojW3JlcHIodHJhbnNwYXJlbnQsIEMpXSAvLyBlcnJvcjogaW5jb21wYXRpYmxlIHJlcHJlc2VudGF0aW9uIGhpbnRzCnN0cnVjdCBHcmFtcyhmMzIpOwpgYGAKCkEgdHlwZSBhbm5vdGF0ZWQgYXMgYHJlcHIodHJhbnNwYXJlbnQpYCBkZWxlZ2F0ZXMgYWxsIHJlcHJlc2VudGF0aW9uIGNvbmNlcm5zIHRvCmFub3RoZXIgdHlwZSwgc28gYWRkaW5nIG1vcmUgcmVwcmVzZW50YXRpb24gaGludHMgaXMgY29udHJhZGljdG9yeS4gUmVtb3ZlCmVpdGhlciB0aGUgYHRyYW5zcGFyZW50YCBoaW50IG9yIHRoZSBvdGhlciBoaW50cywgbGlrZSB0aGlzOgoKYGBgCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBHcmFtcyhmMzIpOwpgYGAKCkFsdGVybmF0aXZlbHksIG1vdmUgdGhlIG90aGVyIGF0dHJpYnV0ZXMgdG8gdGhlIGNvbnRhaW5lZCB0eXBlOgoKYGBgCiNbcmVwcihDKV0Kc3RydWN0IEZvbyB7CiAgICB4OiBpMzIsCiAgICAvLyAuLi4KfQoKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IEZvb1dyYXBwZXIoRm9vKTsKYGBgCgpOb3RlIHRoYXQgaW50cm9kdWNpbmcgYW5vdGhlciBgc3RydWN0YCBqdXN0IHRvIGhhdmUgYSBwbGFjZSBmb3IgdGhlIG90aGVyCmF0dHJpYnV0ZXMgbWF5IGhhdmUgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgb24gdGhlIHJlcHJlc2VudGF0aW9uOgoKYGBgCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBHcmFtcyhmMzIpOwoKI1tyZXByKEMpXQpzdHJ1Y3QgRmxvYXQoZjMyKTsKCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBHcmFtczIoRmxvYXQpOyAvLyB0aGlzIGlzIG5vdCBlcXVpdmFsZW50IHRvIGBHcmFtc2AgYWJvdmUKYGBgCgpIZXJlLCBgR3JhbXMyYCBpcyBhIG5vdCBlcXVpdmFsZW50IHRvIGBHcmFtc2AgLS0gdGhlIGZvcm1lciB0cmFuc3BhcmVudGx5IHdyYXBzCmEgKG5vbi10cmFuc3BhcmVudCkgc3RydWN0IGNvbnRhaW5pbmcgYSBzaW5nbGUgZmxvYXQsIHdoaWxlIGBHcmFtc2AgaXMgYQp0cmFuc3BhcmVudCB3cmFwcGVyIGFyb3VuZCBhIGZsb2F0LiBUaGlzIGNhbiBtYWtlIGEgZGlmZmVyZW5jZSBmb3IgdGhlIEFCSS4KRTA2OTNgYWxpZ25gIHJlcHJlc2VudGF0aW9uIGhpbnQgd2FzIGluY29ycmVjdGx5IGRlY2xhcmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTA2OTMKI1tyZXByKGFsaWduPTgpXSAvLyBlcnJvciEKc3RydWN0IEFsaWduOChpOCk7CgojW3JlcHIoYWxpZ249IjgiKV0gLy8gZXJyb3IhCnN0cnVjdCBBbGlnbjgoaTgpOwpgYGAKClRoaXMgaXMgYSBzeW50YXggZXJyb3IgYXQgdGhlIGxldmVsIG9mIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbnMuIFRoZSBwcm9wZXIKc3ludGF4IGZvciBgYWxpZ25gIHJlcHJlc2VudGF0aW9uIGhpbnQgaXMgdGhlIGZvbGxvd2luZzoKCmBgYAojW3JlcHIoYWxpZ24oOCkpXSAvLyBvayEKc3RydWN0IEFsaWduOChpOCk7CmBgYApFMDY5NUEgYGJyZWFrYCBzdGF0ZW1lbnQgd2l0aG91dCBhIGxhYmVsIGFwcGVhcmVkIGluc2lkZSBhIGxhYmVsZWQgYmxvY2suCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjk1CiMgIyFbZmVhdHVyZShsYWJlbF9icmVha192YWx1ZSldCmxvb3AgewogICAgJ2E6IHsKICAgICAgICBicmVhazsKICAgIH0KfQpgYGAKCk1ha2Ugc3VyZSB0byBhbHdheXMgbGFiZWwgdGhlIGBicmVha2A6CgpgYGAKIyAjIVtmZWF0dXJlKGxhYmVsX2JyZWFrX3ZhbHVlKV0KJ2w6IGxvb3AgewogICAgJ2E6IHsKICAgICAgICBicmVhayAnbDsKICAgIH0KfQpgYGAKCk9yIGlmIHlvdSB3YW50IHRvIGBicmVha2AgdGhlIGxhYmVsZWQgYmxvY2s6CgpgYGAKIyAjIVtmZWF0dXJlKGxhYmVsX2JyZWFrX3ZhbHVlKV0KbG9vcCB7CiAgICAnYTogewogICAgICAgIGJyZWFrICdhOwogICAgfQogICAgYnJlYWs7Cn0KYGBgCkUwNjk2QSBmdW5jdGlvbiBpcyB1c2luZyBgY29udGludWVgIGtleXdvcmQgaW5jb3JyZWN0bHkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjk2CmZuIGNvbnRpbnVlX3NpbXBsZSgpIHsKICAgICdiOiB7CiAgICAgICAgY29udGludWU7IC8vIGVycm9yIQogICAgfQp9CmZuIGNvbnRpbnVlX2xhYmVsZWQoKSB7CiAgICAnYjogewogICAgICAgIGNvbnRpbnVlICdiOyAvLyBlcnJvciEKICAgIH0KfQpmbiBjb250aW51ZV9jcm9zc2luZygpIHsKICAgIGxvb3AgewogICAgICAgICdiOiB7CiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlcnJvciEKICAgICAgICB9CiAgICB9Cn0KYGBgCgpIZXJlIHdlIGhhdmUgdXNlZCB0aGUgYGNvbnRpbnVlYCBrZXl3b3JkIGluY29ycmVjdGx5LiBBcyB3ZQpoYXZlIHNlZW4gYWJvdmUgdGhhdCBgY29udGludWVgIHBvaW50aW5nIHRvIGEgbGFiZWxlZCBibG9jay4KClRvIGZpeCB0aGlzIHdlIGhhdmUgdG8gdXNlIHRoZSBsYWJlbGVkIGJsb2NrIHByb3Blcmx5LgpGb3IgZXhhbXBsZToKCmBgYApmbiBjb250aW51ZV9zaW1wbGUoKSB7CiAgICAnYjogbG9vcCB7CiAgICAgICAgY29udGludWUgOyAvLyBvayEKICAgIH0KfQpmbiBjb250aW51ZV9sYWJlbGVkKCkgewogICAgJ2I6IGxvb3AgewogICAgICAgIGNvbnRpbnVlICdiOyAvLyBvayEKICAgIH0KfQpmbiBjb250aW51ZV9jcm9zc2luZygpIHsKICAgIGxvb3AgewogICAgICAgICdiOiBsb29wIHsKICAgICAgICAgICAgY29udGludWU7IC8vIG9rIQogICAgICAgIH0KICAgIH0KfQpgYGAKRTA2OTdBIGNsb3N1cmUgaGFzIGJlZW4gdXNlZCBhcyBgc3RhdGljYC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2OTcKZm4gbWFpbigpIHsKICAgIHN0YXRpYyB8fCB7fTsgLy8gdXNlZCBhcyBgc3RhdGljYAp9CmBgYAoKQ2xvc3VyZXMgY2Fubm90IGJlIHVzZWQgYXMgYHN0YXRpY2AuIFRoZXkgInNhdmUiIHRoZSBlbnZpcm9ubWVudCwKYW5kIGFzIHN1Y2ggYSBzdGF0aWMgY2xvc3VyZSB3b3VsZCBzYXZlIG9ubHkgYSBzdGF0aWMgZW52aXJvbm1lbnQKd2hpY2ggd291bGQgY29uc2lzdCBvbmx5IG9mIHZhcmlhYmxlcyB3aXRoIGEgc3RhdGljIGxpZmV0aW1lLiBHaXZlbgp0aGlzIGl0IHdvdWxkIGJlIGJldHRlciB0byB1c2UgYSBwcm9wZXIgZnVuY3Rpb24uIFRoZSBlYXNpZXN0IGZpeAppcyB0byByZW1vdmUgdGhlIGBzdGF0aWNgIGtleXdvcmQuCkUwNjk4V2hlbiB1c2luZyBnZW5lcmF0b3JzIChvciBhc3luYykgYWxsIHR5cGUgdmFyaWFibGVzIG11c3QgYmUgYm91bmQgc28gYQpnZW5lcmF0b3IgY2FuIGJlIGNvbnN0cnVjdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGVkaXRpb24yMDE4LGNvbXBpbGVfZmFpbCxFMDY5OAphc3luYyBmbiBiYXI8VD4oKSAtPiAoKSB7fQoKYXN5bmMgZm4gZm9vKCkgewogICAgYmFyKCkuYXdhaXQ7IC8vIGVycm9yOiBjYW5ub3QgaW5mZXIgdHlwZSBmb3IgYFRgCn0KYGBgCgpJbiB0aGUgYWJvdmUgZXhhbXBsZSBgVGAgaXMgdW5rbm93YWJsZSBieSB0aGUgY29tcGlsZXIuClRvIGZpeCB0aGlzIHlvdSBtdXN0IGJpbmQgYFRgIHRvIGEgY29uY3JldGUgdHlwZSBzdWNoIGFzIGBTdHJpbmdgCnNvIHRoYXQgYSBnZW5lcmF0b3IgY2FuIHRoZW4gYmUgY29uc3RydWN0ZWQ6CgpgYGBlZGl0aW9uMjAxOAphc3luYyBmbiBiYXI8VD4oKSAtPiAoKSB7fQoKYXN5bmMgZm4gZm9vKCkgewogICAgYmFyOjo8U3RyaW5nPigpLmF3YWl0OwogICAgLy8gICBeXl5eXl5eXiBzcGVjaWZ5IHR5cGUgZXhwbGljaXRseQp9CmBgYApFMDY5OUEgbWV0aG9kIHdhcyBjYWxsZWQgb24gYSByYXcgcG9pbnRlciB3aG9zZSBpbm5lciB0eXBlIHdhc24ndCBjb21wbGV0ZWx5IGtub3duLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxlZGl0aW9uMjAxOCxFMDY5OQojICMhW2Rlbnkod2FybmluZ3MpXQojIGZuIG1haW4oKSB7CmxldCBmb28gPSAmMTsKbGV0IGJhciA9IGZvbyBhcyAqY29uc3QgXzsKaWYgYmFyLmlzX251bGwoKSB7CiAgICAvLyAuLi4KfQojIH0KYGBgCgpIZXJlLCB0aGUgdHlwZSBvZiBgYmFyYCBpc24ndCBrbm93bjsgaXQgY291bGQgYmUgYSBwb2ludGVyIHRvIGFueXRoaW5nLiBJbnN0ZWFkLApzcGVjaWZ5IGEgdHlwZSBmb3IgdGhlIHBvaW50ZXIgKHByZWZlcmFibHkgc29tZXRoaW5nIHRoYXQgbWFrZXMgc2Vuc2UgZm9yIHRoZQp0aGluZyB5b3UncmUgcG9pbnRpbmcgdG8pOgoKYGBgCmxldCBmb28gPSAmMTsKbGV0IGJhciA9IGZvbyBhcyAqY29uc3QgaTMyOwppZiBiYXIuaXNfbnVsbCgpIHsKICAgIC8vIC4uLgp9CmBgYAoKRXZlbiB0aG91Z2ggYGlzX251bGwoKWAgZXhpc3RzIGFzIGEgbWV0aG9kIG9uIGFueSByYXcgcG9pbnRlciwgUnVzdCBzaG93cyB0aGlzCmVycm9yIGJlY2F1c2UgIFJ1c3QgYWxsb3dzIGZvciBgc2VsZmAgdG8gaGF2ZSBhcmJpdHJhcnkgdHlwZXMgKGJlaGluZCB0aGUKYXJiaXRyYXJ5X3NlbGZfdHlwZXMgZmVhdHVyZSBmbGFnKS4KClRoaXMgbWVhbnMgdGhhdCBzb21lb25lIGNhbiBzcGVjaWZ5IHN1Y2ggYSBmdW5jdGlvbjoKCmBgYGlnbm9yZSAoY2Fubm90LWRvY3Rlc3QtZmVhdHVyZS1kb2VzbnQtZXhpc3QteWV0KQppbXBsIEZvbyB7CiAgICBmbiBpc19udWxsKHNlbGY6ICpjb25zdCBTZWxmKSAtPiBib29sIHsKICAgICAgICAvLyBkbyBzb21ldGhpbmcgZWxzZQogICAgfQp9CmBgYAoKYW5kIG5vdyB3aGVuIHlvdSBjYWxsIGAuaXNfbnVsbCgpYCBvbiBhIHJhdyBwb2ludGVyIHRvIGBGb29gLCB0aGVyZSdzIGFtYmlndWl0eS4KCkdpdmVuIHRoYXQgd2UgZG9uJ3Qga25vdyB3aGF0IHR5cGUgdGhlIHBvaW50ZXIgaXMsIGFuZCB0aGVyZSdzIHBvdGVudGlhbAphbWJpZ3VpdHkgZm9yIHNvbWUgdHlwZXMsIHdlIGRpc2FsbG93IGNhbGxpbmcgbWV0aG9kcyBvbiByYXcgcG9pbnRlcnMgd2hlbgp0aGUgdHlwZSBpcyB1bmtub3duLgpFMDcwMFRoZSBgaW1wbCBUcmFpdGAgcmV0dXJuIHR5cGUgY2FwdHVyZXMgbGlmZXRpbWUgcGFyYW1ldGVycyB0aGF0IGRvIG5vdAphcHBlYXIgd2l0aGluIHRoZSBgaW1wbCBUcmFpdGAgaXRzZWxmLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcwMAp1c2Ugc3RkOjpjZWxsOjpDZWxsOwoKdHJhaXQgVHJhaXQ8J2E+IHsgfQoKaW1wbDwnYSwgJ2I+IFRyYWl0PCdiPiBmb3IgQ2VsbDwmJ2EgdTMyPiB7IH0KCmZuIGZvbzwneCwgJ3k+KHg6IENlbGw8Jid4IHUzMj4pIC0+IGltcGwgVHJhaXQ8J3k+CndoZXJlICd4OiAneQp7CiAgICB4Cn0KYGBgCgpIZXJlLCB0aGUgZnVuY3Rpb24gYGZvb2AgcmV0dXJucyBhIHZhbHVlIG9mIHR5cGUgYENlbGw8Jid4IHUzMj5gLAp3aGljaCByZWZlcmVuY2VzIHRoZSBsaWZldGltZSBgJ3hgLiBIb3dldmVyLCB0aGUgcmV0dXJuIHR5cGUgaXMKZGVjbGFyZWQgYXMgYGltcGwgVHJhaXQ8J3k+YCAtLSB0aGlzIGluZGljYXRlcyB0aGF0IGBmb29gIHJldHVybnMKInNvbWUgdHlwZSB0aGF0IGltcGxlbWVudHMgYFRyYWl0PCd5PmAiLCBidXQgaXQgYWxzbyBpbmRpY2F0ZXMgdGhhdAp0aGUgcmV0dXJuIHR5cGUgKipvbmx5IGNhcHR1cmVzIGRhdGEgcmVmZXJlbmNpbmcgdGhlIGxpZmV0aW1lIGAneWAqKi4KSW4gdGhpcyBjYXNlLCB0aG91Z2gsIHdlIGFyZSByZWZlcmVuY2luZyBkYXRhIHdpdGggbGlmZXRpbWUgYCd4YCwgc28KdGhpcyBmdW5jdGlvbiBpcyBpbiBlcnJvci4KClRvIGZpeCB0aGlzLCB5b3UgbXVzdCByZWZlcmVuY2UgdGhlIGxpZmV0aW1lIGAneGAgZnJvbSB0aGUgcmV0dXJuCnR5cGUuIEZvciBleGFtcGxlLCBjaGFuZ2luZyB0aGUgcmV0dXJuIHR5cGUgdG8gYGltcGwgVHJhaXQ8J3k+ICsgJ3hgCndvdWxkIHdvcms6CgpgYGAKdXNlIHN0ZDo6Y2VsbDo6Q2VsbDsKCnRyYWl0IFRyYWl0PCdhPiB7IH0KCmltcGw8J2EsJ2I+IFRyYWl0PCdiPiBmb3IgQ2VsbDwmJ2EgdTMyPiB7IH0KCmZuIGZvbzwneCwgJ3k+KHg6IENlbGw8Jid4IHUzMj4pIC0+IGltcGwgVHJhaXQ8J3k+ICsgJ3gKd2hlcmUgJ3g6ICd5CnsKICAgIHgKfQpgYGAKRTA3MDFUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IGEgYCNbbm9uX2V4aGF1c3RpdmVdYCBhdHRyaWJ1dGUgd2FzIGluY29ycmVjdGx5IHBsYWNlZApvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIHN0cnVjdCBvciBlbnVtLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcwMQojW25vbl9leGhhdXN0aXZlXQp0cmFpdCBGb28geyB9CmBgYApFMDcwM0ludmFsaWQgQUJJIChBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlKSB1c2VkIGluIHRoZSBjb2RlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcwMwpleHRlcm4gImludmFsaWQiIGZuIGZvbygpIHt9IC8vIGVycm9yIQojIGZuIG1haW4oKSB7fQpgYGAKCkF0IHByZXNlbnQgZmV3IHByZWRlZmluZWQgQUJJJ3MgKGxpa2UgUnVzdCwgQywgc3lzdGVtLCBldGMuKSBjYW4gYmUKdXNlZCBpbiBSdXN0LiBWZXJpZnkgdGhhdCB0aGUgQUJJIGlzIHByZWRlZmluZWQuIEZvciBleGFtcGxlIHlvdSBjYW4KcmVwbGFjZSB0aGUgZ2l2ZW4gQUJJIGZyb20gJ1J1c3QnLgoKYGBgCmV4dGVybiAiUnVzdCIgZm4gZm9vKCkge30gLy8gb2shCiMgZm4gbWFpbigpIHsgfQpgYGAKRTA3MDRBbiBpbmNvcnJlY3QgdmlzaWJpbGl0eSByZXN0cmljdGlvbiB3YXMgc3BlY2lmaWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcwNAptb2QgZm9vIHsKICAgIHB1Yihmb28pIHN0cnVjdCBCYXIgewogICAgICAgIHg6IGkzMgogICAgfQp9CmBgYAoKVG8gbWFrZSBzdHJ1Y3QgYEJhcmAgb25seSB2aXNpYmxlIGluIG1vZHVsZSBgZm9vYCB0aGUgYGluYCBrZXl3b3JkIHNob3VsZCBiZQp1c2VkOgoKYGBgCm1vZCBmb28gewogICAgcHViKGluIGNyYXRlOjpmb28pIHN0cnVjdCBCYXIgewogICAgICAgIHg6IGkzMgogICAgfQp9CiMgZm4gbWFpbigpIHt9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBSdXN0IFJlZmVyZW5jZSBvbiBbVmlzaWJpbGl0eV0uCgpbVmlzaWJpbGl0eV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL3Zpc2liaWxpdHktYW5kLXByaXZhY3kuaHRtbApFMDcwNUEgYCMhW2ZlYXR1cmVdYCBhdHRyaWJ1dGUgd2FzIGRlY2xhcmVkIGZvciBhIGZlYXR1cmUgdGhhdCBpcyBzdGFibGUgaW4gdGhlCmN1cnJlbnQgZWRpdGlvbiwgYnV0IG5vdCBpbiBhbGwgZWRpdGlvbnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgaWdub3JlIChsaW1pdGVkIHRvIGEgd2FybmluZyBkdXJpbmcgMjAxOCBlZGl0aW9uIGRldmVsb3BtZW50KQojIVtmZWF0dXJlKHJ1c3RfMjAxOF9wcmV2aWV3KV0KIyFbZmVhdHVyZSh0ZXN0XzIwMThfZmVhdHVyZSldIC8vIGVycm9yOiB0aGUgZmVhdHVyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYHRlc3RfMjAxOF9mZWF0dXJlYCBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5jbHVkZWQgaW4gdGhlIFJ1c3QgMjAxOCBlZGl0aW9uCmBgYApFMDcwNmBhc3luYyBmbmBzIGFyZSBub3QgeWV0IHN1cHBvcnRlZCBpbiB0cmFpdHMgaW4gUnVzdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsZWRpdGlvbjIwMTgKdHJhaXQgVCB7CiAgICAvLyBOZWl0aGVyIGNhc2UgaXMgY3VycmVudGx5IHN1cHBvcnRlZC4KICAgIGFzeW5jIGZuIGZvbygpIHt9CiAgICBhc3luYyBmbiBiYXIoJnNlbGYpIHt9Cn0KYGBgCgpgYXN5bmMgZm5gcyByZXR1cm4gYW4gYGltcGwgRnV0dXJlYCwgbWFraW5nIHRoZSBmb2xsb3dpbmcgdHdvIGV4YW1wbGVzCmVxdWl2YWxlbnQ6CgpgYGBlZGl0aW9uMjAxOCxpZ25vcmUgKGV4YW1wbGUtb2YtZGVzdWdhcmluZy1lcXVpdmFsZW5jZSkKYXN5bmMgZm4gZm9vKCkgLT4gVXNlciB7CiAgICB1bmltcGxlbWVudGVkISgpCn0KLy8gVGhlIGFzeW5jIGZuIGFib3ZlIGdldHMgZGVzdWdhcmVkIGFzIGZvbGxvd3M6CmZuIGZvbygmc2VsZikgLT4gaW1wbCBGdXR1cmU8T3V0cHV0ID0gVXNlcj4gKyAnXyB7CiAgICB1bmltcGxlbWVudGVkISgpCn0KYGBgCgpCdXQgd2hlbiBpdCBjb21lcyB0byBzdXBwb3J0aW5nIHRoaXMgaW4gdHJhaXRzLCB0aGVyZSBhcmUgW2EgZmV3IGltcGxlbWVudGF0aW9uCmlzc3Vlc11bYXN5bmMtaXMtaGFyZF0uIE9uZSBvZiB0aGVtIGlzIHJldHVybmluZyBgaW1wbCBUcmFpdGAgaW4gdHJhaXRzIGlzIG5vdApzdXBwb3J0ZWQsIGFzIGl0IHdvdWxkIHJlcXVpcmUgW0dlbmVyaWMgQXNzb2NpYXRlZCBUeXBlc10gdG8gYmUgc3VwcG9ydGVkOgoKYGBgZWRpdGlvbjIwMTgsaWdub3JlIChleGFtcGxlLW9mLWRlc3VnYXJpbmctZXF1aXZhbGVuY2UpCmltcGwgTXlEYXRhYmFzZSB7CiAgICBhc3luYyBmbiBnZXRfdXNlcigmc2VsZikgLT4gVXNlciB7CiAgICAgICAgdW5pbXBsZW1lbnRlZCEoKQogICAgfQp9CgppbXBsIE15RGF0YWJhc2UgewogICAgZm4gZ2V0X3VzZXIoJnNlbGYpIC0+IGltcGwgRnV0dXJlPE91dHB1dCA9IFVzZXI+ICsgJ18gewogICAgICAgIHVuaW1wbGVtZW50ZWQhKCkKICAgIH0KfQpgYGAKClVudGlsIHRoZXNlIGlzc3VlcyBhcmUgcmVzb2x2ZWQsIHlvdSBjYW4gdXNlIHRoZSBbYGFzeW5jLXRyYWl0YCBjcmF0ZV0sIGFsbG93aW5nCnlvdSB0byB1c2UgYGFzeW5jIGZuYCBpbiB0cmFpdHMgYnkgZGVzdWdhcmluZyB0byAiYm94ZWQgZnV0dXJlcyIKKGBQaW48Qm94PGR5biBGdXR1cmUgKyBTZW5kICsgJ2FzeW5jPj5gKS4KCk5vdGUgdGhhdCB1c2luZyB0aGVzZSB0cmFpdCBtZXRob2RzIHdpbGwgcmVzdWx0IGluIGEgaGVhcCBhbGxvY2F0aW9uCnBlci1mdW5jdGlvbi1jYWxsLiBUaGlzIGlzIG5vdCBhIHNpZ25pZmljYW50IGNvc3QgZm9yIHRoZSB2YXN0IG1ham9yaXR5IG9mCmFwcGxpY2F0aW9ucywgYnV0IHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gZGVjaWRpbmcgd2hldGhlciB0byB1c2UgdGhpcwpmdW5jdGlvbmFsaXR5IGluIHRoZSBwdWJsaWMgQVBJIG9mIGEgbG93LWxldmVsIGZ1bmN0aW9uIHRoYXQgaXMgZXhwZWN0ZWQgdG8gYmUKY2FsbGVkIG1pbGxpb25zIG9mIHRpbWVzIGEgc2Vjb25kLgoKWW91IG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4gdmlzaXRpbmcgdGhlIFthc3luYyBib29rXSBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KCltgYXN5bmMtdHJhaXRgIGNyYXRlXTogaHR0cHM6Ly9jcmF0ZXMuaW8vY3JhdGVzL2FzeW5jLXRyYWl0Clthc3luYy1pcy1oYXJkXTogaHR0cHM6Ly9zbWFsbGN1bHRmb2xsb3dpbmcuY29tL2JhYnlzdGVwcy9ibG9nLzIwMTkvMTAvMjYvYXN5bmMtZm4taW4tdHJhaXRzLWFyZS1oYXJkLwpbR2VuZXJpYyBBc3NvY2lhdGVkIFR5cGVzXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy80NDI2NQpbYXN5bmMgYm9va106IGh0dHBzOi8vcnVzdC1sYW5nLmdpdGh1Yi5pby9hc3luYy1ib29rLzA3X3dvcmthcm91bmRzLzA2X2FzeW5jX2luX3RyYWl0cy5odG1sCkUwNzA4YGFzeW5jYCBub24tYG1vdmVgIGNsb3N1cmVzIHdpdGggcGFyYW1ldGVycyBhcmUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLGVkaXRpb24yMDE4LEUwNzA4CiMhW2ZlYXR1cmUoYXN5bmNfY2xvc3VyZSldCgpmbiBtYWluKCkgewogICAgbGV0IGFkZF9vbmUgPSBhc3luYyB8bnVtOiB1OHwgeyAvLyBlcnJvciEKICAgICAgICBudW0gKyAxCiAgICB9Owp9CmBgYAoKYGFzeW5jYCB3aXRoIG5vbi1tb3ZlIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIHdpdGggdGhlIGN1cnJlbnQKdmVyc2lvbiwgeW91IGNhbiB1c2Ugc3VjY2Vzc2Z1bGx5IGJ5IHVzaW5nIG1vdmU6CgpgYGBlZGl0aW9uMjAxOAojIVtmZWF0dXJlKGFzeW5jX2Nsb3N1cmUpXQoKZm4gbWFpbigpIHsKICAgIGxldCBhZGRfb25lID0gYXN5bmMgbW92ZSB8bnVtOiB1OHwgeyAvLyBvayEKICAgICAgICBudW0gKyAxCiAgICB9Owp9CmBgYApFMDcxMEFuIHVua25vd24gdG9vbCBuYW1lIHdhcyBmb3VuZCBpbiBhIHNjb3BlZCBsaW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTA3MTAKI1thbGxvdyhjbGlwcDo6ZmlsdGVyX21hcCldIC8vIGVycm9yIWAKZm4gbWFpbigpIHsKICAgIC8vIGJ1c2luZXNzIGxvZ2ljCn0KYGBgCgpgYGBjb21waWxlX2ZhaWwsRTA3MTAKI1t3YXJuKGNsaXBwOjpmaWx0ZXJfbWFwKV0gLy8gZXJyb3IhYApmbiBtYWluKCkgewogICAgLy8gYnVzaW5lc3MgbG9naWMKfQpgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgdG9vbCdzIG5hbWUgb3IgdGhhdCB5b3UgZGlkbid0CmZvcmdldCB0byBpbXBvcnQgaXQgaW4geW91IHByb2plY3Q6CgpgYGAKI1thbGxvdyhjbGlwcHk6OmZpbHRlcl9tYXApXSAvLyBvayEKZm4gbWFpbigpIHsKICAgIC8vIGJ1c2luZXNzIGxvZ2ljCn0KYGBgCgpgYGAKI1t3YXJuKGNsaXBweTo6ZmlsdGVyX21hcCldIC8vIG9rIQpmbiBtYWluKCkgewogICAgLy8gYnVzaW5lc3MgbG9naWMKfQpgYGAKRTA3MTJBIGJvcnJvdyBvZiBhIHRocmVhZC1sb2NhbCB2YXJpYWJsZSB3YXMgbWFkZSBpbnNpZGUgYSBmdW5jdGlvbiB3aGljaCBvdXRsaXZlZAp0aGUgbGlmZXRpbWUgb2YgdGhlIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcxMgojIVtmZWF0dXJlKHRocmVhZF9sb2NhbCldCgojW3RocmVhZF9sb2NhbF0Kc3RhdGljIEZPTzogdTggPSAzOwoKZm4gbWFpbigpIHsKICAgIGxldCBhID0gJkZPTzsgLy8gZXJyb3I6IHRocmVhZC1sb2NhbCB2YXJpYWJsZSBib3Jyb3dlZCBwYXN0IGVuZCBvZiBmdW5jdGlvbgoKICAgIHN0ZDo6dGhyZWFkOjpzcGF3bihtb3ZlIHx8IHsKICAgICAgICBwcmludGxuISgie30iLCBhKTsKICAgIH0pOwp9CmBgYApFMDcxM1RoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGJvcnJvdyBzdGF0ZSBwYXN0IHRoZSBlbmQgb2YgdGhlCmxpZmV0aW1lIG9mIGEgdHlwZSB0aGF0IGltcGxlbWVudHMgdGhlIGBEcm9wYCB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MTMKIyFbZmVhdHVyZShubGwpXQoKcHViIHN0cnVjdCBTPCdhPiB7IGRhdGE6ICYnYSBtdXQgU3RyaW5nIH0KCmltcGw8J2E+IERyb3AgZm9yIFM8J2E+IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7IHNlbGYuZGF0YS5wdXNoX3N0cigiYmVpbmcgZHJvcHBlZCIpOyB9Cn0KCmZuIGRlbW88J2E+KHM6IFM8J2E+KSAtPiAmJ2EgbXV0IFN0cmluZyB7IGxldCBwID0gJm11dCAqcy5kYXRhOyBwIH0KYGBgCgpIZXJlLCBgZGVtb2AgdHJpZXMgdG8gYm9ycm93IHRoZSBzdHJpbmcgZGF0YSBoZWxkIHdpdGhpbiBpdHMKYXJndW1lbnQgYHNgIGFuZCB0aGVuIHJldHVybiB0aGF0IGJvcnJvdy4gSG93ZXZlciwgYFNgIGlzCmRlY2xhcmVkIGFzIGltcGxlbWVudGluZyBgRHJvcGAuCgpTdHJ1Y3RzIGltcGxlbWVudGluZyB0aGUgYERyb3BgIHRyYWl0IGhhdmUgYW4gaW1wbGljaXQgZGVzdHJ1Y3RvciB0aGF0CmdldHMgY2FsbGVkIHdoZW4gdGhleSBnbyBvdXQgb2Ygc2NvcGUuIFRoaXMgZGVzdHJ1Y3RvciBnZXRzIGV4Y2x1c2l2ZQphY2Nlc3MgdG8gdGhlIGZpZWxkcyBvZiB0aGUgc3RydWN0IHdoZW4gaXQgcnVucy4KClRoaXMgbWVhbnMgdGhhdCB3aGVuIGBzYCByZWFjaGVzIHRoZSBlbmQgb2YgYGRlbW9gLCBpdHMgZGVzdHJ1Y3RvcgpnZXRzIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gaXRzIGAmbXV0YC1ib3Jyb3dlZCBzdHJpbmcgZGF0YS4gIGFsbG93aW5nCmFub3RoZXIgYm9ycm93IG9mIHRoYXQgc3RyaW5nIGRhdGEgKGBwYCksIHRvIGV4aXN0IGFjcm9zcyB0aGUgZHJvcCBvZgpgc2Agd291bGQgYmUgYSB2aW9sYXRpb24gb2YgdGhlIHByaW5jaXBsZSB0aGF0IGAmbXV0YC1ib3Jyb3dzIGhhdmUKZXhjbHVzaXZlLCB1bmFsaWFzZWQgYWNjZXNzIHRvIHRoZWlyIHJlZmVyZW5jZWQgZGF0YS4KClRoaXMgZXJyb3IgY2FuIGJlIGZpeGVkIGJ5IGNoYW5naW5nIGBkZW1vYCBzbyB0aGF0IHRoZSBkZXN0cnVjdG9yIGRvZXMKbm90IHJ1biB3aGlsZSB0aGUgc3RyaW5nLWRhdGEgaXMgYm9ycm93ZWQ7IGZvciBleGFtcGxlIGJ5IHRha2luZyBgU2AKYnkgcmVmZXJlbmNlOgoKYGBgCnB1YiBzdHJ1Y3QgUzwnYT4geyBkYXRhOiAmJ2EgbXV0IFN0cmluZyB9CgppbXBsPCdhPiBEcm9wIGZvciBTPCdhPiB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgeyBzZWxmLmRhdGEucHVzaF9zdHIoImJlaW5nIGRyb3BwZWQiKTsgfQp9CgpmbiBkZW1vPCdhPihzOiAmJ2EgbXV0IFM8J2E+KSAtPiAmJ2EgbXV0IFN0cmluZyB7IGxldCBwID0gJm11dCAqKCpzKS5kYXRhOyBwIH0KYGBgCgpOb3RlIHRoYXQgdGhpcyBhcHByb2FjaCBuZWVkcyBhIHJlZmVyZW5jZSB0byBTIHdpdGggbGlmZXRpbWUgYCdhYC4KTm90aGluZyBzaG9ydGVyIHRoYW4gYCdhYCB3aWxsIHN1ZmZpY2U6IGEgc2hvcnRlciBsaWZldGltZSB3b3VsZCBpbXBseQp0aGF0IGFmdGVyIGBkZW1vYCBmaW5pc2hlcyBleGVjdXRpbmcsIHNvbWV0aGluZyBlbHNlIChzdWNoIGFzIHRoZQpkZXN0cnVjdG9yISkgY291bGQgYWNjZXNzIGBzLmRhdGFgIGFmdGVyIHRoZSBlbmQgb2YgdGhhdCBzaG9ydGVyCmxpZmV0aW1lLCB3aGljaCB3b3VsZCBhZ2FpbiB2aW9sYXRlIHRoZSBgJm11dGAtYm9ycm93J3MgZXhjbHVzaXZlCmFjY2Vzcy4KRTA3MTRBIGAjW21hcmtlcl1gIHRyYWl0IGNvbnRhaW5lZCBhbiBhc3NvY2lhdGVkIGl0ZW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzE0CiMhW2ZlYXR1cmUobWFya2VyX3RyYWl0X2F0dHIpXQojIVtmZWF0dXJlKGFzc29jaWF0ZWRfdHlwZV9kZWZhdWx0cyldCgojW21hcmtlcl0KdHJhaXQgTWFya2VyQ29uc3QgewogICAgY29uc3QgTjogdXNpemU7IC8vIGVycm9yIQp9CgpmbiBtYWluKCkge30KYGBgCgpUaGUgaXRlbXMgb2YgbWFya2VyIHRyYWl0cyBjYW5ub3QgYmUgb3ZlcnJpZGRlbiwgc28gdGhlcmUncyBubyBuZWVkIHRvIGhhdmUgdGhlbQp3aGVuIHRoZXkgY2Fubm90IGJlIGNoYW5nZWQgcGVyLXR5cGUgYW55d2F5LiAgSWYgeW91IHdhbnRlZCB0aGVtIGZvciBlcmdvbm9taWMKcmVhc29ucywgY29uc2lkZXIgbWFraW5nIGFuIGV4dGVuc2lvbiB0cmFpdCBpbnN0ZWFkLgpFMDcxNUFuIGBpbXBsYCBmb3IgYSBgI1ttYXJrZXJdYCB0cmFpdCB0cmllZCB0byBvdmVycmlkZSBhbiBhc3NvY2lhdGVkIGl0ZW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzE1CiMhW2ZlYXR1cmUobWFya2VyX3RyYWl0X2F0dHIpXQoKI1ttYXJrZXJdCnRyYWl0IE1hcmtlciB7CiAgICBjb25zdCBOOiB1c2l6ZSA9IDA7CiAgICBmbiBkb19zb21ldGhpbmcoKSB7fQp9CgpzdHJ1Y3QgT3ZlcnJpZGVDb25zdDsKaW1wbCBNYXJrZXIgZm9yIE92ZXJyaWRlQ29uc3QgeyAvLyBlcnJvciEKICAgIGNvbnN0IE46IHVzaXplID0gMTsKfQojIGZuIG1haW4oKSB7fQpgYGAKCkJlY2F1c2UgbWFya2VyIHRyYWl0cyBhcmUgYWxsb3dlZCB0byBoYXZlIG11bHRpcGxlIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIHNhbWUKdHlwZSwgaXQncyBub3QgYWxsb3dlZCB0byBvdmVycmlkZSBhbnl0aGluZyBpbiB0aG9zZSBpbXBsZW1lbnRhdGlvbnMsIGFzIGl0CndvdWxkIGJlIGFtYmlndW91cyB3aGljaCBvdmVycmlkZSBzaG91bGQgYWN0dWFsbHkgYmUgdXNlZC4KRTA3MTZBIHRlbXBvcmFyeSB2YWx1ZSBpcyBiZWluZyBkcm9wcGVkIHdoaWxlIGEgYm9ycm93IGlzIHN0aWxsIGluIGFjdGl2ZSB1c2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzE2CmZuIGZvbygpIC0+IGkzMiB7IDIyIH0KZm4gYmFyKHg6ICZpMzIpIC0+ICZpMzIgeyB4IH0KbGV0IHAgPSBiYXIoJmZvbygpKTsKICAgICAgICAgLy8gLS0tLS0tIGNyZWF0ZXMgYSB0ZW1wb3JhcnkKbGV0IHEgPSAqcDsKYGBgCgpIZXJlLCB0aGUgZXhwcmVzc2lvbiBgJmZvbygpYCBpcyBib3Jyb3dpbmcgdGhlIGV4cHJlc3Npb24gYGZvbygpYC4gQXMgYGZvbygpYCBpcwphIGNhbGwgdG8gYSBmdW5jdGlvbiwgYW5kIG5vdCB0aGUgbmFtZSBvZiBhIHZhcmlhYmxlLCB0aGlzIGNyZWF0ZXMgYQoqKnRlbXBvcmFyeSoqIC0tIHRoYXQgdGVtcG9yYXJ5IHN0b3JlcyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYGZvbygpYCBzbyB0aGF0IGl0CmNhbiBiZSBib3Jyb3dlZC4gWW91IGNvdWxkIGltYWdpbmUgdGhhdCBgbGV0IHAgPSBiYXIoJmZvbygpKTtgIGlzIGVxdWl2YWxlbnQgdG8KdGhpczoKCmBgYGNvbXBpbGVfZmFpbCxFMDU5NwojIGZuIGZvbygpIC0+IGkzMiB7IDIyIH0KIyBmbiBiYXIoeDogJmkzMikgLT4gJmkzMiB7IHggfQpsZXQgcCA9IHsKICBsZXQgdG1wID0gZm9vKCk7IC8vIHRoZSB0ZW1wb3JhcnkKICBiYXIoJnRtcCkKfTsgLy8gPC0tIHRtcCBpcyBmcmVlZCBhcyB3ZSBleGl0IHRoaXMgYmxvY2sKbGV0IHEgPSBwOwpgYGAKCldoZW5ldmVyIGEgdGVtcG9yYXJ5IGlzIGNyZWF0ZWQsIGl0IGlzIGF1dG9tYXRpY2FsbHkgZHJvcHBlZCAoZnJlZWQpIGFjY29yZGluZwp0byBmaXhlZCBydWxlcy4gT3JkaW5hcmlseSwgdGhlIHRlbXBvcmFyeSBpcyBkcm9wcGVkIGF0IHRoZSBlbmQgb2YgdGhlIGVuY2xvc2luZwpzdGF0ZW1lbnQgLS0gaW4gdGhpcyBjYXNlLCBhZnRlciB0aGUgYGxldGAuIFRoaXMgaXMgaWxsdXN0cmF0ZWQgaW4gdGhlIGV4YW1wbGUKYWJvdmUgYnkgc2hvd2luZyB0aGF0IGB0bXBgIHdvdWxkIGJlIGZyZWVkIGFzIHdlIGV4aXQgdGhlIGJsb2NrLgoKVG8gZml4IHRoaXMgcHJvYmxlbSwgeW91IG5lZWQgdG8gY3JlYXRlIGEgbG9jYWwgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHZhbHVlIGluCnJhdGhlciB0aGFuIHJlbHlpbmcgb24gYSB0ZW1wb3JhcnkuIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgY2hhbmdlIHRoZSBvcmlnaW5hbApwcm9ncmFtIHRvIHRoZSBmb2xsb3dpbmc6CgpgYGAKZm4gZm9vKCkgLT4gaTMyIHsgMjIgfQpmbiBiYXIoeDogJmkzMikgLT4gJmkzMiB7IHggfQpsZXQgdmFsdWUgPSBmb28oKTsgLy8gZHJvcHBlZCBhdCB0aGUgZW5kIG9mIHRoZSBlbmNsb3NpbmcgYmxvY2sKbGV0IHAgPSBiYXIoJnZhbHVlKTsKbGV0IHEgPSAqcDsKYGBgCgpCeSBpbnRyb2R1Y2luZyB0aGUgZXhwbGljaXQgYGxldCB2YWx1ZWAsIHdlIGFsbG9jYXRlIHN0b3JhZ2UgdGhhdCB3aWxsIGxhc3QKdW50aWwgdGhlIGVuZCBvZiB0aGUgZW5jbG9zaW5nIGJsb2NrICh3aGVuIGB2YWx1ZWAgZ29lcyBvdXQgb2Ygc2NvcGUpLiBXaGVuIHdlCmJvcnJvdyBgJnZhbHVlYCwgd2UgYXJlIGJvcnJvd2luZyBhIGxvY2FsIHZhcmlhYmxlIHRoYXQgYWxyZWFkeSBleGlzdHMsIGFuZApoZW5jZSBubyB0ZW1wb3JhcnkgaXMgY3JlYXRlZC4KClRlbXBvcmFyaWVzIGFyZSBub3QgYWx3YXlzIGRyb3BwZWQgYXQgdGhlIGVuZCBvZiB0aGUgZW5jbG9zaW5nIHN0YXRlbWVudC4gSW4Kc2ltcGxlIGNhc2VzIHdoZXJlIHRoZSBgJmAgZXhwcmVzc2lvbiBpcyBpbW1lZGlhdGVseSBzdG9yZWQgaW50byBhIHZhcmlhYmxlLCB0aGUKY29tcGlsZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGV4dGVuZCB0aGUgbGlmZXRpbWUgb2YgdGhlIHRlbXBvcmFyeSB1bnRpbCB0aGUgZW5kCm9mIHRoZSBlbmNsb3NpbmcgYmxvY2suIFRoZXJlZm9yZSwgYW4gYWx0ZXJuYXRpdmUgd2F5IHRvIGZpeCB0aGUgb3JpZ2luYWwKcHJvZ3JhbSBpcyB0byB3cml0ZSBgbGV0IHRtcCA9ICZmb28oKWAgYW5kIG5vdCBgbGV0IHRtcCA9IGZvbygpYDoKCmBgYApmbiBmb28oKSAtPiBpMzIgeyAyMiB9CmZuIGJhcih4OiAmaTMyKSAtPiAmaTMyIHsgeCB9CmxldCB2YWx1ZSA9ICZmb28oKTsKbGV0IHAgPSBiYXIodmFsdWUpOwpsZXQgcSA9ICpwOwpgYGAKCkhlcmUsIHdlIGFyZSBzdGlsbCBib3Jyb3dpbmcgYGZvbygpYCwgYnV0IGFzIHRoZSBib3Jyb3cgaXMgYXNzaWduZWQgZGlyZWN0bHkKaW50byBhIHZhcmlhYmxlLCB0aGUgdGVtcG9yYXJ5IHdpbGwgbm90IGJlIGRyb3BwZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUKZW5jbG9zaW5nIGJsb2NrLiBTaW1pbGFyIHJ1bGVzIGFwcGx5IHdoZW4gdGVtcG9yYXJpZXMgYXJlIHN0b3JlZCBpbnRvIGFnZ3JlZ2F0ZQpzdHJ1Y3R1cmVzIGxpa2UgYSB0dXBsZSBvciBzdHJ1Y3Q6CgpgYGAKLy8gSGVyZSwgdHdvIHRlbXBvcmFyaWVzIGFyZSBjcmVhdGVkLCBidXQKLy8gYXMgdGhleSBhcmUgc3RvcmVkIGRpcmVjdGx5IGludG8gYHZhbHVlYCwKLy8gdGhleSBhcmUgbm90IGRyb3BwZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUKLy8gZW5jbG9zaW5nIGJsb2NrLgpmbiBmb28oKSAtPiBpMzIgeyAyMiB9CmxldCB2YWx1ZSA9ICgmZm9vKCksICZmb28oKSk7CmBgYApFMDcxOEEgYCNbbGFuZyA9ICIuLiJdYCBhdHRyaWJ1dGUgd2FzIHBsYWNlZCBvbiB0aGUgd3JvbmcgaXRlbSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcxOAojIVtmZWF0dXJlKGxhbmdfaXRlbXMpXQoKI1tsYW5nID0gIm93bmVkX2JveCJdCnN0YXRpYyBYOiB1MzIgPSA0MjsKYGBgCkUwNzE5QW4gYXNzb2NpYXRlZCB0eXBlIHZhbHVlIHdhcyBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzE5CiMhW2ZlYXR1cmUoYXNzb2NpYXRlZF90eXBlX2JvdW5kcyldCgp0cmFpdCBGb29UcmFpdCB7fQp0cmFpdCBCYXJUcmFpdCB7fQoKLy8gZXJyb3I6IGFzc29jaWF0ZWQgdHlwZSBgSXRlbWAgaW4gdHJhaXQgYEl0ZXJhdG9yYCBpcyBzcGVjaWZpZWQgdHdpY2UKc3RydWN0IEZvbzxUOiBJdGVyYXRvcjxJdGVtOiBGb29UcmFpdCwgSXRlbTogQmFyVHJhaXQ+PiB7IGY6IFQgfQpgYGAKCmBJdGVtYCBpbiB0cmFpdCBgSXRlcmF0b3JgIGNhbm5vdCBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgZm9yIHN0cnVjdCBgRm9vYC4KVG8gZml4IHRoaXMsIGNyZWF0ZSBhIG5ldyB0cmFpdCB0aGF0IGlzIGEgY29tYmluYXRpb24gb2YgdGhlIGRlc2lyZWQgdHJhaXRzIGFuZApzcGVjaWZ5IHRoZSBhc3NvY2lhdGVkIHR5cGUgd2l0aCB0aGUgbmV3IHRyYWl0LgoKQ29ycmVjdGVkIGV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShhc3NvY2lhdGVkX3R5cGVfYm91bmRzKV0KCnRyYWl0IEZvb1RyYWl0IHt9CnRyYWl0IEJhclRyYWl0IHt9CnRyYWl0IEZvb0JhclRyYWl0OiBGb29UcmFpdCArIEJhclRyYWl0IHt9CgpzdHJ1Y3QgRm9vPFQ6IEl0ZXJhdG9yPEl0ZW06IEZvb0JhclRyYWl0Pj4geyBmOiBUIH0gLy8gb2shCmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYXNzb2NpYXRlZCB0eXBlcywgc2VlIFt0aGUgYm9va11bYmstYXRdLiBGb3IgbW9yZQppbmZvcm1hdGlvbiBvbiBhc3NvY2lhdGVkIHR5cGUgYm91bmRzLCBzZWUgW1JGQyAyMjg5XVtyZmMtMjI4OV0uCgpbYmstYXRdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxOS0wMy1hZHZhbmNlZC10cmFpdHMuaHRtbCNzcGVjaWZ5aW5nLXBsYWNlaG9sZGVyLXR5cGVzLWluLXRyYWl0LWRlZmluaXRpb25zLXdpdGgtYXNzb2NpYXRlZC10eXBlcwpbcmZjLTIyODldOiBodHRwczovL3J1c3QtbGFuZy5naXRodWIuaW8vcmZjcy8yMjg5LWFzc29jaWF0ZWQtdHlwZS1ib3VuZHMuaHRtbApFMDcyMEFuIGBpbXBsIFRyYWl0YCB0eXBlIGV4cGFuZHMgdG8gYSByZWN1cnNpdmUgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MjAKZm4gbWFrZV9yZWN1cnNpdmVfdHlwZSgpIC0+IGltcGwgU2l6ZWQgewogICAgW21ha2VfcmVjdXJzaXZlX3R5cGUoKSwgbWFrZV9yZWN1cnNpdmVfdHlwZSgpXQp9CmBgYAoKQW4gYGltcGwgVHJhaXRgIHR5cGUgbXVzdCBiZSBleHBhbmRhYmxlIHRvIGEgY29uY3JldGUgdHlwZSB0aGF0IGNvbnRhaW5zIG5vCmBpbXBsIFRyYWl0YCB0eXBlcy4gRm9yIGV4YW1wbGUgdGhlIHByZXZpb3VzIGV4YW1wbGUgdHJpZXMgdG8gY3JlYXRlIGFuCmBpbXBsIFRyYWl0YCB0eXBlIGBUYCB0aGF0IGlzIGVxdWFsIHRvIGBbVCwgVF1gLgpFMDcyM0FuIHVuc3RhYmxlIGZlYXR1cmUgaW4gYGNvbnN0YCBjb250ZXh0cyB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MjMKdHJhaXQgVCB7fQoKaW1wbCBUIGZvciAoKSB7fQoKY29uc3QgZm4gZm9vKCkgLT4gaW1wbCBUIHsgLy8gZXJyb3I6IGBpbXBsIFRyYWl0YCBpbiBjb25zdCBmbiBpcyB1bnN0YWJsZQogICAgKCkKfQpgYGAKClRvIGVuYWJsZSB0aGlzIGZlYXR1cmUgb24gYSBuaWdodGx5IHZlcnNpb24gb2YgcnVzdGMsIGFkZCB0aGUgYGNvbnN0X2ZuYApmZWF0dXJlIGZsYWc6CgpgYGAKIyFbZmVhdHVyZShjb25zdF9mbildCgp0cmFpdCBUIHt9CgppbXBsIFQgZm9yICgpIHt9Cgpjb25zdCBmbiBmb28oKSAtPiBpbXBsIFQgewogICAgKCkKfQpgYGAKRTA3MjRgI1tmZmlfcmV0dXJuc190d2ljZV1gIHdhcyB1c2VkIG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgZm9yZWlnbiBmdW5jdGlvbgpkZWNsYXJhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MjQKIyFbZmVhdHVyZShmZmlfcmV0dXJuc190d2ljZSldCiMhW2NyYXRlX3R5cGUgPSAibGliIl0KCiNbZmZpX3JldHVybnNfdHdpY2VdIC8vIGVycm9yIQpwdWIgZm4gZm9vKCkge30KYGBgCgpgI1tmZmlfcmV0dXJuc190d2ljZV1gIGNhbiBvbmx5IGJlIHVzZWQgb24gZm9yZWlnbiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCkZvciBleGFtcGxlLCB3ZSBtaWdodCBjb3JyZWN0IHRoZSBwcmV2aW91cyBleGFtcGxlIGJ5IGRlY2xhcmluZwp0aGUgZnVuY3Rpb24gaW5zaWRlIG9mIGFuwqBgZXh0ZXJuYMKgYmxvY2suCgpgYGAKIyFbZmVhdHVyZShmZmlfcmV0dXJuc190d2ljZSldCgpleHRlcm4gewogICAjW2ZmaV9yZXR1cm5zX3R3aWNlXSAvLyBvayEKICAgcHViIGZuIGZvbygpOwp9CmBgYApFMDcyNUEgZmVhdHVyZSBhdHRyaWJ1dGUgbmFtZWQgYSBmZWF0dXJlIHRoYXQgd2FzIGRpc2FsbG93ZWQgaW4gdGhlIGNvbXBpbGVyCmNvbW1hbmQgbGluZSBmbGFncy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKGNhbid0IHNwZWNpZnkgY29tcGlsZXIgZmxhZ3MgZnJvbSBkb2N0ZXN0cykKIyFbZmVhdHVyZShuZXZlcl90eXBlKV0gLy8gZXJyb3I6IHRoZSBmZWF0dXJlIGBuZXZlcl90eXBlYCBpcyBub3QgaW4KICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGxpc3Qgb2YgYWxsb3dlZCBmZWF0dXJlcwpgYGAKCkRlbGV0ZSB0aGUgb2ZmZW5kaW5nIGZlYXR1cmUgYXR0cmlidXRlLCBvciBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgYWxsb3dlZApmZWF0dXJlcyBpbiB0aGUgYC1aIGFsbG93X2ZlYXR1cmVzYCBmbGFnLgpFMDcyN0EgYHlpZWxkYCBjbGF1c2Ugd2FzIHVzZWQgaW4gYW4gYGFzeW5jYCBjb250ZXh0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcyNyxlZGl0aW9uMjAxOAojIVtmZWF0dXJlKGdlbmVyYXRvcnMpXQoKZm4gbWFpbigpIHsKICAgIGxldCBnZW5lcmF0b3IgPSB8fCB7CiAgICAgICAgYXN5bmMgewogICAgICAgICAgICB5aWVsZDsKICAgICAgICB9CiAgICB9Owp9CmBgYAoKSGVyZSwgdGhlIGB5aWVsZGAga2V5d29yZCBpcyB1c2VkIGluIGFuIGBhc3luY2AgYmxvY2ssCndoaWNoIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLgoKVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBoYXZlIHRvIG1vdmUgYHlpZWxkYCBvdXQgb2YgdGhlIGBhc3luY2AgYmxvY2s6CgpgYGBlZGl0aW9uMjAxOAojIVtmZWF0dXJlKGdlbmVyYXRvcnMpXQoKZm4gbWFpbigpIHsKICAgIGxldCBnZW5lcmF0b3IgPSB8fCB7CiAgICAgICAgeWllbGQ7CiAgICB9Owp9CmBgYApFMDcyOFtgYXdhaXRgXSBoYXMgYmVlbiB1c2VkIG91dHNpZGUgW2Bhc3luY2BdIGZ1bmN0aW9uIG9yIFtgYXN5bmNgXSBibG9jay4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBlZGl0aW9uMjAxOCxjb21waWxlX2ZhaWwsRTA3MjgKIyB1c2Ugc3RkOjpwaW46OlBpbjsKIyB1c2Ugc3RkOjpmdXR1cmU6OkZ1dHVyZTsKIyB1c2Ugc3RkOjp0YXNrOjp7Q29udGV4dCwgUG9sbH07CiMKIyBzdHJ1Y3QgV2FrZU9uY2VUaGVuQ29tcGxldGUoYm9vbCk7CiMKIyBmbiB3YWtlX2FuZF95aWVsZF9vbmNlKCkgLT4gV2FrZU9uY2VUaGVuQ29tcGxldGUgewojICAgICBXYWtlT25jZVRoZW5Db21wbGV0ZShmYWxzZSkKIyB9CiMKIyBpbXBsIEZ1dHVyZSBmb3IgV2FrZU9uY2VUaGVuQ29tcGxldGUgewojICAgICB0eXBlIE91dHB1dCA9ICgpOwojICAgICBmbiBwb2xsKG11dCBzZWxmOiBQaW48Jm11dCBTZWxmPiwgY3g6ICZtdXQgQ29udGV4dDwnXz4pIC0+IFBvbGw8KCk+IHsKIyAgICAgICAgIGlmIHNlbGYuMCB7CiMgICAgICAgICAgICAgUG9sbDo6UmVhZHkoKCkpCiMgICAgICAgICB9IGVsc2UgewojICAgICAgICAgICAgIGN4Lndha2VyKCkud2FrZV9ieV9yZWYoKTsKIyAgICAgICAgICAgICBzZWxmLjAgPSB0cnVlOwojICAgICAgICAgICAgIFBvbGw6OlBlbmRpbmcKIyAgICAgICAgIH0KIyAgICAgfQojIH0KIwpmbiBmb28oKSB7CiAgICB3YWtlX2FuZF95aWVsZF9vbmNlKCkuYXdhaXQgLy8gYGF3YWl0YCBpcyB1c2VkIG91dHNpZGUgYGFzeW5jYCBjb250ZXh0Cn0KYGBgCgpbYGF3YWl0YF0gaXMgdXNlZCB0byBzdXNwZW5kIHRoZSBjdXJyZW50IGNvbXB1dGF0aW9uIHVudGlsIHRoZSBnaXZlbgpmdXR1cmUgaXMgcmVhZHkgdG8gcHJvZHVjZSBhIHZhbHVlLiBTbyBpdCBpcyBsZWdhbCBvbmx5IHdpdGhpbgphbiBbYGFzeW5jYF0gY29udGV4dCwgbGlrZSBhbiBgYXN5bmNgIGZ1bmN0aW9uIG9yIGFuIGBhc3luY2AgYmxvY2suCgpgYGBlZGl0aW9uMjAxOAojIHVzZSBzdGQ6OnBpbjo6UGluOwojIHVzZSBzdGQ6OmZ1dHVyZTo6RnV0dXJlOwojIHVzZSBzdGQ6OnRhc2s6OntDb250ZXh0LCBQb2xsfTsKIwojIHN0cnVjdCBXYWtlT25jZVRoZW5Db21wbGV0ZShib29sKTsKIwojIGZuIHdha2VfYW5kX3lpZWxkX29uY2UoKSAtPiBXYWtlT25jZVRoZW5Db21wbGV0ZSB7CiMgICAgIFdha2VPbmNlVGhlbkNvbXBsZXRlKGZhbHNlKQojIH0KIwojIGltcGwgRnV0dXJlIGZvciBXYWtlT25jZVRoZW5Db21wbGV0ZSB7CiMgICAgIHR5cGUgT3V0cHV0ID0gKCk7CiMgICAgIGZuIHBvbGwobXV0IHNlbGY6IFBpbjwmbXV0IFNlbGY+LCBjeDogJm11dCBDb250ZXh0PCdfPikgLT4gUG9sbDwoKT4gewojICAgICAgICAgaWYgc2VsZi4wIHsKIyAgICAgICAgICAgICBQb2xsOjpSZWFkeSgoKSkKIyAgICAgICAgIH0gZWxzZSB7CiMgICAgICAgICAgICAgY3gud2FrZXIoKS53YWtlX2J5X3JlZigpOwojICAgICAgICAgICAgIHNlbGYuMCA9IHRydWU7CiMgICAgICAgICAgICAgUG9sbDo6UGVuZGluZwojICAgICAgICAgfQojICAgICB9CiMgfQojCmFzeW5jIGZuIGZvbygpIHsKICAgIHdha2VfYW5kX3lpZWxkX29uY2UoKS5hd2FpdCAvLyBgYXdhaXRgIGlzIHVzZWQgd2l0aGluIGBhc3luY2AgZnVuY3Rpb24KfQoKZm4gYmFyKHg6IHU4KSAtPiBpbXBsIEZ1dHVyZTxPdXRwdXQgPSB1OD4gewogICAgYXN5bmMgbW92ZSB7CiAgICAgICAgd2FrZV9hbmRfeWllbGRfb25jZSgpLmF3YWl0OyAvLyBgYXdhaXRgIGlzIHVzZWQgd2l0aGluIGBhc3luY2AgYmxvY2sKICAgICAgICB4CiAgICB9Cn0KYGBgCgpbYGFzeW5jYF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RkL2tleXdvcmQuYXN5bmMuaHRtbApbYGF3YWl0YF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RkL2tleXdvcmQuYXdhaXQuaHRtbApFMDcyOVN1cHBvcnQgZm9yIE5vbi1MZXhpY2FsIExpZmV0aW1lcyAoTkxMKSBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgUnVzdCBjb21waWxlcgpzaW5jZSAxLjMxLCBhbmQgaGFzIGJlZW4gZW5hYmxlZCBvbiB0aGUgMjAxNSBlZGl0aW9uIHNpbmNlIDEuMzYuIFRoZSBuZXcgYm9ycm93CmNoZWNrZXIgZm9yIE5MTCB1bmNvdmVyZWQgc29tZSBidWdzIGluIHRoZSBvbGQgYm9ycm93IGNoZWNrZXIsIHdoaWNoIGluIHNvbWUKY2FzZXMgYWxsb3dlZCB1bnNvdW5kIGNvZGUgdG8gY29tcGlsZSwgcmVzdWx0aW5nIGluIG1lbW9yeSBzYWZldHkgaXNzdWVzLgoKIyMjIFdoYXQgZG8gSSBkbz8KCkNoYW5nZSB5b3VyIGNvZGUgc28gdGhlIHdhcm5pbmcgZG9lcyBubyBsb25nZXIgdHJpZ2dlci4gRm9yIGJhY2t3YXJkcwpjb21wYXRpYmlsaXR5LCB0aGlzIHVuc291bmQgY29kZSBtYXkgc3RpbGwgY29tcGlsZSAod2l0aCBhIHdhcm5pbmcpIHJpZ2h0IG5vdy4KSG93ZXZlciwgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCBubyBsb25nZXIgYWNjZXB0IHRoaXMKY29kZSBhbmQgd2lsbCB0aHJvdyBhIGhhcmQgZXJyb3IuCgojIyMgU2hvdWxkbid0IHlvdSBmaXggdGhlIG9sZCBib3Jyb3cgY2hlY2tlcj8KClRoZSBvbGQgYm9ycm93IGNoZWNrZXIgaGFzIGtub3duIHNvdW5kbmVzcyBpc3N1ZXMgdGhhdCBhcmUgYmFzaWNhbGx5IGltcG9zc2libGUKdG8gZml4LiBUaGUgbmV3IE5MTC1iYXNlZCBib3Jyb3cgY2hlY2tlciBpcyB0aGUgZml4LgoKIyMjIENhbiBJIHR1cm4gdGhlc2Ugd2FybmluZ3MgaW50byBlcnJvcnMgYnkgZGVueWluZyBhIGxpbnQ/CgpOby4KCiMjIyBXaGVuIGFyZSB0aGVzZSB3YXJuaW5ncyBnb2luZyB0byB0dXJuIGludG8gZXJyb3JzPwoKTm8gZm9ybWFsIHRpbWVsaW5lIGZvciB0dXJuaW5nIHRoZSB3YXJuaW5ncyBpbnRvIGVycm9ycyBoYXMgYmVlbiBzZXQuIFNlZQpbR2l0SHViIGlzc3VlIDU4NzgxXShodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzU4NzgxKSBmb3IgbW9yZQppbmZvcm1hdGlvbi4KCiMjIyBXaHkgZG8gSSBnZXQgdGhpcyBtZXNzYWdlIHdpdGggY29kZSB0aGF0IGRvZXNuJ3QgaW52b2x2ZSBib3Jyb3dpbmc/CgpUaGVyZSBhcmUgc29tZSBrbm93biBidWdzIHRoYXQgdHJpZ2dlciB0aGlzIG1lc3NhZ2UuCkUwNzMwQW4gYXJyYXkgd2l0aG91dCBhIGZpeGVkIGxlbmd0aCB3YXMgcGF0dGVybi1tYXRjaGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDczMAojIVtmZWF0dXJlKGNvbnN0X2dlbmVyaWNzKV0KCmZuIGlzXzEyMzxjb25zdCBOOiB1c2l6ZT4oeDogW3UzMjsgTl0pIC0+IGJvb2wgewogICAgbWF0Y2ggeCB7CiAgICAgICAgWzEsIDIsIC4uXSA9PiB0cnVlLCAvLyBlcnJvcjogY2Fubm90IHBhdHRlcm4tbWF0Y2ggb24gYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBhcnJheSB3aXRob3V0IGEgZml4ZWQgbGVuZ3RoCiAgICAgICAgXyA9PiBmYWxzZQogICAgfQp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBoYXZlIHR3byBzb2x1dGlvbnM6CiAxLiBVc2UgYW4gYXJyYXkgd2l0aCBhIGZpeGVkIGxlbmd0aC4KIDIuIFVzZSBhIHNsaWNlLgoKRXhhbXBsZSB3aXRoIGFuIGFycmF5IHdpdGggYSBmaXhlZCBsZW5ndGg6CgpgYGAKZm4gaXNfMTIzKHg6IFt1MzI7IDNdKSAtPiBib29sIHsgLy8gV2UgdXNlIGFuIGFycmF5IHdpdGggYSBmaXhlZCBzaXplCiAgICBtYXRjaCB4IHsKICAgICAgICBbMSwgMiwgLi5dID0+IHRydWUsIC8vIG9rIQogICAgICAgIF8gPT4gZmFsc2UKICAgIH0KfQpgYGAKCkV4YW1wbGUgd2l0aCBhIHNsaWNlOgoKYGBgCmZuIGlzXzEyMyh4OiAmW3UzMl0pIC0+IGJvb2wgeyAvLyBXZSB1c2UgYSBzbGljZQogICAgbWF0Y2ggeCB7CiAgICAgICAgWzEsIDIsIC4uXSA9PiB0cnVlLCAvLyBvayEKICAgICAgICBfID0+IGZhbHNlCiAgICB9Cn0KYGBgCkUwNzMxQW4gZW51bSB3aXRoIHRoZSByZXByZXNlbnRhdGlvbiBoaW50IGByZXByKHRyYW5zcGFyZW50KWAgaGFkIHplcm8gb3IgbW9yZSB0aGFuCm9uZSB2YXJpYW50cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MzEKI1tyZXByKHRyYW5zcGFyZW50KV0KZW51bSBTdGF0dXMgeyAvLyBlcnJvcjogdHJhbnNwYXJlbnQgZW51bSBuZWVkcyBleGFjdGx5IG9uZSB2YXJpYW50LCBidXQgaGFzIDIKICAgIEVycm5vKHUzMiksCiAgICBPaywKfQpgYGAKCkJlY2F1c2UgdHJhbnNwYXJlbnQgZW51bXMgYXJlIHJlcHJlc2VudGVkIGV4YWN0bHkgbGlrZSBvbmUgb2YgdGhlaXIgdmFyaWFudHMgYXQKcnVuIHRpbWUsIHNhaWQgdmFyaWFudCBtdXN0IGJlIHVuaXF1ZWx5IGRldGVybWluZWQuIElmIHRoZXJlIGlzIG5vIHZhcmlhbnQsIG9yCmlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2YXJpYW50cywgaXQgaXMgbm90IGNsZWFyIGhvdyB0aGUgZW51bSBzaG91bGQgYmUKcmVwcmVzZW50ZWQuCkUwNzMyQW4gYGVudW1gIHdpdGggYSBkaXNjcmltaW5hbnQgbXVzdCBzcGVjaWZ5IGEgYCNbcmVwcihpbnR0eXBlKV1gLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDczMgojIVtmZWF0dXJlKGFyYml0cmFyeV9lbnVtX2Rpc2NyaW1pbmFudCldCgplbnVtIEVudW0geyAvLyBlcnJvciEKICAgIFVuaXQgPSAxLAogICAgVHVwbGUoKSA9IDIsCiAgICBTdHJ1Y3R7fSA9IDMsCn0KIyBmbiBtYWluKCkge30KYGBgCgpBIGAjW3JlcHIoaW50dHlwZSldYCBtdXN0IGJlIHByb3ZpZGVkIG9uIGFuIGBlbnVtYCBpZiBpdCBoYXMgYSBub24tdW5pdAp2YXJpYW50IHdpdGggYSBkaXNjcmltaW5hbnQsIG9yIHdoZXJlIHRoZXJlIGFyZSBib3RoIHVuaXQgdmFyaWFudHMgd2l0aApkaXNjcmltaW5hbnRzIGFuZCBub24tdW5pdCB2YXJpYW50cy4gVGhpcyByZXN0cmljdGlvbiBlbnN1cmVzIHRoYXQgdGhlcmUKaXMgYSB3ZWxsLWRlZmluZWQgd2F5IHRvIGV4dHJhY3QgYSB2YXJpYW50J3MgZGlzY3JpbWluYW50IGZyb20gYSB2YWx1ZTsKZm9yIGluc3RhbmNlOgoKYGBgCiMhW2ZlYXR1cmUoYXJiaXRyYXJ5X2VudW1fZGlzY3JpbWluYW50KV0KCiNbcmVwcih1OCldCmVudW0gRW51bSB7CiAgICBVbml0ID0gMywKICAgIFR1cGxlKHUxNikgPSAyLAogICAgU3RydWN0IHsKICAgICAgICBhOiB1OCwKICAgICAgICBiOiB1MTYsCiAgICB9ID0gMSwKfQoKZm4gZGlzY3JpbWluYW50KHYgOiAmRW51bSkgLT4gdTggewogICAgdW5zYWZlIHsgKih2IGFzICpjb25zdCBFbnVtIGFzICpjb25zdCB1OCkgfQp9CgpmbiBtYWluKCkgewogICAgYXNzZXJ0X2VxISgzLCBkaXNjcmltaW5hbnQoJkVudW06OlVuaXQpKTsKICAgIGFzc2VydF9lcSEoMiwgZGlzY3JpbWluYW50KCZFbnVtOjpUdXBsZSg1KSkpOwogICAgYXNzZXJ0X2VxISgxLCBkaXNjcmltaW5hbnQoJkVudW06OlN0cnVjdHthOiA3LCBiOiAxMX0pKTsKfQpgYGAKRTA3MzNBbiBbYGFzeW5jYF0gZnVuY3Rpb24gdXNlZCByZWN1cnNpb24gd2l0aG91dCBib3hpbmcuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgZWRpdGlvbjIwMTgsY29tcGlsZV9mYWlsLEUwNzMzCmFzeW5jIGZuIGZvbyhuOiB1c2l6ZSkgewogICAgaWYgbiA+IDAgewogICAgICAgIGZvbyhuIC0gMSkuYXdhaXQ7CiAgICB9Cn0KYGBgCgpUbyBwZXJmb3JtIGFzeW5jIHJlY3Vyc2lvbiwgdGhlIGBhc3luYyBmbmAgbmVlZHMgdG8gYmUgZGVzdWdhcmVkIHN1Y2ggdGhhdCB0aGUKYEZ1dHVyZWAgaXMgZXhwbGljaXQgaW4gdGhlIHJldHVybiB0eXBlOgoKYGBgZWRpdGlvbjIwMTgsY29tcGlsZV9mYWlsLEUwNzIwCnVzZSBzdGQ6OmZ1dHVyZTo6RnV0dXJlOwpmbiBmb29fZGVzdWdhcmVkKG46IHVzaXplKSAtPiBpbXBsIEZ1dHVyZTxPdXRwdXQgPSAoKT4gewogICAgYXN5bmMgbW92ZSB7CiAgICAgICAgaWYgbiA+IDAgewogICAgICAgICAgICBmb29fZGVzdWdhcmVkKG4gLSAxKS5hd2FpdDsKICAgICAgICB9CiAgICB9Cn0KYGBgCgpGaW5hbGx5LCB0aGUgZnV0dXJlIGlzIHdyYXBwZWQgaW4gYSBwaW5uZWQgYm94OgoKYGBgZWRpdGlvbjIwMTgKdXNlIHN0ZDo6ZnV0dXJlOjpGdXR1cmU7CnVzZSBzdGQ6OnBpbjo6UGluOwpmbiBmb29fcmVjdXJzaXZlKG46IHVzaXplKSAtPiBQaW48Qm94PGR5biBGdXR1cmU8T3V0cHV0ID0gKCk+Pj4gewogICAgQm94OjpwaW4oYXN5bmMgbW92ZSB7CiAgICAgICAgaWYgbiA+IDAgewogICAgICAgICAgICBmb29fcmVjdXJzaXZlKG4gLSAxKS5hd2FpdDsKICAgICAgICB9CiAgICB9KQp9CmBgYAoKVGhlIGBCb3g8Li4uPmAgZW5zdXJlcyB0aGF0IHRoZSByZXN1bHQgaXMgb2Yga25vd24gc2l6ZSwgYW5kIHRoZSBwaW4gaXMKcmVxdWlyZWQgdG8ga2VlcCBpdCBpbiB0aGUgc2FtZSBwbGFjZSBpbiBtZW1vcnkuCgpbYGFzeW5jYF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RkL2tleXdvcmQuYXN5bmMuaHRtbApFMDczNEEgc3RhYmlsaXR5IGF0dHJpYnV0ZSBoYXMgYmVlbiB1c2VkIG91dHNpZGUgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzM0CiNbcnVzdGNfZGVwcmVjYXRlZChzaW5jZSA9ICJiIiwgcmVhc29uID0gInRleHQiKV0gLy8gaW52YWxpZAojW3N0YWJsZShmZWF0dXJlID0gImEiLCBzaW5jZSA9ICJiIildIC8vIGludmFsaWQKI1t1bnN0YWJsZShmZWF0dXJlID0gImIiLCBpc3N1ZSA9ICJub25lIildIC8vIGludmFsaWQKZm4gZm9vKCl7fQpgYGAKClRoZXNlIGF0dHJpYnV0ZXMgYXJlIG1lYW50IHRvIG9ubHkgYmUgdXNlZCBieSB0aGUgc3RhbmRhcmQgbGlicmFyeSBhbmQgYXJlCnJlamVjdGVkIGluIHlvdXIgb3duIGNyYXRlcy4KRTA3MzVUeXBlIHBhcmFtZXRlciBkZWZhdWx0cyBjYW5ub3QgdXNlIGBTZWxmYCBvbiBzdHJ1Y3RzLCBlbnVtcywgb3IgdW5pb25zLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDczNQpzdHJ1Y3QgRm9vPFggPSBCb3g8U2VsZj4+IHsKICAgIGZpZWxkMTogT3B0aW9uPFg+LAogICAgZmllbGQyOiBPcHRpb248WD4sCn0KLy8gZXJyb3I6IHR5cGUgcGFyYW1ldGVycyBjYW5ub3QgdXNlIGBTZWxmYCBpbiB0aGVpciBkZWZhdWx0cy4KYGBgCkUwNzM2YCNbdHJhY2tfY2FsbGVyXWAgYW5kIGAjW25ha2VkXWAgY2Fubm90IGJvdGggYmUgYXBwbGllZCB0byB0aGUgc2FtZSBmdW5jdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MzYKI1tuYWtlZF0KI1t0cmFja19jYWxsZXJdCmZuIGZvbygpIHt9CmBgYAoKVGhpcyBpcyBwcmltYXJpbHkgZHVlIHRvIEFCSSBpbmNvbXBhdGliaWxpdGllcyBiZXR3ZWVuIHRoZSB0d28gYXR0cmlidXRlcy4KU2VlIFtSRkMgMjA5MV0gZm9yIGRldGFpbHMgb24gdGhpcyBhbmQgb3RoZXIgbGltaXRhdGlvbnMuCgpbUkZDIDIwOTFdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8yMDkxLWlubGluZS1zZW1hbnRpYy5tZApFMDczN2AjW3RyYWNrX2NhbGxlcl1gIHJlcXVpcmVzIGZ1bmN0aW9ucyB0byBoYXZlIHRoZSBgIlJ1c3QiYCBBQkkgZm9yIGltcGxpY2l0bHkKcmVjZWl2aW5nIGNhbGxlciBsb2NhdGlvbi4gU2VlIFtSRkMgMjA5MV0gZm9yIGRldGFpbHMgb24gdGhpcyBhbmQgb3RoZXIKcmVzdHJpY3Rpb25zLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDczNwojW3RyYWNrX2NhbGxlcl0KZXh0ZXJuICJDIiBmbiBmb28oKSB7fQpgYGAKCltSRkMgMjA5MV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzIwOTEtaW5saW5lLXNlbWFudGljLm1kCkUwNzM5YCNbdHJhY2tfY2FsbGVyXWAgY2FuIG5vdCBiZSBhcHBsaWVkIG9uIHN0cnVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MzkKI1t0cmFja19jYWxsZXJdCnN0cnVjdCBCYXIgewogICAgYTogdTgsCn0KYGBgCgpbUkZDIDIwOTFdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8yMDkxLWlubGluZS1zZW1hbnRpYy5tZApFMDc0MEEgYHVuaW9uYCB3YXMgZGVjbGFyZWQgd2l0aCBmaWVsZHMgd2l0aCBkZXN0cnVjdG9ycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NDAKdW5pb24gVGVzdCB7CiAgICBhOiBBLCAvLyBlcnJvciEKfQoKI1tkZXJpdmUoRGVidWcpXQpzdHJ1Y3QgQShpMzIpOwoKaW1wbCBEcm9wIGZvciBBIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7IHByaW50bG4hKCJBIik7IH0KfQpgYGAKCkEgYHVuaW9uYCBjYW5ub3QgaGF2ZSBmaWVsZHMgd2l0aCBkZXN0cnVjdG9ycy4KRTA3NDFBIG5vbi1zdHJ1Y3R1cmFsLW1hdGNoIHR5cGUgd2FzIHVzZWQgYXMgdGhlIHR5cGUgb2YgYSBjb25zdCBnZW5lcmljIHBhcmFtZXRlci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NDEKIyFbZmVhdHVyZShjb25zdF9nZW5lcmljcyldCgpzdHJ1Y3QgQTsKCnN0cnVjdCBCPGNvbnN0IFg6IEE+OyAvLyBlcnJvciEKYGBgCgpPbmx5IHN0cnVjdHVyYWwtbWF0Y2ggdHlwZXMgKHRoYXQgaXMsIHR5cGVzIHRoYXQgZGVyaXZlIGBQYXJ0aWFsRXFgIGFuZCBgRXFgKQptYXkgYmUgdXNlZCBhcyB0aGUgdHlwZXMgb2YgY29uc3QgZ2VuZXJpYyBwYXJhbWV0ZXJzLgoKVG8gZml4IHRoZSBwcmV2aW91cyBjb2RlIGV4YW1wbGUsIHdlIGRlcml2ZSBgUGFydGlhbEVxYCBhbmQgYEVxYDoKCmBgYAojIVtmZWF0dXJlKGNvbnN0X2dlbmVyaWNzKV0KCiNbZGVyaXZlKFBhcnRpYWxFcSwgRXEpXSAvLyBXZSBkZXJpdmUgYm90aCB0cmFpdHMgaGVyZS4Kc3RydWN0IEE7CgpzdHJ1Y3QgQjxjb25zdCBYOiBBPjsgLy8gb2shCmBgYApFMDc0MlZpc2liaWxpdHkgaXMgcmVzdHJpY3RlZCB0byBhIG1vZHVsZSB3aGljaCBpc24ndCBhbiBhbmNlc3RvciBvZiB0aGUgY3VycmVudAppdGVtLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0MixlZGl0aW9uMjAxOApwdWIgbW9kIFNlYSB7fQoKcHViIChpbiBjcmF0ZTo6U2VhKSBzdHJ1Y3QgU2hhcms7IC8vIGVycm9yIQoKZm4gbWFpbigpIHt9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHdlIG5lZWQgdG8gbW92ZSB0aGUgYFNoYXJrYCBzdHJ1Y3QgaW5zaWRlIHRoZSBgU2VhYCBtb2R1bGU6CgpgYGBlZGl0aW9uMjAxOApwdWIgbW9kIFNlYSB7CiAgICBwdWIgKGluIGNyYXRlOjpTZWEpIHN0cnVjdCBTaGFyazsgLy8gb2shCn0KCmZuIG1haW4oKSB7fQpgYGAKCk9mIGNvdXJzZSwgeW91IGNhbiBkbyBpdCBhcyBsb25nIGFzIHRoZSBtb2R1bGUgeW91J3JlIHJlZmVycmluZyB0byBpcyBhbgphbmNlc3RvcjoKCmBgYGVkaXRpb24yMDE4CnB1YiBtb2QgRWFydGggewogICAgcHViIG1vZCBTZWEgewogICAgICAgIHB1YiAoaW4gY3JhdGU6OkVhcnRoKSBzdHJ1Y3QgU2hhcms7IC8vIG9rIQogICAgfQp9CgpmbiBtYWluKCkge30KYGBgCkUwNzQzVGhlIEMtdmFyaWFkaWMgdHlwZSBgLi4uYCBoYXMgYmVlbiBuZXN0ZWQgaW5zaWRlIGFub3RoZXIgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NDMKIyFbZmVhdHVyZShjX3ZhcmlhZGljKV0KCmZuIGZvbzIoeDogdTgsIHk6ICYuLi4pIHt9IC8vIGVycm9yIQpgYGAKCk9ubHkgZm9yZWlnbiBmdW5jdGlvbnMgY2FuIHVzZSB0aGUgQy12YXJpYWRpYyB0eXBlIChgLi4uYCkuIEluIHN1Y2ggZnVuY3Rpb25zLApgLi4uYCBtYXkgb25seSBvY2N1ciBub24tbmVzdGVkLiBUaGF0IGlzLCBgeTogJidhIC4uLmAgaXMgbm90IGFsbG93ZWQuCgpBIEMtdmFyaWFkaWMgdHlwZSBpcyB1c2VkIHRvIGdpdmUgYW4gdW5kZWZpbmVkIG51bWJlciBvZiBwYXJhbWV0ZXJzIHRvIGEgZ2l2ZW4KZnVuY3Rpb24gKGxpa2UgYHByaW50ZmAgaW4gQykuIFRoZSBlcXVpdmFsZW50IGluIFJ1c3Qgd291bGQgYmUgdG8gdXNlIG1hY3JvcwpkaXJlY3RseSAobGlrZSBgcHJpbnRsbiFgIGZvciBleGFtcGxlKS4KRTA3NDRBIGNvbnRyb2wtZmxvdyBleHByZXNzaW9uIHdhcyB1c2VkIGluc2lkZSBhIGNvbnN0IGNvbnRleHQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzQ0CmNvbnN0IF86IGkzMiA9IHsKICAgIGxldCBtdXQgeCA9IDA7CgogICAgZm9yIGkgaW4gMC4uNCB7IC8vIGVycm9yIQogICAgICAgIHggKz0gaTsKICAgIH0KfTsKYGBgCgpBdCB0aGUgbW9tZW50LCBgaWZgIGFuZCBgbWF0Y2hgLCBhcyB3ZWxsIGFzIHRoZSBsb29waW5nIGNvbnN0cnVjdHMgYGZvcmAsCmB3aGlsZWAsIGFuZCBgbG9vcGAsIGFyZSBmb3JiaWRkZW4gaW5zaWRlIGEgYGNvbnN0YCwgYHN0YXRpY2AsIG9yIGBjb25zdCBmbmAuCgpUaGlzIHdpbGwgYmUgYWxsb3dlZCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gaXMgbm90CnlldCBjb21wbGV0ZS4gU2VlIHRoZSB0cmFja2luZyBpc3N1ZSBmb3IgW2NvbmRpdGlvbmFsc10gb3IgW2xvb3BzXSBpbiBhIGNvbnN0CmNvbnRleHQgZm9yIHRoZSBjdXJyZW50IHN0YXR1cy4KCltjb25kaXRpb25hbHNdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzQ5MTQ2Cltsb29wc106IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvNTIwMDAKRTA3NDVUaGUgYWRkcmVzcyBvZiB0ZW1wb3JhcnkgdmFsdWUgd2FzIHRha2VuLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0NQojICMhW2ZlYXR1cmUocmF3X3JlZl9vcCldCmZuIHRlbXBfYWRkcmVzcygpIHsKICAgIGxldCBwdHIgPSAmcmF3IGNvbnN0IDI7IC8vIGVycm9yIQp9CmBgYAoKSW4gdGhpcyBleGFtcGxlLCBgMmAgaXMgZGVzdHJveWVkIHJpZ2h0IGFmdGVyIHRoZSBhc3NpZ25tZW50LCB3aGljaCBtZWFucyB0aGF0CmBwdHJgIG5vdyBwb2ludHMgdG8gYW4gdW5hdmFpbGFibGUgbG9jYXRpb24uCgpUbyBhdm9pZCB0aGlzIGVycm9yLCBmaXJzdCBiaW5kIHRoZSB0ZW1wb3JhcnkgdG8gYSBuYW1lZCBsb2NhbCB2YXJpYWJsZToKCmBgYAojICMhW2ZlYXR1cmUocmF3X3JlZl9vcCldCmZuIHRlbXBfYWRkcmVzcygpIHsKICAgIGxldCB2YWwgPSAyOwogICAgbGV0IHB0ciA9ICZyYXcgY29uc3QgdmFsOyAvLyBvayEKfQpgYGAKRTA3NDZBbiB1bmJveGVkIHRyYWl0IG9iamVjdCB3YXMgdXNlZCBhcyBhIHJldHVybiB2YWx1ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NDYKdHJhaXQgVCB7CiAgICBmbiBiYXIoJnNlbGYpOwp9CnN0cnVjdCBTKHVzaXplKTsKaW1wbCBUIGZvciBTIHsKICAgIGZuIGJhcigmc2VsZikge30KfQoKLy8gSGF2aW5nIHRoZSB0cmFpdCBgVGAgYXMgcmV0dXJuIHR5cGUgaXMgaW52YWxpZCBiZWNhdXNlCi8vIHVuYm94ZWQgdHJhaXQgb2JqZWN0cyBkbyBub3QgaGF2ZSBhIHN0YXRpY2FsbHkga25vd24gc2l6ZToKZm4gZm9vKCkgLT4gZHluIFQgeyAvLyBlcnJvciEKICAgIFMoNDIpCn0KYGBgCgpSZXR1cm4gdHlwZXMgY2Fubm90IGJlIGBkeW4gVHJhaXRgcyBhcyB0aGV5IG11c3QgYmUgYFNpemVkYC4KClRvIGF2b2lkIHRoZSBlcnJvciB0aGVyZSBhcmUgYSBjb3VwbGUgb2Ygb3B0aW9ucy4KCklmIHRoZXJlIGlzIGEgc2luZ2xlIHR5cGUgaW52b2x2ZWQsIHlvdSBjYW4gdXNlIFtgaW1wbCBUcmFpdGBdOgoKYGBgCiMgdHJhaXQgVCB7CiMgICAgIGZuIGJhcigmc2VsZik7CiMgfQojIHN0cnVjdCBTKHVzaXplKTsKIyBpbXBsIFQgZm9yIFMgewojICAgICBmbiBiYXIoJnNlbGYpIHt9CiMgfQovLyBUaGUgY29tcGlsZXIgd2lsbCBzZWxlY3QgYFModXNpemUpYCBhcyB0aGUgbWF0ZXJpYWxpemVkIHJldHVybiB0eXBlIG9mIHRoaXMKLy8gZnVuY3Rpb24sIGJ1dCBjYWxsZXJzIHdpbGwgb25seSBrbm93IHRoYXQgdGhlIHJldHVybiB0eXBlIGltcGxlbWVudHMgYFRgLgpmbiBmb28oKSAtPiBpbXBsIFQgeyAvLyBvayEKICAgIFMoNDIpCn0KYGBgCgpJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdHlwZXMgaW52b2x2ZWQsIHRoZSBvbmx5IHdheSB5b3UgY2FyZSB0byBpbnRlcmFjdCB3aXRoCnRoZW0gaXMgdGhyb3VnaCB0aGUgdHJhaXQncyBpbnRlcmZhY2UsIGFuZCBoYXZpbmcgdG8gcmVseSBvbiBkeW5hbWljIGRpc3BhdGNoCmlzIGFjY2VwdGFibGUsIHRoZW4geW91IGNhbiB1c2UgW3RyYWl0IG9iamVjdHNdIHdpdGggYEJveGAsIG9yIG90aGVyIGNvbnRhaW5lcgp0eXBlcyBsaWtlIGBSY2Agb3IgYEFyY2A6CgpgYGAKIyB0cmFpdCBUIHsKIyAgICAgZm4gYmFyKCZzZWxmKTsKIyB9CiMgc3RydWN0IFModXNpemUpOwojIGltcGwgVCBmb3IgUyB7CiMgICAgIGZuIGJhcigmc2VsZikge30KIyB9CnN0cnVjdCBPKCYnc3RhdGljIHN0cik7CmltcGwgVCBmb3IgTyB7CiAgICBmbiBiYXIoJnNlbGYpIHt9Cn0KCi8vIFRoaXMgbm93IHJldHVybnMgYSAidHJhaXQgb2JqZWN0IiBhbmQgY2FsbGVycyBhcmUgb25seSBiZSBhYmxlIHRvIGFjY2VzcwovLyBhc3NvY2lhdGVkIGl0ZW1zIGZyb20gYFRgLgpmbiBmb28oeDogYm9vbCkgLT4gQm94PGR5biBUPiB7IC8vIG9rIQogICAgaWYgeCB7CiAgICAgICAgQm94OjpuZXcoUyg0MikpCiAgICB9IGVsc2UgewogICAgICAgIEJveDo6bmV3KE8oInZhbCIpKQogICAgfQp9CmBgYAoKRmluYWxseSwgaWYgeW91IHdpc2ggdG8gc3RpbGwgYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG9yaWdpbmFsIHR5cGUsIHlvdSBjYW4KY3JlYXRlIGEgbmV3IGBlbnVtYCB3aXRoIGEgdmFyaWFudCBmb3IgZWFjaCB0eXBlOgoKYGBgCiMgdHJhaXQgVCB7CiMgICAgIGZuIGJhcigmc2VsZik7CiMgfQojIHN0cnVjdCBTKHVzaXplKTsKIyBpbXBsIFQgZm9yIFMgewojICAgICBmbiBiYXIoJnNlbGYpIHt9CiMgfQojIHN0cnVjdCBPKCYnc3RhdGljIHN0cik7CiMgaW1wbCBUIGZvciBPIHsKIyAgICAgZm4gYmFyKCZzZWxmKSB7fQojIH0KZW51bSBFIHsKICAgIFMoUyksCiAgICBPKE8pLAp9CgovLyBUaGUgY2FsbGVyIGNhbiBhY2Nlc3MgdGhlIG9yaWdpbmFsIHR5cGVzIGRpcmVjdGx5LCBidXQgaXQgbmVlZHMgdG8gbWF0Y2ggb24KLy8gdGhlIHJldHVybmVkIGBlbnVtIEVgLgpmbiBmb28oeDogYm9vbCkgLT4gRSB7CiAgICBpZiB4IHsKICAgICAgICBFOjpTKFMoNDIpKQogICAgfSBlbHNlIHsKICAgICAgICBFOjpPKE8oInZhbCIpKQogICAgfQp9CmBgYAoKWW91IGNhbiBldmVuIGltcGxlbWVudCB0aGUgYHRyYWl0YCBvbiB0aGUgcmV0dXJuZWQgYGVudW1gIHNvIHRoZSBjYWxsZXJzCipkb24ndCogaGF2ZSB0byBtYXRjaCBvbiB0aGUgcmV0dXJuZWQgdmFsdWUgdG8gaW52b2tlIHRoZSBhc3NvY2lhdGVkIGl0ZW1zOgoKYGBgCiMgdHJhaXQgVCB7CiMgICAgIGZuIGJhcigmc2VsZik7CiMgfQojIHN0cnVjdCBTKHVzaXplKTsKIyBpbXBsIFQgZm9yIFMgewojICAgICBmbiBiYXIoJnNlbGYpIHt9CiMgfQojIHN0cnVjdCBPKCYnc3RhdGljIHN0cik7CiMgaW1wbCBUIGZvciBPIHsKIyAgICAgZm4gYmFyKCZzZWxmKSB7fQojIH0KIyBlbnVtIEUgewojICAgICBTKFMpLAojICAgICBPKE8pLAojIH0KaW1wbCBUIGZvciBFIHsKICAgIGZuIGJhcigmc2VsZikgewogICAgICAgIG1hdGNoIHNlbGYgewogICAgICAgICAgICBFOjpTKHMpID0+IHMuYmFyKCksCiAgICAgICAgICAgIEU6Ok8obykgPT4gby5iYXIoKSwKICAgICAgICB9CiAgICB9Cn0KYGBgCgpJZiB5b3UgZGVjaWRlIHRvIHVzZSB0cmFpdCBvYmplY3RzLCBiZSBhd2FyZSB0aGF0IHRoZXNlIHJlbHkgb24KW2R5bmFtaWMgZGlzcGF0Y2hdLCB3aGljaCBoYXMgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBhcyB0aGUgY29tcGlsZXIgbmVlZHMKdG8gZW1pdCBjb2RlIHRoYXQgd2lsbCBmaWd1cmUgb3V0IHdoaWNoIG1ldGhvZCB0byBjYWxsICphdCBydW50aW1lKiBpbnN0ZWFkIG9mCmR1cmluZyBjb21waWxhdGlvbi4gVXNpbmcgdHJhaXQgb2JqZWN0cyB3ZSBhcmUgdHJhZGluZyBmbGV4aWJpbGl0eSBmb3IKcGVyZm9ybWFuY2UuCgpbYGltcGwgVHJhaXRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTAtMDItdHJhaXRzLmh0bWwjcmV0dXJuaW5nLXR5cGVzLXRoYXQtaW1wbGVtZW50LXRyYWl0cwpbdHJhaXQgb2JqZWN0c106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDE3LTAyLXRyYWl0LW9iamVjdHMuaHRtbCN1c2luZy10cmFpdC1vYmplY3RzLXRoYXQtYWxsb3ctZm9yLXZhbHVlcy1vZi1kaWZmZXJlbnQtdHlwZXMKW2R5bmFtaWMgZGlzcGF0Y2hdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxNy0wMi10cmFpdC1vYmplY3RzLmh0bWwjdHJhaXQtb2JqZWN0cy1wZXJmb3JtLWR5bmFtaWMtZGlzcGF0Y2gKRTA3NDdHZW5lcmljIGFyZ3VtZW50cyB3ZXJlIG5vdCBwcm92aWRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgY29ycmVzcG9uZGluZwpnZW5lcmljIHBhcmFtZXRlcnMgYXJlIGRlY2xhcmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0NwpzdHJ1Y3QgUzwnYSwgVD4oJidhIFQpOwoKdHlwZSBYID0gUzwoKSwgJ3N0YXRpYz47IC8vIGVycm9yOiB0aGUgdHlwZSBhcmd1bWVudCBpcyBwcm92aWRlZCBiZWZvcmUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsaWZldGltZSBhcmd1bWVudApgYGAKClRoZSBhcmd1bWVudCBvcmRlciBzaG91bGQgYmUgY2hhbmdlZCB0byBtYXRjaCB0aGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uCm9yZGVyLCBhcyBpbiB0aGUgZm9sbG93aW5nOgoKYGBgCnN0cnVjdCBTPCdhLCBUPigmJ2EgVCk7Cgp0eXBlIFggPSBTPCdzdGF0aWMsICgpPjsgLy8gb2sKYGBgCkUwNzQ4QSByYXcgc3RyaW5nIGlzbid0IGNvcnJlY3RseSB0ZXJtaW5hdGVkIGJlY2F1c2UgdGhlIHRyYWlsaW5nIGAjYCBjb3VudCBkb2Vzbid0Cm1hdGNoIGl0cyBsZWFkaW5nIGAjYCBjb3VudC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NDgKbGV0IGRvbHBoaW5zID0gciMjIkRvbHBoaW5zISIjOyAvLyBlcnJvciEKYGBgCgpUbyB0ZXJtaW5hdGUgYSByYXcgc3RyaW5nLCB5b3UgaGF2ZSB0byBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBgI2AgYXQgdGhlIGVuZAphcyBhdCB0aGUgYmVnaW5uaW5nLiBFeGFtcGxlOgoKYGBgCmxldCBkb2xwaGlucyA9IHIjIkRvbHBoaW5zISIjOyAvLyBPbmUgYCNgIGF0IHRoZSBiZWdpbm5pbmcsIG9uZSBhdCB0aGUgZW5kIHNvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGwgZ29vZCEKYGBgCkUwNzQ5QW4gaXRlbSB3YXMgYWRkZWQgb24gYSBuZWdhdGl2ZSBpbXBsLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0OQojICMhW2ZlYXR1cmUobmVnYXRpdmVfaW1wbHMpXQp0cmFpdCBNeVRyYWl0IHsKICAgIHR5cGUgRm9vOwp9CgppbXBsICFNeVRyYWl0IGZvciB1MzIgewogICAgdHlwZSBGb28gPSBpMzI7IC8vIGVycm9yIQp9CmBgYAoKTmVnYXRpdmUgaW1wbHMgYXJlIG5vdCBhbGxvd2VkIHRvIGhhdmUgYW55IGl0ZW1zLiBOZWdhdGl2ZSBpbXBscyBkZWNsYXJlIHRoYXQgYQp0cmFpdCBpcyAqKm5vdCoqIGltcGxlbWVudGVkIChhbmQgbmV2ZXIgd2lsbCBiZSkgYW5kIGhlbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8Kc3BlY2lmeSB0aGUgdmFsdWVzIGZvciB0cmFpdCBtZXRob2RzIG9yIG90aGVyIGl0ZW1zLgoKT25lIHdheSB0byBmaXggdGhpcyBpcyB0byByZW1vdmUgdGhlIGl0ZW1zIGluIG5lZ2F0aXZlIGltcGxzOgoKYGBgCiMgIyFbZmVhdHVyZShuZWdhdGl2ZV9pbXBscyldCnRyYWl0IE15VHJhaXQgewogICAgdHlwZSBGb287Cn0KCmltcGwgIU15VHJhaXQgZm9yIHUzMiB7fQpgYGAKRTA3NTBBIG5lZ2F0aXZlIGltcGwgd2FzIG1hZGUgZGVmYXVsdCBpbXBsLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc1MAojICMhW2ZlYXR1cmUobmVnYXRpdmVfaW1wbHMpXQojICMhW2ZlYXR1cmUoc3BlY2lhbGl6YXRpb24pXQp0cmFpdCBNeVRyYWl0IHsKICAgIHR5cGUgRm9vOwp9CgpkZWZhdWx0IGltcGwgIU15VHJhaXQgZm9yIHUzMiB7fSAvLyBlcnJvciEKIyBmbiBtYWluKCkge30KYGBgCgpOZWdhdGl2ZSBpbXBscyBjYW5ub3QgYmUgZGVmYXVsdCBpbXBscy4gQSBkZWZhdWx0IGltcGwgc3VwcGxpZXMgZGVmYXVsdCB2YWx1ZXMKZm9yIHRoZSBpdGVtcyB3aXRoaW4gdG8gYmUgdXNlZCBieSBvdGhlciBpbXBscywgd2hlcmVhcyBhIG5lZ2F0aXZlIGltcGwgZGVjbGFyZXMKdGhhdCB0aGVyZSBhcmUgbm8gb3RoZXIgaW1wbHMuIENvbWJpbmluZyBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlLgpFMDc1MVRoZXJlIGFyZSBib3RoIGEgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHRyYWl0IGltcGxlbWVudGF0aW9uIGZvciB0aGUgc2FtZSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc1MQp0cmFpdCBNeVRyYWl0IHt9CmltcGwgTXlUcmFpdCBmb3IgaTMyIHsgfQppbXBsICFNeVRyYWl0IGZvciBpMzIgeyB9IC8vIGVycm9yIQpgYGAKCk5lZ2F0aXZlIGltcGxlbWVudGF0aW9ucyBhcmUgYSBwcm9taXNlIHRoYXQgdGhlIHRyYWl0IHdpbGwgbmV2ZXIgYmUgaW1wbGVtZW50ZWQKZm9yIHRoZSBnaXZlbiB0eXBlcy4gVGhlcmVmb3JlLCBib3RoIGNhbm5vdCBleGlzdHMgYXQgdGhlIHNhbWUgdGltZS4KRTA3NTJUaGUgZW50cnkgcG9pbnQgb2YgdGhlIHByb2dyYW0gd2FzIG1hcmtlZCBhcyBgYXN5bmNgLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc1Mgphc3luYyBmbiBtYWluKCkgLT4gUmVzdWx0PCgpLCAoKT4geyAvLyBlcnJvciEKICAgIE9rKCgpKQp9CmBgYAoKYGZuIG1haW4oKWAgb3IgdGhlIHNwZWNpZmllZCBzdGFydCBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byBiZSBgYXN5bmNgLiBOb3QKaGF2aW5nIGEgY29ycmVjdCBhc3luYyBydW50aW1lIGxpYnJhcnkgc2V0dXAgbWF5IGNhdXNlIHRoaXMgZXJyb3IuIFRvIGZpeCBpdCwKZGVjbGFyZSB0aGUgZW50cnkgcG9pbnQgd2l0aG91dCBgYXN5bmNgOgoKYGBgCmZuIG1haW4oKSAtPiBSZXN1bHQ8KCksICgpPiB7IC8vIG9rIQogICAgT2soKCkpCn0KYGBgCkUwNzUzQW4gaW5uZXIgZG9jIGNvbW1lbnQgd2FzIHVzZWQgaW4gYW4gaW52YWxpZCBjb250ZXh0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc1MwpmbiBmb28oKSB7fQovLyEgZm9vCi8vIF4gZXJyb3IhCmZuIG1haW4oKSB7fQpgYGAKCklubmVyIGRvY3VtZW50IGNhbiBvbmx5IGJlIHVzZWQgYmVmb3JlIGl0ZW1zLiBGb3IgZXhhbXBsZToKCmBgYAovLyEgQSB3b3JraW5nIGNvbW1lbnQgYXBwbGllZCB0byB0aGUgbW9kdWxlIQpmbiBmb28oKSB7CiAgICAvLyEgQW5vdGhlciB3b3JraW5nIGNvbW1lbnQhCn0KZm4gbWFpbigpIHt9CmBgYAoKSW4gY2FzZSB5b3Ugd2FudCB0byBkb2N1bWVudCB0aGUgaXRlbSBmb2xsb3dpbmcgdGhlIGRvYyBjb21tZW50LCB5b3UgbWlnaHQgd2FudAp0byB1c2Ugb3V0ZXIgZG9jIGNvbW1lbnQ6CgpgYGAKLy8vIEkgYW0gYW4gb3V0ZXIgZG9jIGNvbW1lbnQKI1tkb2MgPSAiSSBhbSBhbHNvIGFuIG91dGVyIGRvYyBjb21tZW50ISJdCmZuIGZvbygpIHsKICAgIC8vIC4uLgp9CmBgYApFMDc1NEFuIG5vbi1hc2NpaSBpZGVudGlmaWVyIHdhcyB1c2VkIGluIGFuIGludmFsaWQgY29udGV4dC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNzU0CiMgIyFbZmVhdHVyZShub25fYXNjaWlfaWRlbnRzKV0KCm1vZCDFmcWzxZvFpTsgLy8gZXJyb3IhCgojW25vX21hbmdsZV0KZm4gxZnFs8WbxaUoKSB7fSAvLyBlcnJvciEKCmZuIG1haW4oKSB7fQpgYGAKCk5vbi1hc2NpaSBjYW4gYmUgdXNlZCBhcyBtb2R1bGUgbmFtZXMgaWYgaXQgaXMgaW5saW5lZCBvciBpZiBhIGAjW3BhdGhdYAphdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLiBGb3IgZXhhbXBsZToKCmBgYAojICMhW2ZlYXR1cmUobm9uX2FzY2lpX2lkZW50cyldCgptb2QgxZnFs8WbxaUgeyAvLyBvayEKICAgIGNvbnN0IElTX0dSRUFUOiBib29sID0gdHJ1ZTsKfQoKZm4gbWFpbigpIHt9CmBgYApFMDc1OEEgbXVsdGktbGluZSAoZG9jLSljb21tZW50IGlzIHVudGVybWluYXRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTgKLyogSSBhbSBub3QgdGVybWluYXRlZCEKYGBgCgpUaGUgc2FtZSBnb2VzIGZvciBkb2MgY29tbWVudHM6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTgKLyohIEkgYW0gbm90IHRlcm1pbmF0ZWQhCmBgYAoKWW91IG5lZWQgdG8gZW5kIHlvdXIgbXVsdGktbGluZSBjb21tZW50IHdpdGggYCovYCBpbiBvcmRlciB0byBmaXggdGhpcyBlcnJvcjoKCmBgYAovKiBJIGFtIHRlcm1pbmF0ZWQhICovCi8qISBJIGFtIGFsc28gdGVybWluYXRlZCEgKi8KYGBgCkUwNzU5UmV0dXJuIHR5cGUgaW52b2x2aW5nIGEgdHJhaXQgZGlkIG5vdCByZXF1aXJlIGAnc3RhdGljYCBsaWZldGltZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNzU5CnVzZSBzdGQ6OmZtdDo6RGVidWc7CgpmbiBmb28oeDogJmkzMikgLT4gaW1wbCBEZWJ1ZyB7IC8vIGVycm9yIQogICAgeAp9CgpmbiBiYXIoeDogJmkzMikgLT4gQm94PGR5biBEZWJ1Zz4geyAvLyBlcnJvciEKICAgIEJveDo6bmV3KHgpCn0KYGBgCgpBZGQgYCdzdGF0aWNgIHJlcXVpcmVtZW50IHRvIGZpeCB0aGVtOgoKYGBgY29tcGlsZV9mYWlsLEUwNzU5CiMgdXNlIHN0ZDo6Zm10OjpEZWJ1ZzsKZm4gZm9vKHg6ICZpMzIpIC0+IGltcGwgRGVidWcgKyAnc3RhdGljIHsgLy8gb2shCiAgICB4Cn0KCmZuIGJhcih4OiAmaTMyKSAtPiBCb3g8ZHluIERlYnVnICsgJ3N0YXRpYz4geyAvLyBvayEKICAgIEJveDo6bmV3KHgpCn0KYGBgCgpCb3RoIFtgZHluIFRyYWl0YF0gYW5kIFtgaW1wbCBUcmFpdGBdIGluIHJldHVybiB0eXBlcyBoYXZlIGEgYW4gaW1wbGljaXQKYCdzdGF0aWNgIHJlcXVpcmVtZW50LCBtZWFuaW5nIHRoYXQgdGhlIHZhbHVlIGltcGxlbWVudGluZyB0aGVtIHRoYXQgaXMgYmVpbmcKcmV0dXJuZWQgaGFzIHRvIGJlIGVpdGhlciBhIGAnc3RhdGljYCBib3Jyb3cgb3IgYW4gb3duZWQgdmFsdWUuCgpJbiBvcmRlciB0byBjaGFuZ2UgdGhlIHJlcXVpcmVtZW50IGZyb20gYCdzdGF0aWNgIHRvIGJlIGEgbGlmZXRpbWUgZGVyaXZlZCBmcm9tCml0cyBhcmd1bWVudHMsIHlvdSBjYW4gYWRkIGFuIGV4cGxpY2l0IGJvdW5kLCBlaXRoZXIgdG8gYW4gYW5vbnltb3VzIGxpZmV0aW1lCmAnX2Agb3Igc29tZSBhcHByb3ByaWF0ZSBuYW1lZCBsaWZldGltZS4KCmBgYAojIHVzZSBzdGQ6OmZtdDo6RGVidWc7CmZuIGZvbyh4OiAmaTMyKSAtPiBpbXBsIERlYnVnICsgJ18gewogICAgeAp9CmZuIGJhcih4OiAmaTMyKSAtPiBCb3g8ZHluIERlYnVnICsgJ18+IHsKICAgIEJveDo6bmV3KHgpCn0KYGBgCgpUaGVzZSBhcmUgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIGV4cGxpY2l0IGxpZmV0aW1lIGFubm90YXRpb25zOgoKYGBgCiMgdXNlIHN0ZDo6Zm10OjpEZWJ1ZzsKZm4gZm9vPCdhPih4OiAmJ2EgaTMyKSAtPiBpbXBsIERlYnVnICsgJ2EgewogICAgeAp9CmZuIGJhcjwnYT4oeDogJidhIGkzMikgLT4gQm94PGR5biBEZWJ1ZyArICdhPiB7CiAgICBCb3g6Om5ldyh4KQp9CmBgYAoKW2BkeW4gVHJhaXRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTctMDItdHJhaXQtb2JqZWN0cy5odG1sI3VzaW5nLXRyYWl0LW9iamVjdHMtdGhhdC1hbGxvdy1mb3ItdmFsdWVzLW9mLWRpZmZlcmVudC10eXBlcwpbYGltcGwgVHJhaXRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTAtMDItdHJhaXRzLmh0bWwjcmV0dXJuaW5nLXR5cGVzLXRoYXQtaW1wbGVtZW50LXRyYWl0cwpFMDc2MGBhc3luYyBmbmAvYGltcGwgdHJhaXRgIHJldHVybiB0eXBlIGNhbm5vdCBjb250YWluIGEgcHJvamVjdGlvbgpvciBgU2VsZmAgdGhhdCByZWZlcmVuY2VzIGxpZmV0aW1lcyBmcm9tIGEgcGFyZW50IHNjb3BlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2MCxlZGl0aW9uMjAxOApzdHJ1Y3QgUzwnYT4oJidhIGkzMik7CgppbXBsPCdhPiBTPCdhPiB7CiAgICBhc3luYyBmbiBuZXcoaTogJidhIGkzMikgLT4gU2VsZiB7CiAgICAgICAgUygmMjIpCiAgICB9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciB3ZSBuZWVkIHRvIHNwZWxsIG91dCBgU2VsZmAgdG8gYFM8J2E+YDoKCmBgYGVkaXRpb24yMDE4CnN0cnVjdCBTPCdhPigmJ2EgaTMyKTsKCmltcGw8J2E+IFM8J2E+IHsKICAgIGFzeW5jIGZuIG5ldyhpOiAmJ2EgaTMyKSAtPiBTPCdhPiB7CiAgICAgICAgUygmMjIpCiAgICB9Cn0KYGBgCgpUaGlzIHdpbGwgYmUgYWxsb3dlZCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsCmJ1dCB0aGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHlldCBjb21wbGV0ZS4KU2VlIHRoZSBbaXNzdWUtNjE5NDldIGZvciB0aGlzIGxpbWl0YXRpb24uCgpbaXNzdWUtNjE5NDldOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzYxOTQ5CkUwNzYxTXVsdGlwbGUgY2FuZGlkYXRlIGZpbGVzIHdlcmUgZm91bmQgZm9yIGFuIG91dC1vZi1saW5lIG1vZHVsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBydXN0Ci8vIGZpbGU6IGFtYmlndW91c19tb2R1bGUvbW9kLnJzCgpmbiBmb28oKSB7fQpgYGAKCmBgYHJ1c3QKLy8gZmlsZTogYW1iaWd1b3VzX21vZHVsZS5ycwoKZm4gZm9vKCkge30KYGBgCgpgYGBpZ25vcmUgKG11bHRpcGxlIHNvdXJjZSBmaWxlcyByZXF1aXJlZCBmb3IgY29tcGlsZV9mYWlsKQptb2QgYW1iaWd1b3VzX21vZHVsZTsgLy8gZXJyb3I6IGZpbGUgZm9yIG1vZHVsZSBgYW1iaWd1b3VzX21vZHVsZWAKICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGF0IGJvdGggYW1iaWd1b3VzX21vZHVsZS5ycyBhbmQKICAgICAgICAgICAgICAgICAgICAgIC8vIGFtYmlndW91c19tb2R1bGUucnMvbW9kLnJzCgpmbiBtYWluKCkge30KYGBgCgpQbGVhc2UgcmVtb3ZlIHRoaXMgYW1iaWd1aXR5IGJ5IGRlbGV0aW5nL3JlbmFtaW5nIG9uZSBvZiB0aGUgY2FuZGlkYXRlIGZpbGVzLgpFMDc2MkEgY2hhcmFjdGVyIGxpdGVyYWwgd2Fzbid0IGVuZGVkIHdpdGggYSBxdW90ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NjIKc3RhdGljIEM6IGNoYXIgPSAn4pePOyAvLyBlcnJvciEKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgYWRkIHRoZSBtaXNzaW5nIHF1b3RlOgoKYGBgCnN0YXRpYyBDOiBjaGFyID0gJ+KXjyc7IC8vIG9rIQpgYGAKRTA3NjNBIGJ5dGUgY29uc3RhbnQgd2Fzbid0IGNvcnJlY3RseSBlbmRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NjMKbGV0IGMgPSBiJ2E7IC8vIGVycm9yIQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBhZGQgdGhlIG1pc3NpbmcgcXVvdGU6CgpgYGAKbGV0IGMgPSBiJ2EnOyAvLyBvayEKYGBgCkUwNzY0TXV0YWJsZSByZWZlcmVuY2VzIChgJm11dGApIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uc3RhbnQgZnVuY3Rpb25zLCBub3Qgc3RhdGljcwpvciBjb25zdGFudHMuIFRoaXMgbGltaXRhdGlvbiBleGlzdHMgdG8gcHJldmVudCB0aGUgY3JlYXRpb24gb2YgY29uc3RhbnRzIHRoYXQKaGF2ZSBhIG11dGFibGUgcmVmZXJlbmNlIGluIHRoZWlyIGZpbmFsIHZhbHVlLiBJZiB5b3UgaGFkIGEgY29uc3RhbnQgb2YgYCZtdXQKaTMyYCB0eXBlLCB5b3UgY291bGQgbW9kaWZ5IHRoZSB2YWx1ZSB0aHJvdWdoIHRoYXQgcmVmZXJlbmNlLCBtYWtpbmcgdGhlCmNvbnN0YW50IGVzc2VudGlhbGx5IG11dGFibGUuIFdoaWxlIHRoZXJlIGNvdWxkIGJlIGEgbW9yZSBmaW5lLWdyYWluZWQgc2NoZW1lCmluIHRoZSBmdXR1cmUgdGhhdCBhbGxvd3MgbXV0YWJsZSByZWZlcmVuY2VzIGlmIHRoZXkgYXJlIG5vdCAibGVha2VkIiB0byB0aGUKZmluYWwgdmFsdWUsIGEgbW9yZSBjb25zZXJ2YXRpdmUgYXBwcm9hY2ggd2FzIGNob3NlbiBmb3Igbm93LiBgY29uc3QgZm5gIGRvIG5vdApoYXZlIHRoaXMgcHJvYmxlbSwgYXMgdGhlIGJvcnJvdyBjaGVja2VyIHdpbGwgcHJldmVudCB0aGUgYGNvbnN0IGZuYCBmcm9tCnJldHVybmluZyBuZXcgbXV0YWJsZSByZWZlcmVuY2VzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2NAojIVtmZWF0dXJlKGNvbnN0X2ZuKV0KIyFbZmVhdHVyZShjb25zdF9tdXRfcmVmcyldCgpmbiBtYWluKCkgewogICAgY29uc3QgT0hfTk86ICYnc3RhdGljIG11dCB1c2l6ZSA9ICZtdXQgMTsgLy8gZXJyb3IhCn0KYGBgCgpSZW1lbWJlcjogeW91IGNhbm5vdCB1c2UgYSBmdW5jdGlvbiBjYWxsIGluc2lkZSBhIGNvbnN0YW50IG9yIHN0YXRpYy4gSG93ZXZlciwKeW91IGNhbiB0b3RhbGx5IHVzZSBpdCBpbiBjb25zdGFudCBmdW5jdGlvbnM6CgpgYGAKIyFbZmVhdHVyZShjb25zdF9mbildCiMhW2ZlYXR1cmUoY29uc3RfbXV0X3JlZnMpXQoKY29uc3QgZm4gZm9vKHg6IHVzaXplKSAtPiB1c2l6ZSB7CiAgICBsZXQgbXV0IHkgPSAxOwogICAgbGV0IHogPSAmbXV0IHk7CiAgICAqeiArPSB4OwogICAgeQp9CgpmbiBtYWluKCkgewogICAgY29uc3QgRk9POiB1c2l6ZSA9IGZvbygxMCk7IC8vIG9rIQp9CmBgYApFMDc2NUEgZG91YmxlIHF1b3RlIHN0cmluZyAoYCJgKSB3YXMgbm90IHRlcm1pbmF0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzY1CmxldCBzID0gIjsgLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGFkZCB0aGUgbWlzc2luZyBkb3VibGUgcXVvdGUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nOgoKYGBgCmxldCBzID0gIiI7IC8vIG9rIQpgYGAKRTA3NjZBIGRvdWJsZSBxdW90ZSBieXRlIHN0cmluZyAoYGIiYCkgd2FzIG5vdCB0ZXJtaW5hdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2NgpsZXQgcyA9IGIiOyAvLyBlcnJvciEKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgYWRkIHRoZSBtaXNzaW5nIGRvdWJsZSBxdW90ZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmc6CgpgYGAKbGV0IHMgPSBiIiI7IC8vIG9rIQpgYGAKRTA3NjdBbiB1bnJlYWNoYWJsZSBsYWJlbCB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NjcKJ2E6IGxvb3AgewogICAgfHwgewogICAgICAgIGxvb3AgeyBicmVhayAnYSB9IC8vIGVycm9yOiB1c2Ugb2YgdW5yZWFjaGFibGUgbGFiZWwgYCdhYAogICAgfTsKfQpgYGAKCkVuc3VyZSB0aGF0IHRoZSBsYWJlbCBpcyB3aXRoaW4gc2NvcGUuIExhYmVscyBhcmUgbm90IHJlYWNoYWJsZSB0aHJvdWdoCmZ1bmN0aW9ucywgY2xvc3VyZXMsIGFzeW5jIGJsb2NrcyBvciBtb2R1bGVzLiBFeGFtcGxlOgoKYGBgCidhOiBsb29wIHsKICAgIGJyZWFrICdhOyAvLyBvayEKfQpgYGAKRTA3NjhBIG51bWJlciBpbiBhIG5vbi1kZWNpbWFsIGJhc2UgaGFzIG5vIGRpZ2l0cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NjgKbGV0IHM6IGkzMiA9IDBiOyAvLyBlcnJvciEKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgYWRkIHRoZSBtaXNzaW5nIGRpZ2l0czoKCmBgYApsZXQgczogaTMyID0gMGIxOyAvLyBvayEKYGBgCkUwNzY5QSB0dXBsZSBzdHJ1Y3Qgb3IgdHVwbGUgdmFyaWFudCB3YXMgdXNlZCBpbiBhIHBhdHRlcm4gYXMgaWYgaXQgd2VyZSBhCnN0cnVjdCBvciBzdHJ1Y3QgdmFyaWFudC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NjkKZW51bSBFIHsKICAgIEEoaTMyKSwKfQpsZXQgZSA9IEU6OkEoNDIpOwptYXRjaCBlIHsKICAgIEU6OkEgeyBudW1iZXIgfSA9PiBwcmludGxuISgie30iLCB4KSwKfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCB5b3UgY2FuIHVzZSB0aGUgdHVwbGUgcGF0dGVybjoKCmBgYAojIGVudW0gRSB7CiMgICAgIEEoaTMyKSwKIyB9CiMgbGV0IGUgPSBFOjpBKDQyKTsKbWF0Y2ggZSB7CiAgICBFOjpBKG51bWJlcikgPT4gcHJpbnRsbiEoInt9IiwgbnVtYmVyKSwKfQpgYGAKCkFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWxzbyB1c2UgdGhlIHN0cnVjdCBwYXR0ZXJuIGJ5IHVzaW5nIHRoZSBjb3JyZWN0CmZpZWxkIG5hbWVzIGFuZCBiaW5kaW5nIHRoZW0gdG8gbmV3IGlkZW50aWZpZXJzOgoKYGBgCiMgZW51bSBFIHsKIyAgICAgQShpMzIpLAojIH0KIyBsZXQgZSA9IEU6OkEoNDIpOwptYXRjaCBlIHsKICAgIEU6OkEgeyAwOiBudW1iZXIgfSA9PiBwcmludGxuISgie30iLCBudW1iZXIpLAp9CmBgYApFMDc3MFRoZSB0eXBlIG9mIGEgY29uc3QgcGFyYW1ldGVyIHJlZmVyZW5jZXMgb3RoZXIgZ2VuZXJpYyBwYXJhbWV0ZXJzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc3MAojIVtmZWF0dXJlKGNvbnN0X2dlbmVyaWNzKV0KZm4gZm9vPFQsIGNvbnN0IE46IFQ+KCkge30gLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHVzZSBhIGNvbmNyZXRlIHR5cGUgZm9yIHRoZSBjb25zdCBwYXJhbWV0ZXI6CgpgYGAKIyFbZmVhdHVyZShjb25zdF9nZW5lcmljcyldCmZuIGZvbzxULCBjb25zdCBOOiB1c2l6ZT4oKSB7fQpgYGAKRTA3NzFBIG5vbi1gJ3N0YXRpY2AgbGlmZXRpbWUgd2FzIHVzZWQgaW4gYSBjb25zdCBnZW5lcmljLiBUaGlzIGlzIGN1cnJlbnRseSBub3QKYWxsb3dlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzEKIyFbZmVhdHVyZShjb25zdF9nZW5lcmljcyldCgpmbiBmdW5jdGlvbl93aXRoX3N0cjwnYSwgY29uc3QgU1RSSU5HOiAmJ2Egc3RyPigpIHt9IC8vIGVycm9yIQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCB0aGUgbGlmZXRpbWUgaW4gdGhlIGNvbnN0IGdlbmVyaWMgbmVlZCB0byBiZSBjaGFuZ2VkIHRvCmAnc3RhdGljYDoKCmBgYAojIVtmZWF0dXJlKGNvbnN0X2dlbmVyaWNzKV0KCmZuIGZ1bmN0aW9uX3dpdGhfc3RyPGNvbnN0IFNUUklORzogJidzdGF0aWMgc3RyPigpIHt9IC8vIG9rIQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW0dpdEh1YiBpc3N1ZSAjNzQwNTJdLgoKW0dpdEh1YiBpc3N1ZSAjNzQwNTJdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzc0MDUyCkUwMTgzRTAyMDhFMDIxMkUwMjI3RTAyNzlFMDI4MEUwMzExRTAzMTNFMDMxNEUwMzE1RTAzMTZFMDMyMEUwMzc3RTA0NTdFMDQ2MEUwNDYxRTA0NjJFMDQ2NEUwNDY1RTA0NzJFMDQ3M0UwNDc0RTA0NzVFMDQ3NkUwNDc5RTA0ODBFMDQ4MUUwNDgyRTA0ODNFMDQ4NEUwNDg1RTA0ODZFMDQ4N0UwNDg4RTA0ODlFMDQ5MEUwNDk4RTA1MTRFMDUxOUUwNTIxRTA1MjNFMDU0MkUwNTQzRTA1NDRFMDU0NUUwNTQ2RTA1NDdFMDU0OUUwNTUzRTA2MjVFMDYyOUUwNjMwRTA2MzJFMDY0MEUwNjY3RTA3MTFFMDcxN0UwNzIyRTA3MjZFMDc1NUUwNzU2RTA3NTdFMDc3MgAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGsDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAsQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABtBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACkCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAARwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABeBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAE8BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAhAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABJAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALcCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAhwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA3BAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHACAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA1wIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC9AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPMCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAsgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC+AwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAM0EAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA7h4AAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC+AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADoBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA2QEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABTAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOQCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA3AIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB0AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADIBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAADwMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABZAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHADAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAADQQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAALAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAD8CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAfwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAASAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEgBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAoQQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAvAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHIEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAJwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADvAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALEBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA6gEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC+AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAF0DAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA+wIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACSAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJIBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAlgMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACaAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMkBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAcQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAsAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAKAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAQBwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAC4FAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAhAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAChAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADcDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA+QQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACcAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJIEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAvQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADzAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFABAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAVwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAADAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACsBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAkQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAmAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFIBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA1gEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABTAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGYKAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAiQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABDAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEgDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA6AIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABdAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFICAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAWQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABcBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAJwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADXAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAN8CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAACAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA/BAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAN4CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAuwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACCAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOABAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA0gEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAzAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJYBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAXQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACrAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANoCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA1AEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACjCwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKgLAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA0wUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACaAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAkDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAgAMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABKBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGwDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAACAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADvAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABwCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAQwQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADNAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAH4EAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA3gMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACSAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGMBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAWwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB5AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAmwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABYAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAF0CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAVAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADDAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIoCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAZQMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACOAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIUBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAqgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADkAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKcBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAnAcAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADhAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADcCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAcwgAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACvAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOoHAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA7QMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABDBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABADAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAcgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA8AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAH8DAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA6gcAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA8AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANsEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAtQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABAAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJUCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAbwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACXAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHYCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAWwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACQAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGQBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAATgMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC5AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKkCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAkQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAMAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAvgQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB7AwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALwCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA3QIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA4BgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFEGAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAGgcAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB6BQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKoEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAMgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB/AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAG8BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAGQ0AAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADFAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAH0BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA2QIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABuBgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAswUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADcAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEABAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAcQUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACgBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJUFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA3AIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACXBgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHICAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAhAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAD3AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHQCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAALQQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABhAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOYDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAcAQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABXAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFYCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAqQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA0BAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGYEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAALgQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAD0BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAzQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACXAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADoBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAARgUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACpAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOUCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAbgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAbBgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMQBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA2wEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAuAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPkCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAjAMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACPAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMQBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA4AIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB4AwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFgBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAJwQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABJAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAIwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABmAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANMBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAXQMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABxAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPMCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA5gMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABNAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAB0DAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACIAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFYDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA/QEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADCAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA/AMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA3BwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADgDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA9QUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAD5CAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAcGAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA9gUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC7CgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAI4DAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAfgkAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABjAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHICAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAGgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAClAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAO8AAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA6gUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC5AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANgFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAALwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAANBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABkEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAASgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADaAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMQBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA/QEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADmAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALkCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAYAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACzAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAKQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABsAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEECAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA6wQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADoAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHMBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAaQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACEAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANYBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAagEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADWAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKUBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAApAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAASAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAQDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAvwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACvAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMkBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAPAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABEAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFwBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAADgMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACSAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFAFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAlAMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADYAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKIBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA9wEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAEAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFMCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAoQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABTAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACADAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAoQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAIAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALkBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAYwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABrAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABQCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAACwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABgAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJYKAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAADwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAD9AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJMBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAbwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABwAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAH8CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAALwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABTAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEUBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA+QAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAwAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPsBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAngIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA9AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIIDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAsAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADiAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAG8DAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAcQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB9AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABwEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA9gIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAGAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACYFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAkwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB4BAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAF8CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAANAMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACWAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAG4JAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAOAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACiAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPABAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAuAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACpAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAK4AAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA5AAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAPBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIUFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAXwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADLAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAG4BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAgAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABpAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOgAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAFQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA0AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHgEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAHAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACoAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGsBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAjQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC7AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALsBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAArAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABJAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAO0BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAMQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACOAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKsAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC1AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJkCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAjQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABXBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAI0FAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAtwQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACDAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANEBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAGwMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC7AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADkCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAkwQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA3BAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAM8AAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAjgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADgAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKUBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAArQcAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADxAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACECAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAgwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAHBwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAM4BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAKgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABZCgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALcAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAARgQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACKAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJEBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAADQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACiAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOoBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAfgcAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACkBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACsDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADPAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOEDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAkQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAHAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIUBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAVgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADmAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABwBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAGQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABeAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAA0CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAmwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADqAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIgMAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA2QEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC6AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEYCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA1AEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABnAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKYBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAGAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC9AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFkBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAzwUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACgAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAB4CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA1wAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC8AAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIgEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADoAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAF0BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAywAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACKAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAD0BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAGAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGMIAAAQA8f8AAAAAAAAAAAAAAAAAAAAAAAAAAAMAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMALQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMALgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMANQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMANwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMARQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMARgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMASQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMASgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMATQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMATgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMATwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAVwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAZgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAaQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAagAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAawAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAbQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAdQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAewAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAgQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAggAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAgwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAigAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAiwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAjQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAjwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAlQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAlwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAmwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAnQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAngAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAogAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAowAAAAAAAAAAAAAAAAAAAAAAAAAAAAMApAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMApQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMApgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMApwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAqQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAqwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMArAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMArQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMArgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMArwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAswAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAuQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAugAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAwwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAxQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAxwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAyQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAygAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAywAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAzQAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAzgAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA0QAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA1gAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA2QAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA3wAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA4QAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA4gAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA5QAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA5gAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA5wAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA6gAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA6wAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA7QAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA9QAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA+QAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA/QAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAMA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMABAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMABQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMABgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMABwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMACAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMACQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMACgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMACwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMADAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMADQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMADgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMADwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAFAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAFQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAFgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAFwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAGAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAGQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAGgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAGwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAIQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAIgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAIwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAJAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAJQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAJgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAJwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAKAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAKQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAKgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAKwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMALAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMALQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMALgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMALwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMANAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMANQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMANgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMANwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAPAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAPQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAPgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAPwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMARAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMARQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMARgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMARwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMASAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMASQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMASgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMASwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMATAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMATQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMATgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMATwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAVAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAVQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAVgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAVwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAYAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAYQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAYgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAYwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAZAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAZQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAZgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAZwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAaAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAaQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAagEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAawEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAbAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAbQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAbgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAbwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAcAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAcQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAcgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAcwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAdAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAdQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAdgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAdwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAeAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAeQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAegEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAewEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAfAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAfQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAfgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAfwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAgQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAggEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAgwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAhAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAhQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAhgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAhwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAiAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAiQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAigEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAiwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAjAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAjQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAjgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAjwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAlAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAlQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAlgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAlwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAmAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAmQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAmgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAmwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAnAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAnQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAngEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAnwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAoAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAoQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAogEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAowEAAAAAAAAAAAAAAAAAAAAAAAAAAAMApAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMApQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMApgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMApwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAqAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAqQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAqgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAqwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMArAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMArQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMArgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMArwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAsAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAsQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAsgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAswEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAuAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAuQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAugEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAuwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAwAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAwQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAwgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAwwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAxAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAxQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAxgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAxwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAyAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAyQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAygEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAywEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAzAEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAzQEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAzgEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAzwEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA0AEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA0QEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA0gEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA0wEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA1AEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA1QEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA1gEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA1wEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA2AEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA2QEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA2gEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA2wEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA3AEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA3QEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA3gEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA3wEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA4AEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA4QEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA4gEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA4wEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA5AEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA5QEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA5gEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA5wEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA6AEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA6QEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA6gEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA6wEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA7AEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA7QEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA7gEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA7wEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA8AEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA8QEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA8gEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA8wEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA9AEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA9QEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA9gEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA9wEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA+AEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA+QEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA+gEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA+wEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA/AEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA/QEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA/gEAAAAAAAAAAAAAAAAAAAAAAAAAAAMA/wEAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMABAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMABQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMABgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMABwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMACAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMACQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMACgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMACwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMADAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMADQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMADgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMADwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAFAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAFQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAFgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAFwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAGAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAGQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAGgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAGwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAIQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAIgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAIwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAJAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAJQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAJgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAJwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAKAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAKQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAKgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAKwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMALAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMALQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMALgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMALwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMANAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMANQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMANgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMANwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAPAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAPQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAPgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAPwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMARAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMARQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMARgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMARwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMASAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMASQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMASgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMASwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMATAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMATQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMATgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMATwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAVAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAVQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAVgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAVwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAYAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAYQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAYgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAYwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAZAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAZQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAZgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAZwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAaAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAaQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAagIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAawIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAbAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAbQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAbgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAbwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAcAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAcQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAcgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAcwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAdAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAdQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAdgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAdwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAeAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAeQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAegIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAewIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAfAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAfQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAfgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAfwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAgQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAggIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAgwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAhAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAhQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAhgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAhwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAiAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAiQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAigIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAiwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAjAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAjQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAjgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAjwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAlAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAlQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAlgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAlwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAmAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAmQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAmgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAmwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAnAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAnQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAngIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAnwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAoAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAoQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAogIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAowIAAAAAAAAAAAAAAAAAAAAAAAAAAAMApAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMApQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMApgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMApwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAqAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAqQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAqgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAqwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMArAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMArQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMArgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMArwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAsAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAsQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAsgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAswIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAuAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAuQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAugIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAuwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAwAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAwQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAwgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAwwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAxAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAxQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAxgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAxwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAyAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAyQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAygIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAywIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAzAIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAzQIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAzgIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAzwIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA0AIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA0QIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA0gIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA0wIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA1AIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA1QIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA1gIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA1wIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA2AIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA2QIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA2gIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA2wIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA3AIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA3QIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA3gIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA3wIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA4AIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA4QIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA4gIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA4wIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA5AIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA5QIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA5gIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA5wIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA6AIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA6QIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA6gIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA6wIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA7AIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA7QIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA7gIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA7wIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA8AIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA8QIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA8gIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA8wIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA9AIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA9QIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA9gIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA9wIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA+AIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA+QIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA+gIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA+wIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA/AIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA/QIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA/gIAAAAAAAAAAAAAAAAAAAAAAAAAAAMA/wIAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMABAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMABgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMABwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMACAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMACQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMACgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMACwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMADAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMADQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMADgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMADwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAEwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAFAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAFQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAFgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAFwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAGAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAGQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAGgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAGwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAHwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAIAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAIQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAIgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAIwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAJAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAJQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAJgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAJwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAKAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAKQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAKgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAKwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMALAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMALQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMALgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMALwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAMwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMANAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMANQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMANgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMANwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAOwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAPAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAPQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAPgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAPwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAQwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMARAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMARQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMARgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMARwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMASAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMASQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMASgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMASwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMATAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMATQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMATgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMATwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAUwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAVAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAVQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAVgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAVwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAXwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAYAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAYQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAYgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAYwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAZAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAZQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAZgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAZwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAaAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAaQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAagMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAawMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAbAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAbQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAbgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAbwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAcAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAcQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAcgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAcwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAdAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAdQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAdgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAdwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAeAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAeQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAegMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAewMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAfAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAfQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAfgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAfwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAgAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAgQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAggMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAgwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAhAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAhQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAhgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAhwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAiAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAiQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAigMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAiwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAjAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAjQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAjgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAjwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAlAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAlQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAlgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAlwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAmAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAmQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAmgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAmwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAnAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAnQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAngMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAnwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAoAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAoQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAogMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAowMAAAAAAAAAAAAAAAAAAAAAAAAAAAMApAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMApQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMApgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMApwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAqAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAqQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAqgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAqwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMArAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMArQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMArgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMArwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAsAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAsQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAsgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAswMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtgMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAtwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAuAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAuQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAugMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAuwMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvAMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvQMAAAAAAAAAAAAAAAAAAAAAAAAAAAMAvgMAAAAAAAAAAAAAAAAAAAAAOQAAABEAwAMAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAAAAAAAAAAAEAAAAAAAAAABAAAAAwAAAAAAAAAAAAAAIAAAAAAAAAABAAAABAAAAAAAAAAAAAAAMAAAAAAAAAABAAAABQAAAAAAAAAAAAAAQAAAAAAAAAABAAAABgAAAAAAAAAAAAAAUAAAAAAAAAABAAAABwAAAAAAAAAAAAAAYAAAAAAAAAABAAAACAAAAAAAAAAAAAAAcAAAAAAAAAABAAAACQAAAAAAAAAAAAAAgAAAAAAAAAABAAAACgAAAAAAAAAAAAAAkAAAAAAAAAABAAAACwAAAAAAAAAAAAAAoAAAAAAAAAABAAAADAAAAAAAAAAAAAAAsAAAAAAAAAABAAAADQAAAAAAAAAAAAAAwAAAAAAAAAABAAAADgAAAAAAAAAAAAAA0AAAAAAAAAABAAAADwAAAAAAAAAAAAAA4AAAAAAAAAABAAAAEAAAAAAAAAAAAAAA8AAAAAAAAAABAAAAEQAAAAAAAAAAAAAAAAEAAAAAAAABAAAAEgAAAAAAAAAAAAAAEAEAAAAAAAABAAAAEwAAAAAAAAAAAAAAIAEAAAAAAAABAAAAFAAAAAAAAAAAAAAAMAEAAAAAAAABAAAAFQAAAAAAAAAAAAAAQAEAAAAAAAABAAAAFgAAAAAAAAAAAAAAUAEAAAAAAAABAAAAFwAAAAAAAAAAAAAAYAEAAAAAAAABAAAAGAAAAAAAAAAAAAAAcAEAAAAAAAABAAAAGQAAAAAAAAAAAAAAgAEAAAAAAAABAAAAGgAAAAAAAAAAAAAAkAEAAAAAAAABAAAAGwAAAAAAAAAAAAAAoAEAAAAAAAABAAAAHAAAAAAAAAAAAAAAsAEAAAAAAAABAAAAHQAAAAAAAAAAAAAAwAEAAAAAAAABAAAAHgAAAAAAAAAAAAAA0AEAAAAAAAABAAAAHwAAAAAAAAAAAAAA4AEAAAAAAAABAAAAIAAAAAAAAAAAAAAA8AEAAAAAAAABAAAAIQAAAAAAAAAAAAAAAAIAAAAAAAABAAAAIgAAAAAAAAAAAAAAEAIAAAAAAAABAAAAIwAAAAAAAAAAAAAAIAIAAAAAAAABAAAAJAAAAAAAAAAAAAAAMAIAAAAAAAABAAAAJQAAAAAAAAAAAAAAQAIAAAAAAAABAAAAJgAAAAAAAAAAAAAAUAIAAAAAAAABAAAAJwAAAAAAAAAAAAAAYAIAAAAAAAABAAAAKAAAAAAAAAAAAAAAcAIAAAAAAAABAAAAKQAAAAAAAAAAAAAAgAIAAAAAAAABAAAAKgAAAAAAAAAAAAAAkAIAAAAAAAABAAAAKwAAAAAAAAAAAAAAoAIAAAAAAAABAAAALAAAAAAAAAAAAAAAsAIAAAAAAAABAAAALQAAAAAAAAAAAAAAwAIAAAAAAAABAAAALgAAAAAAAAAAAAAA0AIAAAAAAAABAAAALwAAAAAAAAAAAAAA4AIAAAAAAAABAAAAMAAAAAAAAAAAAAAA8AIAAAAAAAABAAAAMQAAAAAAAAAAAAAAAAMAAAAAAAABAAAAMgAAAAAAAAAAAAAAEAMAAAAAAAABAAAAMwAAAAAAAAAAAAAAIAMAAAAAAAABAAAANAAAAAAAAAAAAAAAMAMAAAAAAAABAAAANQAAAAAAAAAAAAAAQAMAAAAAAAABAAAANgAAAAAAAAAAAAAAUAMAAAAAAAABAAAANwAAAAAAAAAAAAAAYAMAAAAAAAABAAAAOAAAAAAAAAAAAAAAcAMAAAAAAAABAAAAOQAAAAAAAAAAAAAAgAMAAAAAAAABAAAAOgAAAAAAAAAAAAAAkAMAAAAAAAABAAAAOwAAAAAAAAAAAAAAoAMAAAAAAAABAAAAPAAAAAAAAAAAAAAAsAMAAAAAAAABAAAAPQAAAAAAAAAAAAAAwAMAAAAAAAABAAAAPgAAAAAAAAAAAAAA0AMAAAAAAAABAAAAPwAAAAAAAAAAAAAA4AMAAAAAAAABAAAAQAAAAAAAAAAAAAAA8AMAAAAAAAABAAAAQQAAAAAAAAAAAAAAAAQAAAAAAAABAAAAQgAAAAAAAAAAAAAAEAQAAAAAAAABAAAAQwAAAAAAAAAAAAAAIAQAAAAAAAABAAAARAAAAAAAAAAAAAAAMAQAAAAAAAABAAAARQAAAAAAAAAAAAAAQAQAAAAAAAABAAAARgAAAAAAAAAAAAAAUAQAAAAAAAABAAAARwAAAAAAAAAAAAAAYAQAAAAAAAABAAAASAAAAAAAAAAAAAAAcAQAAAAAAAABAAAASQAAAAAAAAAAAAAAgAQAAAAAAAABAAAASgAAAAAAAAAAAAAAkAQAAAAAAAABAAAASwAAAAAAAAAAAAAAoAQAAAAAAAABAAAATAAAAAAAAAAAAAAAsAQAAAAAAAABAAAATQAAAAAAAAAAAAAAwAQAAAAAAAABAAAATgAAAAAAAAAAAAAA0AQAAAAAAAABAAAATwAAAAAAAAAAAAAA4AQAAAAAAAABAAAAUAAAAAAAAAAAAAAA8AQAAAAAAAABAAAAUQAAAAAAAAAAAAAAAAUAAAAAAAABAAAAUgAAAAAAAAAAAAAAEAUAAAAAAAABAAAAUwAAAAAAAAAAAAAAIAUAAAAAAAABAAAAVAAAAAAAAAAAAAAAMAUAAAAAAAABAAAAVQAAAAAAAAAAAAAAQAUAAAAAAAABAAAAVgAAAAAAAAAAAAAAUAUAAAAAAAABAAAAVwAAAAAAAAAAAAAAYAUAAAAAAAABAAAAWAAAAAAAAAAAAAAAcAUAAAAAAAABAAAAWQAAAAAAAAAAAAAAgAUAAAAAAAABAAAAWgAAAAAAAAAAAAAAkAUAAAAAAAABAAAAWwAAAAAAAAAAAAAAoAUAAAAAAAABAAAAXAAAAAAAAAAAAAAAsAUAAAAAAAABAAAAXQAAAAAAAAAAAAAAwAUAAAAAAAABAAAAXgAAAAAAAAAAAAAA0AUAAAAAAAABAAAAXwAAAAAAAAAAAAAA4AUAAAAAAAABAAAAYAAAAAAAAAAAAAAA8AUAAAAAAAABAAAAYQAAAAAAAAAAAAAAAAYAAAAAAAABAAAAYgAAAAAAAAAAAAAAEAYAAAAAAAABAAAAYwAAAAAAAAAAAAAAIAYAAAAAAAABAAAAZAAAAAAAAAAAAAAAMAYAAAAAAAABAAAAZQAAAAAAAAAAAAAAQAYAAAAAAAABAAAAZgAAAAAAAAAAAAAAUAYAAAAAAAABAAAAZwAAAAAAAAAAAAAAYAYAAAAAAAABAAAAaAAAAAAAAAAAAAAAcAYAAAAAAAABAAAAaQAAAAAAAAAAAAAAgAYAAAAAAAABAAAAagAAAAAAAAAAAAAAkAYAAAAAAAABAAAAawAAAAAAAAAAAAAAoAYAAAAAAAABAAAAbAAAAAAAAAAAAAAAsAYAAAAAAAABAAAAbQAAAAAAAAAAAAAAwAYAAAAAAAABAAAAbgAAAAAAAAAAAAAA0AYAAAAAAAABAAAAbwAAAAAAAAAAAAAA4AYAAAAAAAABAAAAcAAAAAAAAAAAAAAA8AYAAAAAAAABAAAAcQAAAAAAAAAAAAAAAAcAAAAAAAABAAAAcgAAAAAAAAAAAAAAEAcAAAAAAAABAAAAcwAAAAAAAAAAAAAAIAcAAAAAAAABAAAAdAAAAAAAAAAAAAAAMAcAAAAAAAABAAAAdQAAAAAAAAAAAAAAQAcAAAAAAAABAAAAdgAAAAAAAAAAAAAAUAcAAAAAAAABAAAAdwAAAAAAAAAAAAAAYAcAAAAAAAABAAAAeAAAAAAAAAAAAAAAcAcAAAAAAAABAAAAeQAAAAAAAAAAAAAAgAcAAAAAAAABAAAAegAAAAAAAAAAAAAAkAcAAAAAAAABAAAAewAAAAAAAAAAAAAAoAcAAAAAAAABAAAAfAAAAAAAAAAAAAAAsAcAAAAAAAABAAAAfQAAAAAAAAAAAAAAwAcAAAAAAAABAAAAfgAAAAAAAAAAAAAA0AcAAAAAAAABAAAAfwAAAAAAAAAAAAAA4AcAAAAAAAABAAAAgAAAAAAAAAAAAAAA8AcAAAAAAAABAAAAgQAAAAAAAAAAAAAAAAgAAAAAAAABAAAAggAAAAAAAAAAAAAAEAgAAAAAAAABAAAAgwAAAAAAAAAAAAAAIAgAAAAAAAABAAAAhAAAAAAAAAAAAAAAMAgAAAAAAAABAAAAhQAAAAAAAAAAAAAAQAgAAAAAAAABAAAAhgAAAAAAAAAAAAAAUAgAAAAAAAABAAAAhwAAAAAAAAAAAAAAYAgAAAAAAAABAAAAiAAAAAAAAAAAAAAAcAgAAAAAAAABAAAAiQAAAAAAAAAAAAAAgAgAAAAAAAABAAAAigAAAAAAAAAAAAAAkAgAAAAAAAABAAAAiwAAAAAAAAAAAAAAoAgAAAAAAAABAAAAjAAAAAAAAAAAAAAAsAgAAAAAAAABAAAAjQAAAAAAAAAAAAAAwAgAAAAAAAABAAAAjgAAAAAAAAAAAAAA0AgAAAAAAAABAAAAjwAAAAAAAAAAAAAA4AgAAAAAAAABAAAAkAAAAAAAAAAAAAAA8AgAAAAAAAABAAAAkQAAAAAAAAAAAAAAAAkAAAAAAAABAAAAkgAAAAAAAAAAAAAAEAkAAAAAAAABAAAAkwAAAAAAAAAAAAAAIAkAAAAAAAABAAAAlAAAAAAAAAAAAAAAMAkAAAAAAAABAAAAlQAAAAAAAAAAAAAAQAkAAAAAAAABAAAAlgAAAAAAAAAAAAAAUAkAAAAAAAABAAAAlwAAAAAAAAAAAAAAYAkAAAAAAAABAAAAmAAAAAAAAAAAAAAAcAkAAAAAAAABAAAAmQAAAAAAAAAAAAAAgAkAAAAAAAABAAAAmgAAAAAAAAAAAAAAkAkAAAAAAAABAAAAmwAAAAAAAAAAAAAAoAkAAAAAAAABAAAAnAAAAAAAAAAAAAAAsAkAAAAAAAABAAAAnQAAAAAAAAAAAAAAwAkAAAAAAAABAAAAngAAAAAAAAAAAAAA0AkAAAAAAAABAAAAnwAAAAAAAAAAAAAA4AkAAAAAAAABAAAAoAAAAAAAAAAAAAAA8AkAAAAAAAABAAAAoQAAAAAAAAAAAAAAAAoAAAAAAAABAAAAogAAAAAAAAAAAAAAEAoAAAAAAAABAAAAowAAAAAAAAAAAAAAIAoAAAAAAAABAAAApAAAAAAAAAAAAAAAMAoAAAAAAAABAAAApQAAAAAAAAAAAAAAQAoAAAAAAAABAAAApgAAAAAAAAAAAAAAUAoAAAAAAAABAAAApwAAAAAAAAAAAAAAYAoAAAAAAAABAAAAqAAAAAAAAAAAAAAAcAoAAAAAAAABAAAAqQAAAAAAAAAAAAAAgAoAAAAAAAABAAAAqgAAAAAAAAAAAAAAkAoAAAAAAAABAAAAqwAAAAAAAAAAAAAAoAoAAAAAAAABAAAArAAAAAAAAAAAAAAAsAoAAAAAAAABAAAArQAAAAAAAAAAAAAAwAoAAAAAAAABAAAArgAAAAAAAAAAAAAA0AoAAAAAAAABAAAArwAAAAAAAAAAAAAA4AoAAAAAAAABAAAAsAAAAAAAAAAAAAAA8AoAAAAAAAABAAAAsQAAAAAAAAAAAAAAAAsAAAAAAAABAAAAsgAAAAAAAAAAAAAAEAsAAAAAAAABAAAAswAAAAAAAAAAAAAAIAsAAAAAAAABAAAAtAAAAAAAAAAAAAAAMAsAAAAAAAABAAAAtQAAAAAAAAAAAAAAQAsAAAAAAAABAAAAtgAAAAAAAAAAAAAAUAsAAAAAAAABAAAAtwAAAAAAAAAAAAAAYAsAAAAAAAABAAAAuAAAAAAAAAAAAAAAcAsAAAAAAAABAAAAuQAAAAAAAAAAAAAAgAsAAAAAAAABAAAAugAAAAAAAAAAAAAAkAsAAAAAAAABAAAAuwAAAAAAAAAAAAAAoAsAAAAAAAABAAAAvAAAAAAAAAAAAAAAsAsAAAAAAAABAAAAvQAAAAAAAAAAAAAAwAsAAAAAAAABAAAAvgAAAAAAAAAAAAAA0AsAAAAAAAABAAAAvwAAAAAAAAAAAAAA4AsAAAAAAAABAAAAwAAAAAAAAAAAAAAA8AsAAAAAAAABAAAAwQAAAAAAAAAAAAAAAAwAAAAAAAABAAAAwgAAAAAAAAAAAAAAEAwAAAAAAAABAAAAwwAAAAAAAAAAAAAAIAwAAAAAAAABAAAAxAAAAAAAAAAAAAAAMAwAAAAAAAABAAAAxQAAAAAAAAAAAAAAQAwAAAAAAAABAAAAxgAAAAAAAAAAAAAAUAwAAAAAAAABAAAAxwAAAAAAAAAAAAAAYAwAAAAAAAABAAAAyAAAAAAAAAAAAAAAcAwAAAAAAAABAAAAyQAAAAAAAAAAAAAAgAwAAAAAAAABAAAAygAAAAAAAAAAAAAAkAwAAAAAAAABAAAAywAAAAAAAAAAAAAAoAwAAAAAAAABAAAAzAAAAAAAAAAAAAAAsAwAAAAAAAABAAAAzQAAAAAAAAAAAAAAwAwAAAAAAAABAAAAzgAAAAAAAAAAAAAA0AwAAAAAAAABAAAAzwAAAAAAAAAAAAAA4AwAAAAAAAABAAAA0AAAAAAAAAAAAAAA8AwAAAAAAAABAAAA0QAAAAAAAAAAAAAAAA0AAAAAAAABAAAA0gAAAAAAAAAAAAAAEA0AAAAAAAABAAAA0wAAAAAAAAAAAAAAIA0AAAAAAAABAAAA1AAAAAAAAAAAAAAAMA0AAAAAAAABAAAA1QAAAAAAAAAAAAAAQA0AAAAAAAABAAAA1gAAAAAAAAAAAAAAUA0AAAAAAAABAAAA1wAAAAAAAAAAAAAAYA0AAAAAAAABAAAA2AAAAAAAAAAAAAAAcA0AAAAAAAABAAAA2QAAAAAAAAAAAAAAgA0AAAAAAAABAAAA2gAAAAAAAAAAAAAAkA0AAAAAAAABAAAA2wAAAAAAAAAAAAAAoA0AAAAAAAABAAAA3AAAAAAAAAAAAAAAsA0AAAAAAAABAAAA3QAAAAAAAAAAAAAAwA0AAAAAAAABAAAA3gAAAAAAAAAAAAAA0A0AAAAAAAABAAAA3wAAAAAAAAAAAAAA4A0AAAAAAAABAAAA4AAAAAAAAAAAAAAA8A0AAAAAAAABAAAA4QAAAAAAAAAAAAAAAA4AAAAAAAABAAAA4gAAAAAAAAAAAAAAEA4AAAAAAAABAAAA4wAAAAAAAAAAAAAAIA4AAAAAAAABAAAA5AAAAAAAAAAAAAAAMA4AAAAAAAABAAAA5QAAAAAAAAAAAAAAQA4AAAAAAAABAAAA5gAAAAAAAAAAAAAAUA4AAAAAAAABAAAA5wAAAAAAAAAAAAAAYA4AAAAAAAABAAAA6AAAAAAAAAAAAAAAcA4AAAAAAAABAAAA6QAAAAAAAAAAAAAAgA4AAAAAAAABAAAA6gAAAAAAAAAAAAAAkA4AAAAAAAABAAAA6wAAAAAAAAAAAAAAoA4AAAAAAAABAAAA7AAAAAAAAAAAAAAAsA4AAAAAAAABAAAA7QAAAAAAAAAAAAAAwA4AAAAAAAABAAAA7gAAAAAAAAAAAAAA0A4AAAAAAAABAAAA7wAAAAAAAAAAAAAA4A4AAAAAAAABAAAA8AAAAAAAAAAAAAAA8A4AAAAAAAABAAAA8QAAAAAAAAAAAAAAAA8AAAAAAAABAAAA8gAAAAAAAAAAAAAAEA8AAAAAAAABAAAA8wAAAAAAAAAAAAAAIA8AAAAAAAABAAAA9AAAAAAAAAAAAAAAMA8AAAAAAAABAAAA9QAAAAAAAAAAAAAAQA8AAAAAAAABAAAA9gAAAAAAAAAAAAAAUA8AAAAAAAABAAAA9wAAAAAAAAAAAAAAYA8AAAAAAAABAAAA+AAAAAAAAAAAAAAAcA8AAAAAAAABAAAA+QAAAAAAAAAAAAAAgA8AAAAAAAABAAAA+gAAAAAAAAAAAAAAkA8AAAAAAAABAAAA+wAAAAAAAAAAAAAAoA8AAAAAAAABAAAA/AAAAAAAAAAAAAAAsA8AAAAAAAABAAAA/QAAAAAAAAAAAAAAwA8AAAAAAAABAAAA/gAAAAAAAAAAAAAA0A8AAAAAAAABAAAA/wAAAAAAAAAAAAAA4A8AAAAAAAABAAAAAAEAAAAAAAAAAAAA8A8AAAAAAAABAAAAAQEAAAAAAAAAAAAAABAAAAAAAAABAAAAAgEAAAAAAAAAAAAAEBAAAAAAAAABAAAAAwEAAAAAAAAAAAAAIBAAAAAAAAABAAAABAEAAAAAAAAAAAAAMBAAAAAAAAABAAAABQEAAAAAAAAAAAAAQBAAAAAAAAABAAAABgEAAAAAAAAAAAAAUBAAAAAAAAABAAAABwEAAAAAAAAAAAAAYBAAAAAAAAABAAAACAEAAAAAAAAAAAAAcBAAAAAAAAABAAAACQEAAAAAAAAAAAAAgBAAAAAAAAABAAAACgEAAAAAAAAAAAAAkBAAAAAAAAABAAAACwEAAAAAAAAAAAAAoBAAAAAAAAABAAAADAEAAAAAAAAAAAAAsBAAAAAAAAABAAAADQEAAAAAAAAAAAAAwBAAAAAAAAABAAAADgEAAAAAAAAAAAAA0BAAAAAAAAABAAAADwEAAAAAAAAAAAAA4BAAAAAAAAABAAAAEAEAAAAAAAAAAAAA8BAAAAAAAAABAAAAEQEAAAAAAAAAAAAAABEAAAAAAAABAAAAEgEAAAAAAAAAAAAAEBEAAAAAAAABAAAAEwEAAAAAAAAAAAAAIBEAAAAAAAABAAAAFAEAAAAAAAAAAAAAMBEAAAAAAAABAAAAFQEAAAAAAAAAAAAAQBEAAAAAAAABAAAAFgEAAAAAAAAAAAAAUBEAAAAAAAABAAAAFwEAAAAAAAAAAAAAYBEAAAAAAAABAAAAGAEAAAAAAAAAAAAAcBEAAAAAAAABAAAAGQEAAAAAAAAAAAAAgBEAAAAAAAABAAAAGgEAAAAAAAAAAAAAkBEAAAAAAAABAAAAGwEAAAAAAAAAAAAAoBEAAAAAAAABAAAAHAEAAAAAAAAAAAAAsBEAAAAAAAABAAAAHQEAAAAAAAAAAAAAwBEAAAAAAAABAAAAHgEAAAAAAAAAAAAA0BEAAAAAAAABAAAAHwEAAAAAAAAAAAAA4BEAAAAAAAABAAAAIAEAAAAAAAAAAAAA8BEAAAAAAAABAAAAIQEAAAAAAAAAAAAAABIAAAAAAAABAAAAIgEAAAAAAAAAAAAAEBIAAAAAAAABAAAAIwEAAAAAAAAAAAAAIBIAAAAAAAABAAAAJAEAAAAAAAAAAAAAMBIAAAAAAAABAAAAJQEAAAAAAAAAAAAAQBIAAAAAAAABAAAAJgEAAAAAAAAAAAAAUBIAAAAAAAABAAAAJwEAAAAAAAAAAAAAYBIAAAAAAAABAAAAKAEAAAAAAAAAAAAAcBIAAAAAAAABAAAAKQEAAAAAAAAAAAAAgBIAAAAAAAABAAAAKgEAAAAAAAAAAAAAkBIAAAAAAAABAAAAKwEAAAAAAAAAAAAAoBIAAAAAAAABAAAALAEAAAAAAAAAAAAAsBIAAAAAAAABAAAALQEAAAAAAAAAAAAAwBIAAAAAAAABAAAALgEAAAAAAAAAAAAA0BIAAAAAAAABAAAALwEAAAAAAAAAAAAA4BIAAAAAAAABAAAAMAEAAAAAAAAAAAAA8BIAAAAAAAABAAAAMQEAAAAAAAAAAAAAABMAAAAAAAABAAAAMgEAAAAAAAAAAAAAEBMAAAAAAAABAAAAMwEAAAAAAAAAAAAAIBMAAAAAAAABAAAANAEAAAAAAAAAAAAAMBMAAAAAAAABAAAANQEAAAAAAAAAAAAAQBMAAAAAAAABAAAANgEAAAAAAAAAAAAAUBMAAAAAAAABAAAANwEAAAAAAAAAAAAAYBMAAAAAAAABAAAAOAEAAAAAAAAAAAAAcBMAAAAAAAABAAAAOQEAAAAAAAAAAAAAgBMAAAAAAAABAAAAOgEAAAAAAAAAAAAAkBMAAAAAAAABAAAAOwEAAAAAAAAAAAAAoBMAAAAAAAABAAAAPAEAAAAAAAAAAAAAsBMAAAAAAAABAAAAPQEAAAAAAAAAAAAAwBMAAAAAAAABAAAAPgEAAAAAAAAAAAAA0BMAAAAAAAABAAAAPwEAAAAAAAAAAAAA4BMAAAAAAAABAAAAQAEAAAAAAAAAAAAA8BMAAAAAAAABAAAAQQEAAAAAAAAAAAAAABQAAAAAAAABAAAAQgEAAAAAAAAAAAAAEBQAAAAAAAABAAAAQwEAAAAAAAAAAAAAIBQAAAAAAAABAAAARAEAAAAAAAAAAAAAMBQAAAAAAAABAAAARQEAAAAAAAAAAAAAQBQAAAAAAAABAAAARgEAAAAAAAAAAAAAUBQAAAAAAAABAAAARwEAAAAAAAAAAAAAYBQAAAAAAAABAAAASAEAAAAAAAAAAAAAcBQAAAAAAAABAAAASQEAAAAAAAAAAAAAgBQAAAAAAAABAAAASgEAAAAAAAAAAAAAkBQAAAAAAAABAAAASwEAAAAAAAAAAAAAoBQAAAAAAAABAAAATAEAAAAAAAAAAAAAsBQAAAAAAAABAAAATQEAAAAAAAAAAAAAwBQAAAAAAAABAAAATgEAAAAAAAAAAAAA0BQAAAAAAAABAAAATwEAAAAAAAAAAAAA4BQAAAAAAAABAAAAUAEAAAAAAAAAAAAA8BQAAAAAAAABAAAAUQEAAAAAAAAAAAAAABUAAAAAAAABAAAAUgEAAAAAAAAAAAAAEBUAAAAAAAABAAAAUwEAAAAAAAAAAAAAIBUAAAAAAAABAAAAVAEAAAAAAAAAAAAAMBUAAAAAAAABAAAAVQEAAAAAAAAAAAAAQBUAAAAAAAABAAAAVgEAAAAAAAAAAAAAUBUAAAAAAAABAAAAVwEAAAAAAAAAAAAAYBUAAAAAAAABAAAAWAEAAAAAAAAAAAAAcBUAAAAAAAABAAAAWQEAAAAAAAAAAAAAgBUAAAAAAAABAAAAWgEAAAAAAAAAAAAAkBUAAAAAAAABAAAAWwEAAAAAAAAAAAAAoBUAAAAAAAABAAAAXAEAAAAAAAAAAAAAsBUAAAAAAAABAAAAXQEAAAAAAAAAAAAAwBUAAAAAAAABAAAAXgEAAAAAAAAAAAAA0BUAAAAAAAABAAAAXwEAAAAAAAAAAAAA4BUAAAAAAAABAAAAYAEAAAAAAAAAAAAA8BUAAAAAAAABAAAAYQEAAAAAAAAAAAAAABYAAAAAAAABAAAAYgEAAAAAAAAAAAAAEBYAAAAAAAABAAAAYwEAAAAAAAAAAAAAIBYAAAAAAAABAAAAZAEAAAAAAAAAAAAAMBYAAAAAAAABAAAAZQEAAAAAAAAAAAAAQBYAAAAAAAABAAAAZgEAAAAAAAAAAAAAUBYAAAAAAAABAAAAZwEAAAAAAAAAAAAAYBYAAAAAAAABAAAAaAEAAAAAAAAAAAAAcBYAAAAAAAABAAAAaQEAAAAAAAAAAAAAgBYAAAAAAAABAAAAagEAAAAAAAAAAAAAkBYAAAAAAAABAAAAawEAAAAAAAAAAAAAoBYAAAAAAAABAAAAbAEAAAAAAAAAAAAAsBYAAAAAAAABAAAAbQEAAAAAAAAAAAAAwBYAAAAAAAABAAAAbgEAAAAAAAAAAAAA0BYAAAAAAAABAAAAbwEAAAAAAAAAAAAA4BYAAAAAAAABAAAAcAEAAAAAAAAAAAAA8BYAAAAAAAABAAAAcQEAAAAAAAAAAAAAABcAAAAAAAABAAAAcgEAAAAAAAAAAAAAEBcAAAAAAAABAAAAcwEAAAAAAAAAAAAAIBcAAAAAAAABAAAAdAEAAAAAAAAAAAAAMBcAAAAAAAABAAAAdQEAAAAAAAAAAAAAQBcAAAAAAAABAAAAdgEAAAAAAAAAAAAAUBcAAAAAAAABAAAAdwEAAAAAAAAAAAAAYBcAAAAAAAABAAAAeAEAAAAAAAAAAAAAcBcAAAAAAAABAAAAeQEAAAAAAAAAAAAAgBcAAAAAAAABAAAAegEAAAAAAAAAAAAAkBcAAAAAAAABAAAAewEAAAAAAAAAAAAAoBcAAAAAAAABAAAAfAEAAAAAAAAAAAAAsBcAAAAAAAABAAAAfQEAAAAAAAAAAAAAwBcAAAAAAAABAAAAfgEAAAAAAAAAAAAA0BcAAAAAAAABAAAAfwEAAAAAAAAAAAAA4BcAAAAAAAABAAAAgAEAAAAAAAAAAAAA8BcAAAAAAAABAAAAgQEAAAAAAAAAAAAAABgAAAAAAAABAAAAggEAAAAAAAAAAAAAEBgAAAAAAAABAAAAgwEAAAAAAAAAAAAAIBgAAAAAAAABAAAAhAEAAAAAAAAAAAAAMBgAAAAAAAABAAAAhQEAAAAAAAAAAAAAQBgAAAAAAAABAAAAhgEAAAAAAAAAAAAAUBgAAAAAAAABAAAAhwEAAAAAAAAAAAAAYBgAAAAAAAABAAAAiAEAAAAAAAAAAAAAcBgAAAAAAAABAAAAiQEAAAAAAAAAAAAAgBgAAAAAAAABAAAAigEAAAAAAAAAAAAAkBgAAAAAAAABAAAAiwEAAAAAAAAAAAAAoBgAAAAAAAABAAAAjAEAAAAAAAAAAAAAsBgAAAAAAAABAAAAjQEAAAAAAAAAAAAAwBgAAAAAAAABAAAAjgEAAAAAAAAAAAAA0BgAAAAAAAABAAAAjwEAAAAAAAAAAAAA4BgAAAAAAAABAAAAkAEAAAAAAAAAAAAA8BgAAAAAAAABAAAAkQEAAAAAAAAAAAAAABkAAAAAAAABAAAAkgEAAAAAAAAAAAAAEBkAAAAAAAABAAAAkwEAAAAAAAAAAAAAIBkAAAAAAAABAAAAlAEAAAAAAAAAAAAAMBkAAAAAAAABAAAAlQEAAAAAAAAAAAAAQBkAAAAAAAABAAAAlgEAAAAAAAAAAAAAUBkAAAAAAAABAAAAlwEAAAAAAAAAAAAAYBkAAAAAAAABAAAAmAEAAAAAAAAAAAAAcBkAAAAAAAABAAAAmQEAAAAAAAAAAAAAgBkAAAAAAAABAAAAmgEAAAAAAAAAAAAAkBkAAAAAAAABAAAAmwEAAAAAAAAAAAAAoBkAAAAAAAABAAAAnAEAAAAAAAAAAAAAsBkAAAAAAAABAAAAnQEAAAAAAAAAAAAAwBkAAAAAAAABAAAAngEAAAAAAAAAAAAA0BkAAAAAAAABAAAAnwEAAAAAAAAAAAAA4BkAAAAAAAABAAAAoAEAAAAAAAAAAAAA8BkAAAAAAAABAAAAoQEAAAAAAAAAAAAAABoAAAAAAAABAAAAogEAAAAAAAAAAAAAEBoAAAAAAAABAAAAowEAAAAAAAAAAAAAIBoAAAAAAAABAAAApAEAAAAAAAAAAAAAMBoAAAAAAAABAAAApQEAAAAAAAAAAAAAQBoAAAAAAAABAAAApgEAAAAAAAAAAAAAUBoAAAAAAAABAAAApwEAAAAAAAAAAAAAYBoAAAAAAAABAAAAqAEAAAAAAAAAAAAAcBoAAAAAAAABAAAAqQEAAAAAAAAAAAAAgBoAAAAAAAABAAAAqgEAAAAAAAAAAAAAkBoAAAAAAAABAAAAqwEAAAAAAAAAAAAAoBoAAAAAAAABAAAArAEAAAAAAAAAAAAAsBoAAAAAAAABAAAArQEAAAAAAAAAAAAAwBoAAAAAAAABAAAArgEAAAAAAAAAAAAA0BoAAAAAAAABAAAArwEAAAAAAAAAAAAA4BoAAAAAAAABAAAAsAEAAAAAAAAAAAAA8BoAAAAAAAABAAAAsQEAAAAAAAAAAAAAABsAAAAAAAABAAAAsgEAAAAAAAAAAAAAEBsAAAAAAAABAAAAswEAAAAAAAAAAAAAIBsAAAAAAAABAAAAtAEAAAAAAAAAAAAAMBsAAAAAAAABAAAAtQEAAAAAAAAAAAAAQBsAAAAAAAABAAAAtgEAAAAAAAAAAAAAUBsAAAAAAAABAAAAtwEAAAAAAAAAAAAAYBsAAAAAAAABAAAAuAEAAAAAAAAAAAAAcBsAAAAAAAABAAAAuQEAAAAAAAAAAAAAgBsAAAAAAAABAAAAugEAAAAAAAAAAAAAkBsAAAAAAAABAAAAuwEAAAAAAAAAAAAAoBsAAAAAAAABAAAAvAEAAAAAAAAAAAAAsBsAAAAAAAABAAAAvQEAAAAAAAAAAAAAwBsAAAAAAAABAAAAvgEAAAAAAAAAAAAA0BsAAAAAAAABAAAAvwEAAAAAAAAAAAAA4BsAAAAAAAABAAAAwAEAAAAAAAAAAAAA8BsAAAAAAAABAAAAwQEAAAAAAAAAAAAAABwAAAAAAAABAAAAwgEAAAAAAAAAAAAAEBwAAAAAAAABAAAAwwEAAAAAAAAAAAAAIBwAAAAAAAABAAAAxAEAAAAAAAAAAAAAMBwAAAAAAAABAAAAxQEAAAAAAAAAAAAAQBwAAAAAAAABAAAAxgEAAAAAAAAAAAAAUBwAAAAAAAABAAAAxwEAAAAAAAAAAAAAYBwAAAAAAAABAAAAyAEAAAAAAAAAAAAAcBwAAAAAAAABAAAAyQEAAAAAAAAAAAAAgBwAAAAAAAABAAAAygEAAAAAAAAAAAAAkBwAAAAAAAABAAAAywEAAAAAAAAAAAAAoBwAAAAAAAABAAAAzAEAAAAAAAAAAAAAsBwAAAAAAAABAAAAzQEAAAAAAAAAAAAAwBwAAAAAAAABAAAAzgEAAAAAAAAAAAAA0BwAAAAAAAABAAAAzwEAAAAAAAAAAAAA4BwAAAAAAAABAAAA0AEAAAAAAAAAAAAA8BwAAAAAAAABAAAA0QEAAAAAAAAAAAAAAB0AAAAAAAABAAAA0gEAAAAAAAAAAAAAEB0AAAAAAAABAAAA0wEAAAAAAAAAAAAAIB0AAAAAAAABAAAA1AEAAAAAAAAAAAAAMB0AAAAAAAABAAAA1QEAAAAAAAAAAAAAQB0AAAAAAAABAAAA1gEAAAAAAAAAAAAAUB0AAAAAAAABAAAA1wEAAAAAAAAAAAAAYB0AAAAAAAABAAAA2AEAAAAAAAAAAAAAcB0AAAAAAAABAAAA2QEAAAAAAAAAAAAAgB0AAAAAAAABAAAA2gEAAAAAAAAAAAAAkB0AAAAAAAABAAAA2wEAAAAAAAAAAAAAoB0AAAAAAAABAAAA3AEAAAAAAAAAAAAAsB0AAAAAAAABAAAA3QEAAAAAAAAAAAAAwB0AAAAAAAABAAAA3gEAAAAAAAAAAAAA0B0AAAAAAAABAAAA3wEAAAAAAAAAAAAA4B0AAAAAAAABAAAA4AEAAAAAAAAAAAAA8B0AAAAAAAABAAAA4QEAAAAAAAAAAAAAAB4AAAAAAAABAAAA4gEAAAAAAAAAAAAAEB4AAAAAAAABAAAA4wEAAAAAAAAAAAAAIB4AAAAAAAABAAAA5AEAAAAAAAAAAAAAMB4AAAAAAAABAAAA5QEAAAAAAAAAAAAAQB4AAAAAAAABAAAA5gEAAAAAAAAAAAAAUB4AAAAAAAABAAAA5wEAAAAAAAAAAAAAYB4AAAAAAAABAAAA6AEAAAAAAAAAAAAAcB4AAAAAAAABAAAA6QEAAAAAAAAAAAAAgB4AAAAAAAABAAAA6gEAAAAAAAAAAAAAkB4AAAAAAAABAAAA6wEAAAAAAAAAAAAAoB4AAAAAAAABAAAA7AEAAAAAAAAAAAAAsB4AAAAAAAABAAAA7QEAAAAAAAAAAAAAwB4AAAAAAAABAAAA7gEAAAAAAAAAAAAA0B4AAAAAAAABAAAA7wEAAAAAAAAAAAAA4B4AAAAAAAABAAAA8AEAAAAAAAAAAAAA8B4AAAAAAAABAAAA8QEAAAAAAAAAAAAAAB8AAAAAAAABAAAA8gEAAAAAAAAAAAAAEB8AAAAAAAABAAAA8wEAAAAAAAAAAAAAIB8AAAAAAAABAAAA9AEAAAAAAAAAAAAAMB8AAAAAAAABAAAA9QEAAAAAAAAAAAAAQB8AAAAAAAABAAAA9gEAAAAAAAAAAAAAUB8AAAAAAAABAAAA9wEAAAAAAAAAAAAAYB8AAAAAAAABAAAA+AEAAAAAAAAAAAAAcB8AAAAAAAABAAAA+QEAAAAAAAAAAAAAgB8AAAAAAAABAAAA+gEAAAAAAAAAAAAAkB8AAAAAAAABAAAA+wEAAAAAAAAAAAAAoB8AAAAAAAABAAAA/AEAAAAAAAAAAAAAsB8AAAAAAAABAAAA/QEAAAAAAAAAAAAAwB8AAAAAAAABAAAA/gEAAAAAAAAAAAAA0B8AAAAAAAABAAAA/wEAAAAAAAAAAAAA4B8AAAAAAAABAAAAAAIAAAAAAAAAAAAA8B8AAAAAAAABAAAAAQIAAAAAAAAAAAAAACAAAAAAAAABAAAAAgIAAAAAAAAAAAAAECAAAAAAAAABAAAAAwIAAAAAAAAAAAAAICAAAAAAAAABAAAABAIAAAAAAAAAAAAAMCAAAAAAAAABAAAABQIAAAAAAAAAAAAAQCAAAAAAAAABAAAABgIAAAAAAAAAAAAAUCAAAAAAAAABAAAABwIAAAAAAAAAAAAAYCAAAAAAAAABAAAACAIAAAAAAAAAAAAAcCAAAAAAAAABAAAACQIAAAAAAAAAAAAAgCAAAAAAAAABAAAACgIAAAAAAAAAAAAAkCAAAAAAAAABAAAACwIAAAAAAAAAAAAAoCAAAAAAAAABAAAADAIAAAAAAAAAAAAAsCAAAAAAAAABAAAADQIAAAAAAAAAAAAAwCAAAAAAAAABAAAADgIAAAAAAAAAAAAA0CAAAAAAAAABAAAADwIAAAAAAAAAAAAA4CAAAAAAAAABAAAAEAIAAAAAAAAAAAAA8CAAAAAAAAABAAAAEQIAAAAAAAAAAAAAACEAAAAAAAABAAAAEgIAAAAAAAAAAAAAECEAAAAAAAABAAAAEwIAAAAAAAAAAAAAICEAAAAAAAABAAAAFAIAAAAAAAAAAAAAMCEAAAAAAAABAAAAFQIAAAAAAAAAAAAAQCEAAAAAAAABAAAAFgIAAAAAAAAAAAAAUCEAAAAAAAABAAAAFwIAAAAAAAAAAAAAYCEAAAAAAAABAAAAGAIAAAAAAAAAAAAAcCEAAAAAAAABAAAAGQIAAAAAAAAAAAAAgCEAAAAAAAABAAAAGgIAAAAAAAAAAAAAkCEAAAAAAAABAAAAGwIAAAAAAAAAAAAAoCEAAAAAAAABAAAAHAIAAAAAAAAAAAAAsCEAAAAAAAABAAAAHQIAAAAAAAAAAAAAwCEAAAAAAAABAAAAHgIAAAAAAAAAAAAA0CEAAAAAAAABAAAAHwIAAAAAAAAAAAAA4CEAAAAAAAABAAAAIAIAAAAAAAAAAAAA8CEAAAAAAAABAAAAIQIAAAAAAAAAAAAAACIAAAAAAAABAAAAIgIAAAAAAAAAAAAAECIAAAAAAAABAAAAIwIAAAAAAAAAAAAAICIAAAAAAAABAAAAJAIAAAAAAAAAAAAAMCIAAAAAAAABAAAAJQIAAAAAAAAAAAAAQCIAAAAAAAABAAAAJgIAAAAAAAAAAAAAUCIAAAAAAAABAAAAJwIAAAAAAAAAAAAAYCIAAAAAAAABAAAAKAIAAAAAAAAAAAAAcCIAAAAAAAABAAAAKQIAAAAAAAAAAAAAgCIAAAAAAAABAAAAKgIAAAAAAAAAAAAAkCIAAAAAAAABAAAAKwIAAAAAAAAAAAAAoCIAAAAAAAABAAAALAIAAAAAAAAAAAAAsCIAAAAAAAABAAAALQIAAAAAAAAAAAAAwCIAAAAAAAABAAAALgIAAAAAAAAAAAAA0CIAAAAAAAABAAAALwIAAAAAAAAAAAAA4CIAAAAAAAABAAAAMAIAAAAAAAAAAAAA8CIAAAAAAAABAAAAMQIAAAAAAAAAAAAAACMAAAAAAAABAAAAMgIAAAAAAAAAAAAAECMAAAAAAAABAAAAMwIAAAAAAAAAAAAAICMAAAAAAAABAAAANAIAAAAAAAAAAAAAMCMAAAAAAAABAAAANQIAAAAAAAAAAAAAQCMAAAAAAAABAAAANgIAAAAAAAAAAAAAUCMAAAAAAAABAAAANwIAAAAAAAAAAAAAYCMAAAAAAAABAAAAOAIAAAAAAAAAAAAAcCMAAAAAAAABAAAAOQIAAAAAAAAAAAAAgCMAAAAAAAABAAAAOgIAAAAAAAAAAAAAkCMAAAAAAAABAAAAOwIAAAAAAAAAAAAAoCMAAAAAAAABAAAAPAIAAAAAAAAAAAAAsCMAAAAAAAABAAAAPQIAAAAAAAAAAAAAwCMAAAAAAAABAAAAPgIAAAAAAAAAAAAA0CMAAAAAAAABAAAAPwIAAAAAAAAAAAAA4CMAAAAAAAABAAAAQAIAAAAAAAAAAAAA8CMAAAAAAAABAAAAQQIAAAAAAAAAAAAAACQAAAAAAAABAAAAQgIAAAAAAAAAAAAAECQAAAAAAAABAAAAQwIAAAAAAAAAAAAAICQAAAAAAAABAAAARAIAAAAAAAAAAAAAMCQAAAAAAAABAAAARQIAAAAAAAAAAAAAQCQAAAAAAAABAAAARgIAAAAAAAAAAAAAUCQAAAAAAAABAAAARwIAAAAAAAAAAAAAYCQAAAAAAAABAAAASAIAAAAAAAAAAAAAcCQAAAAAAAABAAAASQIAAAAAAAAAAAAAgCQAAAAAAAABAAAASgIAAAAAAAAAAAAAkCQAAAAAAAABAAAASwIAAAAAAAAAAAAAoCQAAAAAAAABAAAATAIAAAAAAAAAAAAAsCQAAAAAAAABAAAATQIAAAAAAAAAAAAAwCQAAAAAAAABAAAATgIAAAAAAAAAAAAA0CQAAAAAAAABAAAATwIAAAAAAAAAAAAA4CQAAAAAAAABAAAAUAIAAAAAAAAAAAAA8CQAAAAAAAABAAAAUQIAAAAAAAAAAAAAACUAAAAAAAABAAAAUgIAAAAAAAAAAAAAECUAAAAAAAABAAAAUwIAAAAAAAAAAAAAICUAAAAAAAABAAAAVAIAAAAAAAAAAAAAMCUAAAAAAAABAAAAVQIAAAAAAAAAAAAAQCUAAAAAAAABAAAAVgIAAAAAAAAAAAAAUCUAAAAAAAABAAAAVwIAAAAAAAAAAAAAYCUAAAAAAAABAAAAWAIAAAAAAAAAAAAAcCUAAAAAAAABAAAAWQIAAAAAAAAAAAAAgCUAAAAAAAABAAAAWgIAAAAAAAAAAAAAkCUAAAAAAAABAAAAWwIAAAAAAAAAAAAAoCUAAAAAAAABAAAAXAIAAAAAAAAAAAAAsCUAAAAAAAABAAAAXQIAAAAAAAAAAAAAwCUAAAAAAAABAAAAXgIAAAAAAAAAAAAA0CUAAAAAAAABAAAAXwIAAAAAAAAAAAAA4CUAAAAAAAABAAAAYAIAAAAAAAAAAAAA8CUAAAAAAAABAAAAYQIAAAAAAAAAAAAAACYAAAAAAAABAAAAYgIAAAAAAAAAAAAAECYAAAAAAAABAAAAYwIAAAAAAAAAAAAAICYAAAAAAAABAAAAZAIAAAAAAAAAAAAAMCYAAAAAAAABAAAAZQIAAAAAAAAAAAAAQCYAAAAAAAABAAAAZgIAAAAAAAAAAAAAUCYAAAAAAAABAAAAZwIAAAAAAAAAAAAAYCYAAAAAAAABAAAAaAIAAAAAAAAAAAAAcCYAAAAAAAABAAAAaQIAAAAAAAAAAAAAgCYAAAAAAAABAAAAagIAAAAAAAAAAAAAkCYAAAAAAAABAAAAawIAAAAAAAAAAAAAoCYAAAAAAAABAAAAbAIAAAAAAAAAAAAAsCYAAAAAAAABAAAAbQIAAAAAAAAAAAAAwCYAAAAAAAABAAAAbgIAAAAAAAAAAAAA0CYAAAAAAAABAAAAbwIAAAAAAAAAAAAA4CYAAAAAAAABAAAAcAIAAAAAAAAAAAAA8CYAAAAAAAABAAAAcQIAAAAAAAAAAAAAACcAAAAAAAABAAAAcgIAAAAAAAAAAAAAECcAAAAAAAABAAAAcwIAAAAAAAAAAAAAICcAAAAAAAABAAAAdAIAAAAAAAAAAAAAMCcAAAAAAAABAAAAdQIAAAAAAAAAAAAAQCcAAAAAAAABAAAAdgIAAAAAAAAAAAAAUCcAAAAAAAABAAAAdwIAAAAAAAAAAAAAYCcAAAAAAAABAAAAeAIAAAAAAAAAAAAAcCcAAAAAAAABAAAAeQIAAAAAAAAAAAAAgCcAAAAAAAABAAAAegIAAAAAAAAAAAAAkCcAAAAAAAABAAAAewIAAAAAAAAAAAAAoCcAAAAAAAABAAAAfAIAAAAAAAAAAAAAsCcAAAAAAAABAAAAfQIAAAAAAAAAAAAAwCcAAAAAAAABAAAAfgIAAAAAAAAAAAAA0CcAAAAAAAABAAAAfwIAAAAAAAAAAAAA4CcAAAAAAAABAAAAgAIAAAAAAAAAAAAA8CcAAAAAAAABAAAAgQIAAAAAAAAAAAAAACgAAAAAAAABAAAAggIAAAAAAAAAAAAAECgAAAAAAAABAAAAgwIAAAAAAAAAAAAAICgAAAAAAAABAAAAhAIAAAAAAAAAAAAAMCgAAAAAAAABAAAAhQIAAAAAAAAAAAAAQCgAAAAAAAABAAAAhgIAAAAAAAAAAAAAUCgAAAAAAAABAAAAhwIAAAAAAAAAAAAAYCgAAAAAAAABAAAAiAIAAAAAAAAAAAAAcCgAAAAAAAABAAAAiQIAAAAAAAAAAAAAgCgAAAAAAAABAAAAigIAAAAAAAAAAAAAkCgAAAAAAAABAAAAiwIAAAAAAAAAAAAAoCgAAAAAAAABAAAAjAIAAAAAAAAAAAAAsCgAAAAAAAABAAAAjQIAAAAAAAAAAAAAwCgAAAAAAAABAAAAjgIAAAAAAAAAAAAA0CgAAAAAAAABAAAAjwIAAAAAAAAAAAAA4CgAAAAAAAABAAAAkAIAAAAAAAAAAAAA8CgAAAAAAAABAAAAkQIAAAAAAAAAAAAAACkAAAAAAAABAAAAkgIAAAAAAAAAAAAAECkAAAAAAAABAAAAkwIAAAAAAAAAAAAAICkAAAAAAAABAAAAlAIAAAAAAAAAAAAAMCkAAAAAAAABAAAAlQIAAAAAAAAAAAAAQCkAAAAAAAABAAAAlgIAAAAAAAAAAAAAUCkAAAAAAAABAAAAlwIAAAAAAAAAAAAAYCkAAAAAAAABAAAAmAIAAAAAAAAAAAAAcCkAAAAAAAABAAAAmQIAAAAAAAAAAAAAgCkAAAAAAAABAAAAmgIAAAAAAAAAAAAAkCkAAAAAAAABAAAAmwIAAAAAAAAAAAAAoCkAAAAAAAABAAAAnAIAAAAAAAAAAAAAsCkAAAAAAAABAAAAnQIAAAAAAAAAAAAAwCkAAAAAAAABAAAAngIAAAAAAAAAAAAA0CkAAAAAAAABAAAAnwIAAAAAAAAAAAAA4CkAAAAAAAABAAAAoAIAAAAAAAAAAAAA8CkAAAAAAAABAAAAoQIAAAAAAAAAAAAAACoAAAAAAAABAAAAogIAAAAAAAAAAAAAECoAAAAAAAABAAAAowIAAAAAAAAAAAAAICoAAAAAAAABAAAApAIAAAAAAAAAAAAAMCoAAAAAAAABAAAApQIAAAAAAAAAAAAAQCoAAAAAAAABAAAApgIAAAAAAAAAAAAAUCoAAAAAAAABAAAApwIAAAAAAAAAAAAAYCoAAAAAAAABAAAAqAIAAAAAAAAAAAAAcCoAAAAAAAABAAAAqQIAAAAAAAAAAAAAgCoAAAAAAAABAAAAqgIAAAAAAAAAAAAAkCoAAAAAAAABAAAAqwIAAAAAAAAAAAAAoCoAAAAAAAABAAAArAIAAAAAAAAAAAAAsCoAAAAAAAABAAAArQIAAAAAAAAAAAAAwCoAAAAAAAABAAAArgIAAAAAAAAAAAAA0CoAAAAAAAABAAAArwIAAAAAAAAAAAAA4CoAAAAAAAABAAAAsAIAAAAAAAAAAAAA8CoAAAAAAAABAAAAsQIAAAAAAAAAAAAAACsAAAAAAAABAAAAsgIAAAAAAAAAAAAAECsAAAAAAAABAAAAswIAAAAAAAAAAAAAICsAAAAAAAABAAAAtAIAAAAAAAAAAAAAMCsAAAAAAAABAAAAtQIAAAAAAAAAAAAAQCsAAAAAAAABAAAAtgIAAAAAAAAAAAAAUCsAAAAAAAABAAAAtwIAAAAAAAAAAAAAYCsAAAAAAAABAAAAuAIAAAAAAAAAAAAAcCsAAAAAAAABAAAAuQIAAAAAAAAAAAAAgCsAAAAAAAABAAAAugIAAAAAAAAAAAAAkCsAAAAAAAABAAAAuwIAAAAAAAAAAAAAoCsAAAAAAAABAAAAvAIAAAAAAAAAAAAAsCsAAAAAAAABAAAAvQIAAAAAAAAAAAAAwCsAAAAAAAABAAAAvgIAAAAAAAAAAAAA0CsAAAAAAAABAAAAvwIAAAAAAAAAAAAA4CsAAAAAAAABAAAAwAIAAAAAAAAAAAAA8CsAAAAAAAABAAAAwQIAAAAAAAAAAAAAACwAAAAAAAABAAAAwgIAAAAAAAAAAAAAECwAAAAAAAABAAAAwwIAAAAAAAAAAAAAICwAAAAAAAABAAAAxAIAAAAAAAAAAAAAMCwAAAAAAAABAAAAxQIAAAAAAAAAAAAAQCwAAAAAAAABAAAAxgIAAAAAAAAAAAAAUCwAAAAAAAABAAAAxwIAAAAAAAAAAAAAYCwAAAAAAAABAAAAyAIAAAAAAAAAAAAAcCwAAAAAAAABAAAAyQIAAAAAAAAAAAAAgCwAAAAAAAABAAAAygIAAAAAAAAAAAAAkCwAAAAAAAABAAAAywIAAAAAAAAAAAAAoCwAAAAAAAABAAAAzAIAAAAAAAAAAAAAsCwAAAAAAAABAAAAzQIAAAAAAAAAAAAAwCwAAAAAAAABAAAAzgIAAAAAAAAAAAAA0CwAAAAAAAABAAAAzwIAAAAAAAAAAAAA4CwAAAAAAAABAAAA0AIAAAAAAAAAAAAA8CwAAAAAAAABAAAA0QIAAAAAAAAAAAAAAC0AAAAAAAABAAAA0gIAAAAAAAAAAAAAEC0AAAAAAAABAAAA0wIAAAAAAAAAAAAAIC0AAAAAAAABAAAA1AIAAAAAAAAAAAAAMC0AAAAAAAABAAAA1QIAAAAAAAAAAAAAQC0AAAAAAAABAAAA1gIAAAAAAAAAAAAAUC0AAAAAAAABAAAA1wIAAAAAAAAAAAAAYC0AAAAAAAABAAAA2AIAAAAAAAAAAAAAcC0AAAAAAAABAAAA2QIAAAAAAAAAAAAAgC0AAAAAAAABAAAA2gIAAAAAAAAAAAAAkC0AAAAAAAABAAAA2wIAAAAAAAAAAAAAoC0AAAAAAAABAAAA3AIAAAAAAAAAAAAAsC0AAAAAAAABAAAA3QIAAAAAAAAAAAAAwC0AAAAAAAABAAAA3gIAAAAAAAAAAAAA0C0AAAAAAAABAAAA3wIAAAAAAAAAAAAA4C0AAAAAAAABAAAA4AIAAAAAAAAAAAAA8C0AAAAAAAABAAAA4QIAAAAAAAAAAAAAAC4AAAAAAAABAAAA4gIAAAAAAAAAAAAAEC4AAAAAAAABAAAA4wIAAAAAAAAAAAAAIC4AAAAAAAABAAAA5AIAAAAAAAAAAAAAMC4AAAAAAAABAAAA5QIAAAAAAAAAAAAAQC4AAAAAAAABAAAA5gIAAAAAAAAAAAAAUC4AAAAAAAABAAAA5wIAAAAAAAAAAAAAYC4AAAAAAAABAAAA6AIAAAAAAAAAAAAAcC4AAAAAAAABAAAA6QIAAAAAAAAAAAAAgC4AAAAAAAABAAAA6gIAAAAAAAAAAAAAkC4AAAAAAAABAAAA6wIAAAAAAAAAAAAAoC4AAAAAAAABAAAA7AIAAAAAAAAAAAAAsC4AAAAAAAABAAAA7QIAAAAAAAAAAAAAwC4AAAAAAAABAAAA7gIAAAAAAAAAAAAA0C4AAAAAAAABAAAA7wIAAAAAAAAAAAAA4C4AAAAAAAABAAAA8AIAAAAAAAAAAAAA8C4AAAAAAAABAAAA8QIAAAAAAAAAAAAAAC8AAAAAAAABAAAA8gIAAAAAAAAAAAAAEC8AAAAAAAABAAAA8wIAAAAAAAAAAAAAIC8AAAAAAAABAAAA9AIAAAAAAAAAAAAAMC8AAAAAAAABAAAA9QIAAAAAAAAAAAAAQC8AAAAAAAABAAAA9gIAAAAAAAAAAAAAUC8AAAAAAAABAAAA9wIAAAAAAAAAAAAAYC8AAAAAAAABAAAA+AIAAAAAAAAAAAAAcC8AAAAAAAABAAAA+QIAAAAAAAAAAAAAgC8AAAAAAAABAAAA+gIAAAAAAAAAAAAAkC8AAAAAAAABAAAA+wIAAAAAAAAAAAAAoC8AAAAAAAABAAAA/AIAAAAAAAAAAAAAsC8AAAAAAAABAAAA/QIAAAAAAAAAAAAAwC8AAAAAAAABAAAA/gIAAAAAAAAAAAAA0C8AAAAAAAABAAAA/wIAAAAAAAAAAAAA4C8AAAAAAAABAAAAAAMAAAAAAAAAAAAA8C8AAAAAAAABAAAAAQMAAAAAAAAAAAAAADAAAAAAAAABAAAAAgMAAAAAAAAAAAAAEDAAAAAAAAABAAAAAwMAAAAAAAAAAAAAIDAAAAAAAAABAAAABAMAAAAAAAAAAAAAMDAAAAAAAAABAAAABQMAAAAAAAAAAAAAQDAAAAAAAAABAAAABgMAAAAAAAAAAAAAUDAAAAAAAAABAAAABwMAAAAAAAAAAAAAYDAAAAAAAAABAAAACAMAAAAAAAAAAAAAcDAAAAAAAAABAAAACQMAAAAAAAAAAAAAgDAAAAAAAAABAAAACgMAAAAAAAAAAAAAkDAAAAAAAAABAAAACwMAAAAAAAAAAAAAoDAAAAAAAAABAAAADAMAAAAAAAAAAAAAsDAAAAAAAAABAAAADQMAAAAAAAAAAAAAwDAAAAAAAAABAAAADgMAAAAAAAAAAAAA0DAAAAAAAAABAAAADwMAAAAAAAAAAAAA4DAAAAAAAAABAAAAEAMAAAAAAAAAAAAA8DAAAAAAAAABAAAAEQMAAAAAAAAAAAAAADEAAAAAAAABAAAAEgMAAAAAAAAAAAAAEDEAAAAAAAABAAAAEwMAAAAAAAAAAAAAIDEAAAAAAAABAAAAFAMAAAAAAAAAAAAAMDEAAAAAAAABAAAAFQMAAAAAAAAAAAAAQDEAAAAAAAABAAAAFgMAAAAAAAAAAAAAUDEAAAAAAAABAAAAFwMAAAAAAAAAAAAAYDEAAAAAAAABAAAAGAMAAAAAAAAAAAAAcDEAAAAAAAABAAAAGQMAAAAAAAAAAAAAgDEAAAAAAAABAAAAGgMAAAAAAAAAAAAAkDEAAAAAAAABAAAAGwMAAAAAAAAAAAAAoDEAAAAAAAABAAAAHAMAAAAAAAAAAAAAsDEAAAAAAAABAAAAHQMAAAAAAAAAAAAAwDEAAAAAAAABAAAAHgMAAAAAAAAAAAAA0DEAAAAAAAABAAAAHwMAAAAAAAAAAAAA4DEAAAAAAAABAAAAIAMAAAAAAAAAAAAA8DEAAAAAAAABAAAAIQMAAAAAAAAAAAAAADIAAAAAAAABAAAAIgMAAAAAAAAAAAAAEDIAAAAAAAABAAAAIwMAAAAAAAAAAAAAIDIAAAAAAAABAAAAJAMAAAAAAAAAAAAAMDIAAAAAAAABAAAAJQMAAAAAAAAAAAAAQDIAAAAAAAABAAAAJgMAAAAAAAAAAAAAUDIAAAAAAAABAAAAJwMAAAAAAAAAAAAAYDIAAAAAAAABAAAAKAMAAAAAAAAAAAAAcDIAAAAAAAABAAAAKQMAAAAAAAAAAAAAgDIAAAAAAAABAAAAKgMAAAAAAAAAAAAAkDIAAAAAAAABAAAAKwMAAAAAAAAAAAAAoDIAAAAAAAABAAAALAMAAAAAAAAAAAAAsDIAAAAAAAABAAAALQMAAAAAAAAAAAAAwDIAAAAAAAABAAAALgMAAAAAAAAAAAAA0DIAAAAAAAABAAAALwMAAAAAAAAAAAAA4DIAAAAAAAABAAAAMAMAAAAAAAAAAAAA8DIAAAAAAAABAAAAMQMAAAAAAAAAAAAAADMAAAAAAAABAAAAMgMAAAAAAAAAAAAAEDMAAAAAAAABAAAAMwMAAAAAAAAAAAAAIDMAAAAAAAABAAAANAMAAAAAAAAAAAAAMDMAAAAAAAABAAAANQMAAAAAAAAAAAAAQDMAAAAAAAABAAAANgMAAAAAAAAAAAAAUDMAAAAAAAABAAAANwMAAAAAAAAAAAAAYDMAAAAAAAABAAAAOAMAAAAAAAAAAAAAcDMAAAAAAAABAAAAOQMAAAAAAAAAAAAAgDMAAAAAAAABAAAAOgMAAAAAAAAAAAAAkDMAAAAAAAABAAAAOwMAAAAAAAAAAAAAoDMAAAAAAAABAAAAPAMAAAAAAAAAAAAAsDMAAAAAAAABAAAAPQMAAAAAAAAAAAAAwDMAAAAAAAABAAAAPgMAAAAAAAAAAAAA0DMAAAAAAAABAAAAPwMAAAAAAAAAAAAA4DMAAAAAAAABAAAAQAMAAAAAAAAAAAAA8DMAAAAAAAABAAAAQQMAAAAAAAAAAAAAADQAAAAAAAABAAAAQgMAAAAAAAAAAAAAEDQAAAAAAAABAAAAQwMAAAAAAAAAAAAAIDQAAAAAAAABAAAARAMAAAAAAAAAAAAAMDQAAAAAAAABAAAARQMAAAAAAAAAAAAAQDQAAAAAAAABAAAARgMAAAAAAAAAAAAAUDQAAAAAAAABAAAARwMAAAAAAAAAAAAAYDQAAAAAAAABAAAASAMAAAAAAAAAAAAAcDQAAAAAAAABAAAASQMAAAAAAAAAAAAAgDQAAAAAAAABAAAASgMAAAAAAAAAAAAAkDQAAAAAAAABAAAASwMAAAAAAAAAAAAAoDQAAAAAAAABAAAATAMAAAAAAAAAAAAAsDQAAAAAAAABAAAATQMAAAAAAAAAAAAAwDQAAAAAAAABAAAATgMAAAAAAAAAAAAA0DQAAAAAAAABAAAATwMAAAAAAAAAAAAA4DQAAAAAAAABAAAAUAMAAAAAAAAAAAAA8DQAAAAAAAABAAAAUQMAAAAAAAAAAAAAADUAAAAAAAABAAAAUgMAAAAAAAAAAAAAEDUAAAAAAAABAAAAUwMAAAAAAAAAAAAAIDUAAAAAAAABAAAAVAMAAAAAAAAAAAAAMDUAAAAAAAABAAAAVQMAAAAAAAAAAAAAQDUAAAAAAAABAAAAVgMAAAAAAAAAAAAAUDUAAAAAAAABAAAAVwMAAAAAAAAAAAAAYDUAAAAAAAABAAAAWAMAAAAAAAAAAAAAcDUAAAAAAAABAAAAWQMAAAAAAAAAAAAAgDUAAAAAAAABAAAAWgMAAAAAAAAAAAAAkDUAAAAAAAABAAAAWwMAAAAAAAAAAAAAoDUAAAAAAAABAAAAXAMAAAAAAAAAAAAAsDUAAAAAAAABAAAAXQMAAAAAAAAAAAAAwDUAAAAAAAABAAAAXgMAAAAAAAAAAAAA0DUAAAAAAAABAAAAXwMAAAAAAAAAAAAA4DUAAAAAAAABAAAAYAMAAAAAAAAAAAAA8DUAAAAAAAABAAAAYQMAAAAAAAAAAAAAADYAAAAAAAABAAAAYgMAAAAAAAAAAAAAEDYAAAAAAAABAAAAYwMAAAAAAAAAAAAAIDYAAAAAAAABAAAAZAMAAAAAAAAAAAAAMDYAAAAAAAABAAAAZQMAAAAAAAAAAAAAQDYAAAAAAAABAAAAZgMAAAAAAAAAAAAAUDYAAAAAAAABAAAAZwMAAAAAAAAAAAAAYDYAAAAAAAABAAAAaAMAAAAAAAAAAAAAcDYAAAAAAAABAAAAaQMAAAAAAAAAAAAAgDYAAAAAAAABAAAAagMAAAAAAAAAAAAAkDYAAAAAAAABAAAAawMAAAAAAAAAAAAAoDYAAAAAAAABAAAAbAMAAAAAAAAAAAAAsDYAAAAAAAABAAAAbQMAAAAAAAAAAAAAwDYAAAAAAAABAAAAbgMAAAAAAAAAAAAA0DYAAAAAAAABAAAAbwMAAAAAAAAAAAAA4DYAAAAAAAABAAAAcAMAAAAAAAAAAAAA8DYAAAAAAAABAAAAcQMAAAAAAAAAAAAAADcAAAAAAAABAAAAcgMAAAAAAAAAAAAAEDcAAAAAAAABAAAAcwMAAAAAAAAAAAAAIDcAAAAAAAABAAAAdAMAAAAAAAAAAAAAMDcAAAAAAAABAAAAdQMAAAAAAAAAAAAAQDcAAAAAAAABAAAAdgMAAAAAAAAAAAAAUDcAAAAAAAABAAAAdwMAAAAAAAAAAAAAYDcAAAAAAAABAAAAeAMAAAAAAAAAAAAAcDcAAAAAAAABAAAAeQMAAAAAAAAAAAAAgDcAAAAAAAABAAAAegMAAAAAAAAAAAAAkDcAAAAAAAABAAAAewMAAAAAAAAAAAAAoDcAAAAAAAABAAAAfAMAAAAAAAAAAAAAsDcAAAAAAAABAAAAfQMAAAAAAAAAAAAAwDcAAAAAAAABAAAAfgMAAAAAAAAAAAAA4DcAAAAAAAABAAAAfwMAAAAAAAAAAAAAADgAAAAAAAABAAAAgAMAAAAAAAAAAAAAIDgAAAAAAAABAAAAgQMAAAAAAAAAAAAAQDgAAAAAAAABAAAAggMAAAAAAAAAAAAAYDgAAAAAAAABAAAAgwMAAAAAAAAAAAAAgDgAAAAAAAABAAAAhAMAAAAAAAAAAAAAoDgAAAAAAAABAAAAhQMAAAAAAAAAAAAAwDgAAAAAAAABAAAAhgMAAAAAAAAAAAAA4DgAAAAAAAABAAAAhwMAAAAAAAAAAAAAADkAAAAAAAABAAAAiAMAAAAAAAAAAAAAIDkAAAAAAAABAAAAiQMAAAAAAAAAAAAAQDkAAAAAAAABAAAAigMAAAAAAAAAAAAAYDkAAAAAAAABAAAAiwMAAAAAAAAAAAAAgDkAAAAAAAABAAAAjAMAAAAAAAAAAAAAoDkAAAAAAAABAAAAjQMAAAAAAAAAAAAAwDkAAAAAAAABAAAAjgMAAAAAAAAAAAAA4DkAAAAAAAABAAAAjwMAAAAAAAAAAAAAADoAAAAAAAABAAAAkAMAAAAAAAAAAAAAIDoAAAAAAAABAAAAkQMAAAAAAAAAAAAAQDoAAAAAAAABAAAAkgMAAAAAAAAAAAAAYDoAAAAAAAABAAAAkwMAAAAAAAAAAAAAgDoAAAAAAAABAAAAlAMAAAAAAAAAAAAAoDoAAAAAAAABAAAAlQMAAAAAAAAAAAAAwDoAAAAAAAABAAAAlgMAAAAAAAAAAAAA4DoAAAAAAAABAAAAlwMAAAAAAAAAAAAAADsAAAAAAAABAAAAmAMAAAAAAAAAAAAAIDsAAAAAAAABAAAAmQMAAAAAAAAAAAAAQDsAAAAAAAABAAAAmgMAAAAAAAAAAAAAYDsAAAAAAAABAAAAmwMAAAAAAAAAAAAAgDsAAAAAAAABAAAAnAMAAAAAAAAAAAAAoDsAAAAAAAABAAAAnQMAAAAAAAAAAAAAwDsAAAAAAAABAAAAngMAAAAAAAAAAAAA4DsAAAAAAAABAAAAnwMAAAAAAAAAAAAAADwAAAAAAAABAAAAoAMAAAAAAAAAAAAAIDwAAAAAAAABAAAAoQMAAAAAAAAAAAAAQDwAAAAAAAABAAAAogMAAAAAAAAAAAAAYDwAAAAAAAABAAAAowMAAAAAAAAAAAAAgDwAAAAAAAABAAAApAMAAAAAAAAAAAAAoDwAAAAAAAABAAAApQMAAAAAAAAAAAAAwDwAAAAAAAABAAAApgMAAAAAAAAAAAAA4DwAAAAAAAABAAAApwMAAAAAAAAAAAAAAD0AAAAAAAABAAAAqAMAAAAAAAAAAAAAID0AAAAAAAABAAAAqQMAAAAAAAAAAAAAQD0AAAAAAAABAAAAqgMAAAAAAAAAAAAAYD0AAAAAAAABAAAAqwMAAAAAAAAAAAAAgD0AAAAAAAABAAAArAMAAAAAAAAAAAAAoD0AAAAAAAABAAAArQMAAAAAAAAAAAAAwD0AAAAAAAABAAAArgMAAAAAAAAAAAAA4D0AAAAAAAABAAAArwMAAAAAAAAAAAAAAD4AAAAAAAABAAAAsAMAAAAAAAAAAAAAID4AAAAAAAABAAAAsQMAAAAAAAAAAAAAQD4AAAAAAAABAAAAsgMAAAAAAAAAAAAAYD4AAAAAAAABAAAAswMAAAAAAAAAAAAAgD4AAAAAAAABAAAAtAMAAAAAAAAAAAAAoD4AAAAAAAABAAAAtQMAAAAAAAAAAAAAwD4AAAAAAAABAAAAtgMAAAAAAAAAAAAA4D4AAAAAAAABAAAAtwMAAAAAAAAAAAAAAD8AAAAAAAABAAAAuAMAAAAAAAAAAAAAID8AAAAAAAABAAAAuQMAAAAAAAAAAAAAQD8AAAAAAAABAAAAugMAAAAAAAAAAAAAYD8AAAAAAAABAAAAuwMAAAAAAAAAAAAAgD8AAAAAAAABAAAAvAMAAAAAAAAAAAAAAAAAAAAAAAABAAAAvQMAAAAAAAAAAAAAAC50ZXh0AC5ub3RlLkdOVS1zdGFjawAuc3RydGFiAC5zeW10YWIALnJlbGEuZGF0YS5yZWwucm8uX1pOMTdydXN0Y19lcnJvcl9jb2RlczExZXJyb3JfY29kZXMxMURJQUdOT1NUSUNTMTdoN2RiYWI3MGU3N2Q3MTVlM0UALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODk5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc5OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42OTkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTk5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ5OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zOTkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjk5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE5OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44ODkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzg5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY4OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41ODkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDg5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM4OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yODkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTg5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg3OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43NzkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjc5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU3OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40NzkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzc5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI3OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xNzkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODY5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc2OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42NjkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTY5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ2OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zNjkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjY5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE2OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44NTkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzU5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY1OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41NTkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDU5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM1OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yNTkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTU5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljk0OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44NDkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzQ5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY0OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41NDkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDQ5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM0OQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yNDkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTQ5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkzOQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MzkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzM5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYzOQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MzkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDM5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMzOQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMzkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTM5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkyOQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MjkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzI5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYyOQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MjkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDI5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMyOQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMjkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTI5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkxOQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MTkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzE5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYxOQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MTkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDE5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMxOQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMTkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTE5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkwOQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MDkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzA5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYwOQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MDkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDA5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMwOQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMDkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTA5AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODk4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc5OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42OTgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTk4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ5OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zOTgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjk4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE5OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44ODgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzg4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY4OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41ODgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDg4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM4OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yODgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTg4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg3OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43NzgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjc4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU3OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40NzgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzc4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI3OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xNzgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODY4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc2OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42NjgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTY4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ2OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zNjgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjY4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE2OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44NTgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzU4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY1OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41NTgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDU4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM1OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yNTgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTU4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljk0OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44NDgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzQ4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY0OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41NDgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDQ4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM0OAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yNDgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTQ4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkzOAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MzgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzM4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYzOAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MzgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDM4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMzOAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMzgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTM4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkyOAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MjgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzI4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYyOAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MjgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDI4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMyOAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMjgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTI4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkxOAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MTgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzE4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYxOAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MTgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDE4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMxOAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMTgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTE4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkwOAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MDgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzA4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYwOAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MDgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDA4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMwOAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMDgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTA4AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjgALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODk3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc5NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42OTcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTk3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ5NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zOTcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjk3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE5NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44ODcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzg3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY4NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41ODcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDg3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM4NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yODcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTg3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg3NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43NzcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjc3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU3NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40NzcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzc3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI3NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xNzcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODY3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc2NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42NjcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTY3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ2NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zNjcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjY3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE2NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44NTcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzU3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY1NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41NTcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDU3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM1NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yNTcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTU3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljk0NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44NDcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzQ3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY0NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41NDcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDQ3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM0NwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yNDcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTQ3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkzNwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MzcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzM3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYzNwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MzcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDM3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMzNwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMzcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTM3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkyNwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MjcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzI3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYyNwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MjcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDI3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMyNwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMjcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTI3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkxNwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MTcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzE3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYxNwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MTcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDE3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMxNwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMTcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTE3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkwNwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MDcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzA3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYwNwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MDcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDA3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMwNwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMDcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTA3AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjcALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODk2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc5NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42OTYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTk2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ5NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zOTYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjk2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE5NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44ODYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzg2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY4NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41ODYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDg2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM4NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yODYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTg2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg3NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43NzYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjc2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU3NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40NzYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzc2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI3NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xNzYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODY2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc2NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42NjYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTY2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ2NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zNjYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjY2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE2NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44NTYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzU2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY1NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41NTYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDU2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM1NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yNTYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTU2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljk0NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44NDYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzQ2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY0NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41NDYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDQ2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM0NgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yNDYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTQ2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkzNgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MzYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzM2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYzNgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MzYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDM2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMzNgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMzYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTM2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkyNgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MjYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzI2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYyNgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MjYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDI2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMyNgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMjYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTI2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkxNgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MTYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzE2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYxNgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MTYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDE2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMxNgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMTYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTE2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkwNgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MDYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzA2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYwNgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MDYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDA2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMwNgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMDYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTA2AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODk1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc5NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42OTUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTk1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ5NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zOTUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjk1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE5NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44ODUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzg1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY4NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41ODUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDg1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM4NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yODUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTg1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg3NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43NzUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjc1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU3NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40NzUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzc1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI3NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xNzUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODY1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc2NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42NjUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTY1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ2NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zNjUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjY1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE2NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42NQAucmVsYS5kYXRhLnJlbC5yby4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuOTU1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg1NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43NTUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjU1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU1NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40NTUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzU1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI1NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xNTUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuOTQ1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg0NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43NDUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjQ1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU0NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40NDUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzQ1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI0NQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xNDUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuOTM1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjgzNQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43MzUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjM1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjUzNQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40MzUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzM1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjIzNQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xMzUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuOTI1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjgyNQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43MjUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjI1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjUyNQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40MjUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzI1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjIyNQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xMjUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuOTE1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjgxNQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43MTUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjE1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjUxNQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40MTUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzE1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjIxNQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xMTUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuOTA1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjgwNQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43MDUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjA1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjUwNQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40MDUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzA1AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjIwNQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xMDUALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44OTQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzk0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY5NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41OTQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDk0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM5NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yOTQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTk0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljk0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg4NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43ODQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjg0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU4NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40ODQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzg0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI4NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xODQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODc0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc3NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42NzQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTc0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ3NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zNzQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjc0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE3NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44NjQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzY0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY2NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41NjQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDY0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM2NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yNjQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTY0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljk1NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44NTQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzU0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY1NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41NTQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDU0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM1NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yNTQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTU0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljk0NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44NDQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzQ0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY0NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41NDQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDQ0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM0NAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yNDQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTQ0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkzNAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MzQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzM0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYzNAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MzQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDM0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMzNAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMzQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTM0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkyNAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MjQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzI0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYyNAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MjQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDI0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMyNAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMjQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTI0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkxNAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MTQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzE0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYxNAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MTQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDE0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMxNAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMTQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTE0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkwNAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MDQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzA0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYwNAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MDQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDA0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMwNAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMDQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTA0AC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODkzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc5MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42OTMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTkzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ5MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zOTMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjkzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE5MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44ODMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzgzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY4MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41ODMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDgzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM4MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yODMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTgzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjgzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg3MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43NzMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjczAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU3MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40NzMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzczAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI3MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xNzMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODYzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc2MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42NjMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTYzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ2MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zNjMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjYzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE2MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45NTMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODUzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc1MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42NTMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTUzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ1MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zNTMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjUzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE1MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45NDMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODQzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc0MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42NDMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTQzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ0MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zNDMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjQzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE0MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40MwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45MzMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODMzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjczMwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42MzMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTMzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQzMwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zMzMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjMzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjEzMwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zMwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45MjMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODIzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjcyMwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42MjMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTIzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQyMwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zMjMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjIzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjEyMwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45MTMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODEzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjcxMwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42MTMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTEzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQxMwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zMTMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjEzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjExMwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xMwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45MDMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODAzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjcwMwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42MDMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTAzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQwMwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zMDMALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjAzAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjEwMwAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg5MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43OTIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjkyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU5MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40OTIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzkyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI5MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xOTIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuOTIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODgyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc4MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42ODIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTgyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ4MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zODIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjgyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE4MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44NzIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzcyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY3MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41NzIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDcyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM3MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yNzIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTcyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjcyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg2MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43NjIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjYyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU2MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40NjIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzYyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI2MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xNjIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuOTUyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg1MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43NTIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjUyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU1MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40NTIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzUyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI1MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xNTIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuOTQyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg0MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43NDIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjQyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU0MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40NDIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzQyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI0MgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xNDIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuOTMyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjgzMgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43MzIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjMyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjUzMgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40MzIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzMyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjIzMgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xMzIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuOTIyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjgyMgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43MjIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjIyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjUyMgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40MjIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzIyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjIyMgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xMjIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuOTEyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjgxMgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43MTIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjEyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjUxMgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40MTIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzEyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjIxMgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xMTIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuOTAyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjgwMgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43MDIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjAyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjUwMgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40MDIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzAyAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjIwMgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xMDIALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMgAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44OTEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzkxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY5MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41OTEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDkxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM5MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yOTEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTkxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg4MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43ODEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjgxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU4MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40ODEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzgxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI4MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xODEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODcxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc3MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42NzEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTcxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ3MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zNzEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjcxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE3MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44NjEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzYxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY2MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41NjEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDYxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM2MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yNjEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTYxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljk1MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44NTEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzUxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY1MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41NTEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDUxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM1MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yNTEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTUxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjUxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljk0MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44NDEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzQxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY0MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41NDEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDQxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM0MQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yNDEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTQxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkzMQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MzEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzMxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYzMQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MzEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDMxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMzMQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMzEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTMxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkyMQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MjEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzIxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYyMQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MjEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDIxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMyMQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMjEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTIxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjIxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkxMQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MTEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzExAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYxMQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MTEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDExAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMxMQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMTEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTExAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjExAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjkwMQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44MDEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzAxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjYwMQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MDEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDAxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjMwMQAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMDEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTAxAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjEALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODkwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc5MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42OTAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTkwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ5MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zOTAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjkwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE5MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC44ODAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzgwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjY4MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41ODAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNDgwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjM4MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yODAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMTgwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjgwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljg3MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC43NzAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNjcwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjU3MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40NzAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMzcwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjI3MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xNzAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNzAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODYwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc2MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42NjAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTYwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ2MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zNjAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjYwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE2MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45NTAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODUwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc1MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42NTAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTUwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ1MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zNTAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjUwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE1MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC41MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45NDAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODQwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0Ljc0MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42NDAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTQwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQ0MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zNDAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjQwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjE0MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC40MAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45MzAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODMwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjczMAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42MzAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTMwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQzMAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zMzAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjMwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjEzMAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zMAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45MjAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODIwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjcyMAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42MjAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTIwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQyMAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zMjAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjIwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjEyMAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4yMAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45MTAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODEwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjcxMAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42MTAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTEwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQxMAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zMTAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuMjEwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjExMAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4xMAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC45MDAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuODAwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjcwMAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC42MDAALnJvZGF0YS4uTGFub24uZWFiZDVlOWQyOTdiN2FmYmI3M2I3YjA5YTIyNGI4ZTQuNTAwAC5yb2RhdGEuLkxhbm9uLmVhYmQ1ZTlkMjk3YjdhZmJiNzNiN2IwOWEyMjRiOGU0LjQwMAAucm9kYXRhLi5MYW5vbi5lYWJkNWU5ZDI5N2I3YWZiYjczYjdiMDlhMjI0YjhlNC4zMDAALnJvZGF0YS4uTGFub24uZWFi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AAAAAAAAXDQFAAAAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAIJNAAABAAAAAgAAAAAAAAAAAAAAAAAAAGE0BQAAAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABBOgAAAQAAAAIAAAAAAAAAAAAAAAAAAABmNAUAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAACcAAAEAAAACAAAAAAAAAAAAAAAAAAAAazQFAAAAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAL8TAAABAAAAAgAAAAAAAAAAAAAAAAAAAHA0BQAAAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAB+AAAAAQAAAAIAAAAAAAAAAAAAAAAAAAB1NAUAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAARMAAAAEAAAACAAAAAAAAAAAAAAAAAAAAejQFAAAAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAM+sAAABAAAAAgAAAAAAAAAAAAAAAAAAAH80BQAAAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABamQAAAQAAAAIAAAAAAAAAAAAAAAAAAACENAUAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA5YUAAAEAAAACAAAAAAAAAAAAAAAAAAAAiTQFAAAAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAHByAAABAAAAAgAAAAAAAAAAAAAAAAAAAI40BQAAAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAD7XgAAAQAAAAIAAAAAAAAAAAAAAAAAAACTNAUAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAfEsAAAEAAAACAAAAAAAAAAAAAAAAAAAAmDQFAAAAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAADs4AAABAAAAAgAAAAAAAAAAAAAAAAAAAJ00BQAAAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAD6JAAAAQAAAAIAAAAAAAAAAAAAAAAA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AAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAACYyAAABAAAAAgAAAAAAAAAAAAAAAAAAADM1BQAAAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAADlHgAAAQAAAAIAAAAAAAAAAAAAAAAAAAA4NQUAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAApAsAAAEAAAACAAAAAAAAAAAAAAAAAAAAPTUFAAAAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAACi4AAABAAAAAgAAAAAAAAAAAAAAAAAAAEI1BQAAAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAACzpAAAAQAAAAIAAAAAAAAAAAAAAAAAAABHNQUAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAPpEAAAEAAAACAAAAAAAAAAAAAAAAAAAATDUFAAAAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAMl9AAABAAAAAgAAAAAAAAAAAAAAAAAAAFE1BQAAAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABUagAAAQAAAAIAAAAAAAAAAAAAAAAAAABWNQUAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA31YAAAEAAAACAAAAAAAAAAAAAAAAAAAAWzUFAAAAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAGBDAAABAAAAAgAAAAAAAAAAAAAAAAAAAGA1BQAAAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAfMAAAAQAAAAIAAAAAAAAAAAAAAAAAAABlNQUAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA3hwAAAEAAAACAAAAAAAAAAAAAAAAAAAAajUFAAAAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAJ0JAAABAAAAAgAAAAAAAAAAAAAAAAAAAG81BQAAAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAhtgAAAQAAAAIAAAAAAAAAAAAAAAAAAAB0NQUAAAAAAAUA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ciBzdWdnZXN0cyB0aGF0IHRoZSBleHByZXNzaW9uIGFybSBjb3JyZXNwb25kaW5nIHRvIHRoZSBub3RlZCBwYXR0ZXJuCndpbGwgbmV2ZXIgYmUgcmVhY2hlZCBhcyBmb3IgYWxsIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZXhwcmVzc2lvbiBiZWluZwptYXRjaGVkLCBvbmUgb2YgdGhlIHByZWNlZGluZyBwYXR0ZXJucyB3aWxsIG1hdGNoLgoKVGhpcyBtZWFucyB0aGF0IHBlcmhhcHMgc29tZSBvZiB0aGUgcHJlY2VkaW5nIHBhdHRlcm5zIGFyZSB0b28gZ2VuZXJhbCwgdGhpcwpvbmUgaXMgdG9vIHNwZWNpZmljIG9yIHRoZSBvcmRlcmluZyBpcyBpbmNvcnJlY3QuCgpGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBgbWF0Y2hgIGJsb2NrIGhhcyB0b28gbWFueSBhcm1zOgoKYGBgCm1hdGNoIFNvbWUoMCkgewogICAgU29tZShiYXIpID0+IHsvKiAuLi4gKi99CiAgICB4ID0+IHsvKiAuLi4gKi99IC8vIFRoaXMgaGFuZGxlcyB0aGUgYE5vbmVgIGNhc2UKICAgIF8gPT4gey8qIC4uLiAqL30gLy8gQWxsIHBvc3NpYmxlIGNhc2VzIGhhdmUgYWxyZWFkeSBiZWVuIGhhbmRsZWQKfQpgYGAKCmBtYXRjaGAgYmxvY2tzIGhhdmUgdGhlaXIgcGF0dGVybnMgbWF0Y2hlZCBpbiBvcmRlciwgc28sIGZvciBleGFtcGxlLCBwdXR0aW5nCmEgd2lsZGNhcmQgYXJtIGFib3ZlIGEgbW9yZSBzcGVjaWZpYyBhcm0gd2lsbCBtYWtlIHRoZSBsYXR0ZXIgYXJtIGlycmVsZXZhbnQuCgpFbnN1cmUgdGhlIG9yZGVyaW5nIG9mIHRoZSBtYXRjaCBhcm0gaXMgY29ycmVjdCBhbmQgcmVtb3ZlIGFueSBzdXBlcmZsdW91cwphcm1zLgoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8B6wbrBgABAOsGAMwGJggAAAQAAAAFAAC9Ag4GAAADAgUBBFNvbWUBAQCfDgABBAAAvQIOBgACAwABAKgCJAYAAAIBAQCfDgACAKkCEgcAnw4FAQVFMDAwMQABHwUFAAEABQCoAiQGAAACAQEBpA4AAQMAAPsGJgoAAAkAAAIA+wYmCgCfDgUBsQUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IGFuIGVtcHR5IG1hdGNoIGV4cHJlc3Npb24gaXMgaW52YWxpZCBiZWNhdXNlIHRoZSB0eXBlCml0IGlzIG1hdGNoaW5nIG9uIGlzIG5vbi1lbXB0eSAodGhlcmUgZXhpc3QgdmFsdWVzIG9mIHRoaXMgdHlwZSkuIEluIHNhZmUgY29kZQppdCBpcyBpbXBvc3NpYmxlIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhbiBlbXB0eSB0eXBlLCBzbyBlbXB0eSBtYXRjaApleHByZXNzaW9ucyBhcmUgYWxtb3N0IG5ldmVyIGRlc2lyZWQuIFRoaXMgZXJyb3IgaXMgdHlwaWNhbGx5IGZpeGVkIGJ5IGFkZGluZwpvbmUgb3IgbW9yZSBjYXNlcyB0byB0aGUgbWF0Y2ggZXhwcmVzc2lvbi4KCkFuIGV4YW1wbGUgb2YgYW4gZW1wdHkgdHlwZSBpcyBgZW51bSBFbXB0eSB7IH1gLiBTbywgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6CgpgYGAKZW51bSBFbXB0eSB7fQoKZm4gZm9vKHg6IEVtcHR5KSB7CiAgICBtYXRjaCB4IHsKICAgICAgICAvLyBlbXB0eQogICAgfQp9CmBgYAoKSG93ZXZlciwgdGhpcyB3b24ndDoKCmBgYGNvbXBpbGVfZmFpbApmbiBmb28oeDogT3B0aW9uPFN0cmluZz4pIHsKICAgIG1hdGNoIHggewogICAgICAgIC8vIGVtcHR5CiAgICB9Cn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////3+xBbEFAAEAsQUA+wYmCgAACAAAAAkAAL0CDgYAAAcCBQEEU29tZQEBAJ8OAAEIAAC9Ag4GAAIHAAEAqAIkBgAABgEBAJ8OAAIAqQISCQCfDgUBBUUwMDAyAAEfBQUAAQAFAKgCJAYAAAYBAQGkDgABBwAAqgcmDAAADQAAAgCqByYMAJ8OBQHtCFRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbXBpbGVyIGNhbm5vdCBndWFyYW50ZWUgYSBtYXRjaGluZyBwYXR0ZXJuIGZvcgpvbmUgb3IgbW9yZSBwb3NzaWJsZSBpbnB1dHMgdG8gYSBtYXRjaCBleHByZXNzaW9uLiBHdWFyYW50ZWVkIG1hdGNoZXMgYXJlCnJlcXVpcmVkIGluIG9yZGVyIHRvIGFzc2lnbiB2YWx1ZXMgdG8gbWF0Y2ggZXhwcmVzc2lvbnMsIG9yIGFsdGVybmF0aXZlbHksCmRldGVybWluZSB0aGUgZmxvdyBvZiBleGVjdXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDA0CmVudW0gVGVybWluYXRvciB7CiAgICBIYXN0YUxhVmlzdGFCYWJ5LAogICAgVGFsa1RvTXlIYW5kLAp9CgpsZXQgeCA9IFRlcm1pbmF0b3I6Okhhc3RhTGFWaXN0YUJhYnk7CgptYXRjaCB4IHsgLy8gZXJyb3I6IG5vbi1leGhhdXN0aXZlIHBhdHRlcm5zOiBgSGFzdGFMYVZpc3RhQmFieWAgbm90IGNvdmVyZWQKICAgIFRlcm1pbmF0b3I6OlRhbGtUb015SGFuZCA9PiB7fQp9CmBgYAoKSWYgeW91IGVuY291bnRlciB0aGlzIGVycm9yIHlvdSBtdXN0IGFsdGVyIHlvdXIgcGF0dGVybnMgc28gdGhhdCBldmVyeSBwb3NzaWJsZQp2YWx1ZSBvZiB0aGUgaW5wdXQgdHlwZSBpcyBtYXRjaGVkLiBGb3IgdHlwZXMgd2l0aCBhIHNtYWxsIG51bWJlciBvZiB2YXJpYW50cwoobGlrZSBlbnVtcykgeW91IHNob3VsZCBwcm9iYWJseSBjb3ZlciBhbGwgY2FzZXMgZXhwbGljaXRseS4gQWx0ZXJuYXRpdmVseSwgdGhlCnVuZGVyc2NvcmUgYF9gIHdpbGRjYXJkIHBhdHRlcm4gY2FuIGJlIGFkZGVkIGFmdGVyIGFsbCBvdGhlciBwYXR0ZXJucyB0byBtYXRjaAoiYW55dGhpbmcgZWxzZSIuIEV4YW1wbGU6CgpgYGAKZW51bSBUZXJtaW5hdG9yIHsKICAgIEhhc3RhTGFWaXN0YUJhYnksCiAgICBUYWxrVG9NeUhhbmQsCn0KCmxldCB4ID0gVGVybWluYXRvcjo6SGFzdGFMYVZpc3RhQmFieTsKCm1hdGNoIHggewogICAgVGVybWluYXRvcjo6VGFsa1RvTXlIYW5kID0+IHt9CiAgICBUZXJtaW5hdG9yOjpIYXN0YUxhVmlzdGFCYWJ5ID0+IHt9Cn0KCi8vIG9yOgoKbWF0Y2ggeCB7CiAgICBUZXJtaW5hdG9yOjpUYWxrVG9NeUhhbmQgPT4ge30KICAgIF8gPT4ge30KfQpgYGAKABL///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////wftCO0IAAEA7QgAqgcmDAAADAAAAA0AAL0CDgYAAAsCBQEEU29tZQEBAJ8OAAEMAAC9Ag4GAAILAAEAqAIkBgAACgEBAJ8OAAIAqQISCwCfDgUBBUUwMDA0AAEfBQUAAQAFAKgCJAYAAAoBAQGkDgABCwAA2QcmDgAAEQAAAgDZByYOAJ8OBQGpBFBhdHRlcm5zIHVzZWQgdG8gYmluZCBuYW1lcyBtdXN0IGJlIGlycmVmdXRhYmxlLCB0aGF0IGlzLCB0aGV5IG11c3QgZ3VhcmFudGVlCnRoYXQgYSBuYW1lIHdpbGwgYmUgZXh0cmFjdGVkIGluIGFsbCBjYXNlcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMDUKbGV0IHggPSBTb21lKDEpOwpsZXQgU29tZSh5KSA9IHg7Ci8vIGVycm9yOiByZWZ1dGFibGUgcGF0dGVybiBpbiBsb2NhbCBiaW5kaW5nOiBgTm9uZWAgbm90IGNvdmVyZWQKYGBgCgpJZiB5b3UgZW5jb3VudGVyIHRoaXMgZXJyb3IgeW91IHByb2JhYmx5IG5lZWQgdG8gdXNlIGEgYG1hdGNoYCBvciBgaWYgbGV0YCB0bwpkZWFsIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGZhaWx1cmUuIEV4YW1wbGU6CgpgYGAKbGV0IHggPSBTb21lKDEpOwoKbWF0Y2ggeCB7CiAgICBTb21lKHkpID0+IHsKICAgICAgICAvLyBkbyBzb21ldGhpbmcKICAgIH0sCiAgICBOb25lID0+IHt9Cn0KCi8vIG9yOgoKaWYgbGV0IFNvbWUoeSkgPSB4IHsKICAgIC8vIGRvIHNvbWV0aGluZwp9CmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8/qQSpBAABAKkEANkHJg4AABAAAAARAAC9Ag4GAAAPAgUBBFNvbWUBAQCfDgABEAAAvQIOBgACDwABAKgCJAYAAA4BAQCfDgACAKkCEg0Anw4FAQVFMDAwNQABHwUFAAEABQCoAiQGAAAOAQEBpA4AAQ8AAIgIJhAAABUAAAIAiAgmEACfDgUBxwRUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBiaW5kaW5ncyBpbiBhIG1hdGNoIGFybSB3b3VsZCByZXF1aXJlIGEgdmFsdWUgdG8KYmUgbW92ZWQgaW50byBtb3JlIHRoYW4gb25lIGxvY2F0aW9uLCB0aHVzIHZpb2xhdGluZyB1bmlxdWUgb3duZXJzaGlwLiBDb2RlCmxpa2UgdGhlIGZvbGxvd2luZyBpcyBpbnZhbGlkIGFzIGl0IHJlcXVpcmVzIHRoZSBlbnRpcmUgYE9wdGlvbjxTdHJpbmc+YCB0byBiZQptb3ZlZCBpbnRvIGEgdmFyaWFibGUgY2FsbGVkIGBvcF9zdHJpbmdgIHdoaWxlIHNpbXVsdGFuZW91c2x5IHJlcXVpcmluZyB0aGUKaW5uZXIgYFN0cmluZ2AgdG8gYmUgbW92ZWQgaW50byBhIHZhcmlhYmxlIGNhbGxlZCBgc2AuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDA3CmxldCB4ID0gU29tZSgicyIudG9fc3RyaW5nKCkpOwoKbWF0Y2ggeCB7CiAgICBvcF9zdHJpbmcgQCBTb21lKHMpID0+IHt9LCAvLyBlcnJvcjogY2Fubm90IGJpbmQgYnktbW92ZSB3aXRoIHN1Yi1iaW5kaW5ncwogICAgTm9uZSA9PiB7fSwKfQpgYGAKClNlZSBhbHNvIHRoZSBlcnJvciBFMDMwMy4KAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wF/xwTHBAABAMcEAIgIJhAAABQAAAAVAAC9Ag4GAAATAgUBBFNvbWUBAQCfDgABFAAAvQIOBgACEwABAKgCJAYAABIBAQCfDgACAKkCEg8Anw4FAQVFMDAwNwABHwUFAAEABQCoAiQGAAASAQEBpA4AARMAALcIJhIAABkAAAIAtwgmEgCfDgUB3ggjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpJbiBhIHBhdHRlcm4sIGFsbCB2YWx1ZXMgdGhhdCBkb24ndCBpbXBsZW1lbnQgdGhlIGBDb3B5YCB0cmFpdCBoYXZlIHRvIGJlIGJvdW5kCnRoZSBzYW1lIHdheS4gVGhlIGdvYWwgaGVyZSBpcyB0byBhdm9pZCBiaW5kaW5nIHNpbXVsdGFuZW91c2x5IGJ5LW1vdmUgYW5kCmJ5LXJlZi4KClRoaXMgbGltaXRhdGlvbiBtYXkgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFJ1c3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUobW92ZV9yZWZfcGF0dGVybildCgpzdHJ1Y3QgWCB7IHg6ICgpLCB9CgpsZXQgeCA9IFNvbWUoKFggeyB4OiAoKSB9LCBYIHsgeDogKCkgfSkpOwptYXRjaCB4IHsKICAgIFNvbWUoKHksIHJlZiB6KSkgPT4ge30sIC8vIGVycm9yOiBjYW5ub3QgYmluZCBieS1tb3ZlIGFuZCBieS1yZWYgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgc2FtZSBwYXR0ZXJuCiAgICBOb25lID0+IHBhbmljISgpCn0KYGBgCgpZb3UgaGF2ZSB0d28gc29sdXRpb25zOgoKU29sdXRpb24gIzE6IEJpbmQgdGhlIHBhdHRlcm4ncyB2YWx1ZXMgdGhlIHNhbWUgd2F5LgoKYGBgCnN0cnVjdCBYIHsgeDogKCksIH0KCmxldCB4ID0gU29tZSgoWCB7IHg6ICgpIH0sIFggeyB4OiAoKSB9KSk7Cm1hdGNoIHggewogICAgU29tZSgocmVmIHksIHJlZiB6KSkgPT4ge30sCiAgICAvLyBvciBTb21lKCh5LCB6KSkgPT4ge30KICAgIE5vbmUgPT4gcGFuaWMhKCkKfQpgYGAKClNvbHV0aW9uICMyOiBJbXBsZW1lbnQgdGhlIGBDb3B5YCB0cmFpdCBmb3IgdGhlIGBYYCBzdHJ1Y3R1cmUuCgpIb3dldmVyLCBwbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGZpcnN0IHNvbHV0aW9uIHNob3VsZCBiZSBwcmVmZXJyZWQuCgpgYGAKI1tkZXJpdmUoQ2xvbmUsIENvcHkpXQpzdHJ1Y3QgWCB7IHg6ICgpLCB9CgpsZXQgeCA9IFNvbWUoKFggeyB4OiAoKSB9LCBYIHsgeDogKCkgfSkpOwptYXRjaCB4IHsKICAgIFNvbWUoKHksIHJlZiB6KSkgPT4ge30sCiAgICBOb25lID0+IHBhbmljISgpCn0KYGBgCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////A94I3ggAAQDeCAC3CCYSAAAYAAAAGQAAvQIOBgAAFwIFAQRTb21lAQEAnw4AARgAAL0CDgYAAhcAAQCoAiQGAAAWAQEAnw4AAgCpAhIRAJ8OBQEFRTAwMDkAAR8FBQABAAUAqAIkBgAAFgEBAaQOAAEXAADmCCYUAAAdAAACAOYIJhQAnw4FAc8CVGhlIHZhbHVlIG9mIHN0YXRpY3MgYW5kIGNvbnN0YW50cyBtdXN0IGJlIGtub3duIGF0IGNvbXBpbGUgdGltZSwgYW5kIHRoZXkgbGl2ZQpmb3IgdGhlIGVudGlyZSBsaWZldGltZSBvZiBhIHByb2dyYW0uIENyZWF0aW5nIGEgYm94ZWQgdmFsdWUgYWxsb2NhdGVzIG1lbW9yeSBvbgp0aGUgaGVhcCBhdCBydW50aW1lLCBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSBkb25lIGF0IGNvbXBpbGUgdGltZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMTAKIyFbZmVhdHVyZShib3hfc3ludGF4KV0KCmNvbnN0IENPTiA6IEJveDxpMzI+ID0gYm94IDA7CmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B//8BzwLPAgABAM8CAOYIJhQAABwAAAAdAAC9Ag4GAAAbAgUBBFNvbWUBAQCfDgABHAAAvQIOBgACGwABAKgCJAYAABoBAQCfDgACAKkCEhMAnw4FAQVFMDAxMAABHwUFAAEABQCoAiQGAAAaAQEBpA4AARsAAJUJJhYAACEAAAIAlQkmFgCfDgUBhANTdGF0aWMgYW5kIGNvbnN0IHZhcmlhYmxlcyBjYW4gcmVmZXIgdG8gb3RoZXIgY29uc3QgdmFyaWFibGVzLiBCdXQgYSBjb25zdAp2YXJpYWJsZSBjYW5ub3QgcmVmZXIgdG8gYSBzdGF0aWMgdmFyaWFibGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDEzCnN0YXRpYyBYOiBpMzIgPSA0MjsKY29uc3QgWTogaTMyID0gWDsKYGBgCgpJbiB0aGlzIGV4YW1wbGUsIGBZYCBjYW5ub3QgcmVmZXIgdG8gYFhgIGhlcmUuIFRvIGZpeCB0aGlzLCB0aGUgdmFsdWUgY2FuIGJlCmV4dHJhY3RlZCBhcyBhIGNvbnN0IGFuZCB0aGVuIHVzZWQ6CgpgYGAKY29uc3QgQTogaTMyID0gNDI7CnN0YXRpYyBYOiBpMzIgPSBBOwpjb25zdCBZOiBpMzIgPSBBOwpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEPhAOEAwABAIQDAJUJJhYAACAAAAAhAAC9Ag4GAAAfAgUBBFNvbWUBAQCfDgABIAAAvQIOBgACHwABAKgCJAYAAB4BAQCfDgACAKkCEhUAnw4FAQVFMDAxMwABHwUFAAEABQCoAiQGAAAeAQEBpA4AAR8AAMQJJhgAACUAAAIAxAkmGACfDgUByQQjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpDb25zdGFudHMgY2FuIG9ubHkgYmUgaW5pdGlhbGl6ZWQgYnkgYSBjb25zdGFudCB2YWx1ZSBvciwgaW4gYSBmdXR1cmUKdmVyc2lvbiBvZiBSdXN0LCBhIGNhbGwgdG8gYSBjb25zdCBmdW5jdGlvbi4gVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhlIHVzZQpvZiBhIHBhdGggKGxpa2UgYTo6Yiwgb3IgeCkgZGVub3Rpbmcgc29tZXRoaW5nIG90aGVyIHRoYW4gb25lIG9mIHRoZXNlCmFsbG93ZWQgaXRlbXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgCmNvbnN0IEZPTzogaTMyID0geyBsZXQgeCA9IDA7IHggfTsgLy8gJ3gnIGlzbid0IGEgY29uc3RhbnQgbm9yIGEgZnVuY3Rpb24hCmBgYAoKVG8gYXZvaWQgaXQsIHlvdSBoYXZlIHRvIHJlcGxhY2UgdGhlIG5vbi1jb25zdGFudCB2YWx1ZToKCmBgYApjb25zdCBGT086IGkzMiA9IHsgY29uc3QgWCA6IGkzMiA9IDA7IFggfTsKLy8gb3IgZXZlbjoKY29uc3QgRk9PMjogaTMyID0geyAwIH07IC8vIGJ1dCBicmFja2V0cyBhcmUgdXNlbGVzcyBoZXJlCmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8DyQTJBAABAMkEAMQJJhgAACQAAAAlAAC9Ag4GAAAjAgUBBFNvbWUBAQCfDgABJAAAvQIOBgACIwABAKgCJAYAACIBAQCfDgACAKkCEhcAnw4FAQVFMDAxNAABHwUFAAEABQCoAiQGAAAiAQEBpA4AASMAAPMJJhoAACkAAAIA8wkmGgCfDgUBtwVBIGNvbnN0YW50IGl0ZW0gd2FzIGluaXRpYWxpemVkIHdpdGggc29tZXRoaW5nIHRoYXQgaXMgbm90IGEgY29uc3RhbnQKZXhwcmVzc2lvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMTUKZm4gY3JlYXRlX3NvbWUoKSAtPiBPcHRpb248dTg+IHsKICAgIFNvbWUoMSkKfQoKY29uc3QgRk9POiBPcHRpb248dTg+ID0gY3JlYXRlX3NvbWUoKTsgLy8gZXJyb3IhCmBgYAoKVGhlIG9ubHkgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGNhbGxlZCBpbiBzdGF0aWMgb3IgY29uc3RhbnQgZXhwcmVzc2lvbnMgYXJlCmBjb25zdGAgZnVuY3Rpb25zLCBhbmQgc3RydWN0L2VudW0gY29uc3RydWN0b3JzLgoKVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBjYW4gZGVjbGFyZSBgY3JlYXRlX3NvbWVgIGFzIGEgY29uc3RhbnQgZnVuY3Rpb246CgpgYGAKY29uc3QgZm4gY3JlYXRlX3NvbWUoKSAtPiBPcHRpb248dTg+IHsgLy8gZGVjbGFyZWQgYXMgYSBjb25zdCBmdW5jdGlvbgogICAgU29tZSgxKQp9Cgpjb25zdCBGT086IE9wdGlvbjx1OD4gPSBjcmVhdGVfc29tZSgpOyAvLyBvayEKCi8vIFRoZXNlIGFyZSBhbHNvIHdvcmtpbmc6CnN0cnVjdCBCYXIgewogICAgeDogdTgsCn0KCmNvbnN0IE9USEVSX0ZPTzogT3B0aW9uPHU4PiA9IFNvbWUoMSk7CmNvbnN0IEJBUjogQmFyID0gQmFyIHt4OiAxfTsKYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8/twW3BQABALcFAPMJJhoAACgAAAApAAC9Ag4GAAAnAgUBBFNvbWUBAQCfDgABKAAAvQIOBgACJwABAKgCJAYAACYBAQCfDgACAKkCEhkAnw4FAQVFMDAxNQABHwUFAAEABQCoAiQGAAAmAQEBpA4AAScAAKIKJhwAAC0AAAIAogomHACfDgUBhwVBIGZ1bmN0aW9uIGNhbGwgaXNuJ3QgYWxsb3dlZCBpbiB0aGUgY29uc3QncyBpbml0aWFsaXphdGlvbiBleHByZXNzaW9uCmJlY2F1c2UgdGhlIGV4cHJlc3Npb24ncyB2YWx1ZSBtdXN0IGJlIGtub3duIGF0IGNvbXBpbGUtdGltZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMTkKIyFbZmVhdHVyZShib3hfc3ludGF4KV0KCmZuIG1haW4oKSB7CiAgICBzdHJ1Y3QgTXlPd25lZDsKCiAgICBzdGF0aWMgU1RBVElDMTE6IEJveDxNeU93bmVkPiA9IGJveCBNeU93bmVkOyAvLyBlcnJvciEKfQpgYGAKClJlbWVtYmVyOiB5b3UgY2FuJ3QgdXNlIGEgZnVuY3Rpb24gY2FsbCBpbnNpZGUgYSBjb25zdCdzIGluaXRpYWxpemF0aW9uCmV4cHJlc3Npb24hIEhvd2V2ZXIsIHlvdSBjYW4gdG90YWxseSB1c2UgaXQgYW55d2hlcmUgZWxzZToKCmBgYAplbnVtIFRlc3QgewogICAgVjEKfQoKaW1wbCBUZXN0IHsKICAgIGZuIGZ1bmMoJnNlbGYpIC0+IGkzMiB7CiAgICAgICAgMTIKICAgIH0KfQoKZm4gbWFpbigpIHsKICAgIGNvbnN0IEZPTzogVGVzdCA9IFRlc3Q6OlYxOwoKICAgIEZPTy5mdW5jKCk7IC8vIGhlcmUgaXMgZ29vZAogICAgbGV0IHggPSBGT08uZnVuYygpOyAvLyBvciBldmVuIGhlcmUhCn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AX+HBYcFAAEAhwUAogomHAAALAAAAC0AAL0CDgYAACsCBQEEU29tZQEBAJ8OAAEsAAC9Ag4GAAIrAAEAqAIkBgAAKgEBAJ8OAAIAqQISGwCfDgUBBUUwMDE5AAEfBQUAAQAFAKgCJAYAACoBAQGkDgABKwAA0QomHgAAMQAAAgDRCiYeAJ8OBQG3CEEgcGF0dGVybiBhdHRlbXB0ZWQgdG8gZXh0cmFjdCBhbiBpbmNvcnJlY3QgbnVtYmVyIG9mIGZpZWxkcyBmcm9tIGEgdmFyaWFudC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMjMKZW51bSBGcnVpdCB7CiAgICBBcHBsZShTdHJpbmcsIFN0cmluZyksCiAgICBQZWFyKHUzMiksCn0KCmxldCB4ID0gRnJ1aXQ6OkFwcGxlKFN0cmluZzo6bmV3KCksIFN0cmluZzo6bmV3KCkpOwoKbWF0Y2ggeCB7CiAgICBGcnVpdDo6QXBwbGUoYSkgPT4ge30sIC8vIGVycm9yIQogICAgXyA9PiB7fQp9CmBgYAoKQSBwYXR0ZXJuIHVzZWQgdG8gbWF0Y2ggYWdhaW5zdCBhbiBlbnVtIHZhcmlhbnQgbXVzdCBwcm92aWRlIGEgc3ViLXBhdHRlcm4gZm9yCmVhY2ggZmllbGQgb2YgdGhlIGVudW0gdmFyaWFudC4KCkhlcmUgdGhlIGBBcHBsZWAgdmFyaWFudCBoYXMgdHdvIGZpZWxkcywgYW5kIHNob3VsZCBiZSBtYXRjaGVkIGFnYWluc3QgbGlrZSBzbzoKCmBgYAplbnVtIEZydWl0IHsKICAgIEFwcGxlKFN0cmluZywgU3RyaW5nKSwKICAgIFBlYXIodTMyKSwKfQoKbGV0IHggPSBGcnVpdDo6QXBwbGUoU3RyaW5nOjpuZXcoKSwgU3RyaW5nOjpuZXcoKSk7CgovLyBDb3JyZWN0LgptYXRjaCB4IHsKICAgIEZydWl0OjpBcHBsZShhLCBiKSA9PiB7fSwKICAgIF8gPT4ge30KfQpgYGAKCk1hdGNoaW5nIHdpdGggdGhlIHdyb25nIG51bWJlciBvZiBmaWVsZHMgaGFzIG5vIHNlbnNpYmxlIGludGVycHJldGF0aW9uOgoKYGBgY29tcGlsZV9mYWlsLEUwMDIzCmVudW0gRnJ1aXQgewogICAgQXBwbGUoU3RyaW5nLCBTdHJpbmcpLAogICAgUGVhcih1MzIpLAp9CgpsZXQgeCA9IEZydWl0OjpBcHBsZShTdHJpbmc6Om5ldygpLCBTdHJpbmc6Om5ldygpKTsKCi8vIEluY29ycmVjdC4KbWF0Y2ggeCB7CiAgICBGcnVpdDo6QXBwbGUoYSkgPT4ge30sCiAgICBGcnVpdDo6QXBwbGUoYSwgYiwgYykgPT4ge30sCn0KYGBgCgpDaGVjayBob3cgbWFueSBmaWVsZHMgdGhlIGVudW0gd2FzIGRlY2xhcmVkIHdpdGggYW5kIGVuc3VyZSB0aGF0IHlvdXIgcGF0dGVybgp1c2VzIHRoZSBzYW1lIG51bWJlci4KABH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////z+3CLcIAAEAtwgA0QomHgAAMAAAADEAAL0CDgYAAC8CBQEEU29tZQEBAJ8OAAEwAAC9Ag4GAAIvAAEAqAIkBgAALgEBAJ8OAAIAqQISHQCfDgUBBUUwMDIzAAEfBQUAAQAFAKgCJAYAAC4BAQGkDgABLwAAgAsmIAAANQAAAgCACyYgAJ8OBQHwBEVhY2ggZmllbGQgb2YgYSBzdHJ1Y3QgY2FuIG9ubHkgYmUgYm91bmQgb25jZSBpbiBhIHBhdHRlcm4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDI1CnN0cnVjdCBGb28gewogICAgYTogdTgsCiAgICBiOiB1OCwKfQoKZm4gbWFpbigpewogICAgbGV0IHggPSBGb28geyBhOjEsIGI6MiB9OwoKICAgIGxldCBGb28geyBhOiB4LCBhOiB5IH0gPSB4OwogICAgLy8gZXJyb3I6IGZpZWxkIGBhYCBib3VuZCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgcGF0dGVybgp9CmBgYAoKRWFjaCBvY2N1cnJlbmNlIG9mIGEgZmllbGQgbmFtZSBiaW5kcyB0aGUgdmFsdWUgb2YgdGhhdCBmaWVsZCwgc28gdG8gZml4IHRoaXMKZXJyb3IgeW91IHdpbGwgaGF2ZSB0byByZW1vdmUgb3IgYWx0ZXIgdGhlIGR1cGxpY2F0ZSB1c2VzIG9mIHRoZSBmaWVsZCBuYW1lLgpQZXJoYXBzIHlvdSBtaXNzcGVsbGVkIGFub3RoZXIgZmllbGQgbmFtZT8gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIGE6IHU4LAogICAgYjogdTgsCn0KCmZuIG1haW4oKXsKICAgIGxldCB4ID0gRm9vIHsgYToxLCBiOjIgfTsKCiAgICBsZXQgRm9vIHsgYTogeCwgYjogeSB9ID0geDsgLy8gb2shCn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////P/AE8AQAAQDwBACACyYgAAA0AAAANQAAvQIOBgAAMwIFAQRTb21lAQEAnw4AATQAAL0CDgYAAjMAAQCoAiQGAAAyAQEAnw4AAgCpAhIfAJ8OBQEFRTAwMjUAAR8FBQABAAUAqAIkBgAAMgEBAaQOAAEzAACvCyYiAAA5AAACAK8LJiIAnw4FAdcFQSBzdHJ1Y3QgcGF0dGVybiBhdHRlbXB0ZWQgdG8gZXh0cmFjdCBhIG5vbi1leGlzdGVudCBmaWVsZCBmcm9tIGEgc3RydWN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAyNgpzdHJ1Y3QgVGhpbmcgewogICAgeDogdTMyLAogICAgeTogdTMyLAp9CgpsZXQgdGhpbmcgPSBUaGluZyB7IHg6IDAsIHk6IDAgfTsKCm1hdGNoIHRoaW5nIHsKICAgIFRoaW5nIHsgeCwgeiB9ID0+IHt9IC8vIGVycm9yOiBgVGhpbmc6OnpgIGZpZWxkIGRvZXNuJ3QgZXhpc3QKfQpgYGAKCklmIHlvdSBhcmUgdXNpbmcgc2hvcnRoYW5kIGZpZWxkIHBhdHRlcm5zIGJ1dCB3YW50IHRvIHJlZmVyIHRvIHRoZSBzdHJ1Y3QgZmllbGQKYnkgYSBkaWZmZXJlbnQgbmFtZSwgeW91IHNob3VsZCByZW5hbWUgaXQgZXhwbGljaXRseS4gU3RydWN0IGZpZWxkcyBhcmUKaWRlbnRpZmllZCBieSB0aGUgbmFtZSB1c2VkIGJlZm9yZSB0aGUgY29sb24gYDpgIHNvIHN0cnVjdCBwYXR0ZXJucyBzaG91bGQKcmVzZW1ibGUgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBzdHJ1Y3QgdHlwZSBiZWluZyBtYXRjaGVkLgoKYGBgCnN0cnVjdCBUaGluZyB7CiAgICB4OiB1MzIsCiAgICB5OiB1MzIsCn0KCmxldCB0aGluZyA9IFRoaW5nIHsgeDogMCwgeTogMCB9OwoKbWF0Y2ggdGhpbmcgewogICAgVGhpbmcgeyB4LCB5OiB6IH0gPT4ge30gLy8gd2UgcmVuYW1lZCBgeWAgdG8gYHpgCn0KYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8D1wXXBQABANcFAK8LJiIAADgAAAA5AAC9Ag4GAAA3AgUBBFNvbWUBAQCfDgABOAAAvQIOBgACNwABAKgCJAYAADYBAQCfDgACAKkCEiEAnw4FAQVFMDAyNgABHwUFAAEABQCoAiQGAAA2AQEBpA4AATcAAN4LJiQAAD0AAAIA3gsmJACfDgUBvQVBIHBhdHRlcm4gZm9yIGEgc3RydWN0IGZhaWxzIHRvIHNwZWNpZnkgYSBzdWItcGF0dGVybiBmb3IgZXZlcnkgb25lIG9mIHRoZQpzdHJ1Y3QncyBmaWVsZHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDI3CnN0cnVjdCBEb2cgewogICAgbmFtZTogU3RyaW5nLAogICAgYWdlOiB1MzIsCn0KCmxldCBkID0gRG9nIHsgbmFtZTogIlJ1c3R5Ii50b19zdHJpbmcoKSwgYWdlOiA4IH07CgovLyBUaGlzIGlzIGluY29ycmVjdC4KbWF0Y2ggZCB7CiAgICBEb2cgeyBhZ2U6IHggfSA9PiB7fQp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGVuc3VyZSB0aGF0IGVhY2ggZmllbGQgZnJvbSB0aGUgc3RydWN0J3MgZGVmaW5pdGlvbiBpcwptZW50aW9uZWQgaW4gdGhlIHBhdHRlcm4sIG9yIHVzZSBgLi5gIHRvIGlnbm9yZSB1bndhbnRlZCBmaWVsZHMuIEV4YW1wbGU6CgpgYGAKc3RydWN0IERvZyB7CiAgICBuYW1lOiBTdHJpbmcsCiAgICBhZ2U6IHUzMiwKfQoKbGV0IGQgPSBEb2cgeyBuYW1lOiAiUnVzdHkiLnRvX3N0cmluZygpLCBhZ2U6IDggfTsKCm1hdGNoIGQgewogICAgRG9nIHsgbmFtZTogcmVmIG4sIGFnZTogeCB9ID0+IHt9Cn0KCi8vIFRoaXMgaXMgYWxzbyBjb3JyZWN0IChpZ25vcmUgdW51c2VkIGZpZWxkcykuCm1hdGNoIGQgewogICAgRG9nIHsgYWdlOiB4LCAuLiB9ID0+IHt9Cn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////H70FvQUAAQC9BQDeCyYkAAA8AAAAPQAAvQIOBgAAOwIFAQRTb21lAQEAnw4AATwAAL0CDgYAAjsAAQCoAiQGAAA6AQEAnw4AAgCpAhIjAJ8OBQEFRTAwMjcAAR8FBQABAAUAqAIkBgAAOgEBAaQOAAE7AACNDCYmAABBAAACAI0MJiYAnw4FAfMFU29tZXRoaW5nIG90aGVyIHRoYW4gbnVtYmVycyBhbmQgY2hhcmFjdGVycyBoYXMgYmVlbiB1c2VkIGZvciBhIHJhbmdlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAyOQpsZXQgc3RyaW5nID0gInNhbHV0YXRpb25zICEiOwoKLy8gVGhlIG9yZGVyaW5nIHJlbGF0aW9uIGZvciBzdHJpbmdzIGNhbm5vdCBiZSBldmFsdWF0ZWQgYXQgY29tcGlsZSB0aW1lLAovLyBzbyB0aGlzIGRvZXNuJ3Qgd29yazoKbWF0Y2ggc3RyaW5nIHsKICAgICJoZWxsbyIgLi49ICJ3b3JsZCIgPT4ge30KICAgIF8gPT4ge30KfQoKLy8gVGhpcyBpcyBhIG1vcmUgZ2VuZXJhbCB2ZXJzaW9uLCB1c2luZyBhIGd1YXJkOgptYXRjaCBzdHJpbmcgewogICAgcyBpZiBzID49ICJoZWxsbyIgJiYgcyA8PSAid29ybGQiID0+IHt9CiAgICBfID0+IHt9Cn0KYGBgCgpJbiBhIG1hdGNoIGV4cHJlc3Npb24sIG9ubHkgbnVtYmVycyBhbmQgY2hhcmFjdGVycyBjYW4gYmUgbWF0Y2hlZCBhZ2FpbnN0IGEKcmFuZ2UuIFRoaXMgaXMgYmVjYXVzZSB0aGUgY29tcGlsZXIgY2hlY2tzIHRoYXQgdGhlIHJhbmdlIGlzIG5vbi1lbXB0eSBhdApjb21waWxlLXRpbWUsIGFuZCBpcyB1bmFibGUgdG8gZXZhbHVhdGUgYXJiaXRyYXJ5IGNvbXBhcmlzb24gZnVuY3Rpb25zLiBJZiB5b3UKd2FudCB0byBjYXB0dXJlIHZhbHVlcyBvZiBhbiBvcmRlcmFibGUgdHlwZSBiZXR3ZWVuIHR3byBlbmQtcG9pbnRzLCB5b3UgY2FuIHVzZQphIGd1YXJkLgoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////wPzBfMFAAEA8wUAjQwmJgAAQAAAAEEAAL0CDgYAAD8CBQEEU29tZQEBAJ8OAAFAAAC9Ag4GAAI/AAEAqAIkBgAAPgEBAJ8OAAIAqQISJQCfDgUBBUUwMDI5AAEfBQUAAQAFAKgCJAYAAD4BAQGkDgABPwAAvAwmKAAARQAAAgC8DCYoAJ8OBQGyA1doZW4gbWF0Y2hpbmcgYWdhaW5zdCBhIHJhbmdlLCB0aGUgY29tcGlsZXIgdmVyaWZpZXMgdGhhdCB0aGUgcmFuZ2UgaXMKbm9uLWVtcHR5LiBSYW5nZSBwYXR0ZXJucyBpbmNsdWRlIGJvdGggZW5kLXBvaW50cywgc28gdGhpcyBpcyBlcXVpdmFsZW50IHRvCnJlcXVpcmluZyB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHRvIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgZW5kIG9mIHRoZQpyYW5nZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMzAKbWF0Y2ggNXUzMiB7CiAgICAvLyBUaGlzIHJhbmdlIGlzIG9rLCBhbGJlaXQgcG9pbnRsZXNzLgogICAgMSAuLj0gMSA9PiB7fQogICAgLy8gVGhpcyByYW5nZSBpcyBlbXB0eSwgYW5kIHRoZSBjb21waWxlciBjYW4gdGVsbC4KICAgIDEwMDAgLi49IDUgPT4ge30KfQpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////AbIDsgMAAQCyAwC8DCYoAABEAAAARQAAvQIOBgAAQwIFAQRTb21lAQEAnw4AAUQAAL0CDgYAAkMAAQCoAiQGAABCAQEAnw4AAgCpAhInAJ8OBQEFRTAwMzAAAR8FBQABAAUAqAIkBgAAQgEBAaQOAAFDAADrDCYqAABJAAACAOsMJioAnw4FAb4HQSB0cmFpdCB0eXBlIGhhcyBiZWVuIGRlcmVmZXJlbmNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMzMKIyB0cmFpdCBTb21lVHJhaXQgeyBmbiBtZXRob2Rfb25lKCZzZWxmKXt9IGZuIG1ldGhvZF90d28oJnNlbGYpe30gfQojIGltcGw8VD4gU29tZVRyYWl0IGZvciBUIHt9CmxldCB0cmFpdF9vYmo6ICZTb21lVHJhaXQgPSAmInNvbWVfdmFsdWUiOwoKLy8gVGhpcyB0cmllcyB0byBpbXBsaWNpdGx5IGRlcmVmZXJlbmNlIHRvIGNyZWF0ZSBhbiB1bnNpemVkIGxvY2FsIHZhcmlhYmxlLgpsZXQgJmludmFsaWQgPSB0cmFpdF9vYmo7CgovLyBZb3UgY2FuIGNhbGwgbWV0aG9kcyB3aXRob3V0IGJpbmRpbmcgdG8gdGhlIHZhbHVlIGJlaW5nIHBvaW50ZWQgYXQuCnRyYWl0X29iai5tZXRob2Rfb25lKCk7CnRyYWl0X29iai5tZXRob2RfdHdvKCk7CmBgYAoKQSBwb2ludGVyIHRvIGEgdHJhaXQgdHlwZSBjYW5ub3QgYmUgaW1wbGljaXRseSBkZXJlZmVyZW5jZWQgYnkgYSBwYXR0ZXJuLiBFdmVyeQp0cmFpdCBkZWZpbmVzIGEgdHlwZSwgYnV0IGJlY2F1c2UgdGhlIHNpemUgb2YgdHJhaXQgaW1wbGVtZW50ZXJzIGlzbid0IGZpeGVkLAp0aGlzIHR5cGUgaGFzIG5vIGNvbXBpbGUtdGltZSBzaXplLiBUaGVyZWZvcmUsIGFsbCBhY2Nlc3NlcyB0byB0cmFpdCB0eXBlcyBtdXN0CmJlIHRocm91Z2ggcG9pbnRlcnMuIElmIHlvdSBlbmNvdW50ZXIgdGhpcyBlcnJvciB5b3Ugc2hvdWxkIHRyeSB0byBhdm9pZApkZXJlZmVyZW5jaW5nIHRoZSBwb2ludGVyLgoKWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgdHJhaXQgb2JqZWN0cyBpbiB0aGUgW1RyYWl0IE9iamVjdHNdIHNlY3Rpb24gb2YgdGhlClJlZmVyZW5jZS4KCltUcmFpdCBPYmplY3RzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvdHlwZXMuaHRtbCN0cmFpdC1vYmplY3RzCgAP////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////z++B74HAAEAvgcA6wwmKgAASAAAAEkAAL0CDgYAAEcCBQEEU29tZQEBAJ8OAAFIAAC9Ag4GAAJHAAEAqAIkBgAARgEBAJ8OAAIAqQISKQCfDgUBBUUwMDMzAAEfBQUAAQAFAKgCJAYAAEYBAQGkDgABRwAAmg0mLAAATQAAAgCaDSYsAJ8OBQHNCVRoZSBjb21waWxlciBkb2Vzbid0IGtub3cgd2hhdCBtZXRob2QgdG8gY2FsbCBiZWNhdXNlIG1vcmUgdGhhbiBvbmUgbWV0aG9kCmhhcyB0aGUgc2FtZSBwcm90b3R5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDM0CnN0cnVjdCBUZXN0OwoKdHJhaXQgVHJhaXQxIHsKICAgIGZuIGZvbygpOwp9Cgp0cmFpdCBUcmFpdDIgewogICAgZm4gZm9vKCk7Cn0KCmltcGwgVHJhaXQxIGZvciBUZXN0IHsgZm4gZm9vKCkge30gfQppbXBsIFRyYWl0MiBmb3IgVGVzdCB7IGZuIGZvbygpIHt9IH0KCmZuIG1haW4oKSB7CiAgICBUZXN0Ojpmb28oKSAvLyBlcnJvciwgd2hpY2ggZm9vKCkgdG8gY2FsbD8KfQpgYGAKClRvIGF2b2lkIHRoaXMgZXJyb3IsIHlvdSBoYXZlIHRvIGtlZXAgb25seSBvbmUgb2YgdGhlbSBhbmQgcmVtb3ZlIHRoZSBvdGhlcnMuClNvIGxldCdzIHRha2Ugb3VyIGV4YW1wbGUgYW5kIGZpeCBpdDoKCmBgYApzdHJ1Y3QgVGVzdDsKCnRyYWl0IFRyYWl0MSB7CiAgICBmbiBmb28oKTsKfQoKaW1wbCBUcmFpdDEgZm9yIFRlc3QgeyBmbiBmb28oKSB7fSB9CgpmbiBtYWluKCkgewogICAgVGVzdDo6Zm9vKCkgLy8gYW5kIG5vdyB0aGF0J3MgZ29vZCEKfQpgYGAKCkhvd2V2ZXIsIGEgYmV0dGVyIHNvbHV0aW9uIHdvdWxkIGJlIHVzaW5nIGZ1bGx5IGV4cGxpY2l0IG5hbWluZyBvZiB0eXBlIGFuZAp0cmFpdDoKCmBgYApzdHJ1Y3QgVGVzdDsKCnRyYWl0IFRyYWl0MSB7CiAgICBmbiBmb28oKTsKfQoKdHJhaXQgVHJhaXQyIHsKICAgIGZuIGZvbygpOwp9CgppbXBsIFRyYWl0MSBmb3IgVGVzdCB7IGZuIGZvbygpIHt9IH0KaW1wbCBUcmFpdDIgZm9yIFRlc3QgeyBmbiBmb28oKSB7fSB9CgpmbiBtYWluKCkgewogICAgPFRlc3QgYXMgVHJhaXQxPjo6Zm9vKCkKfQpgYGAKCk9uZSBsYXN0IGV4YW1wbGU6CgpgYGAKdHJhaXQgRiB7CiAgICBmbiBtKCZzZWxmKTsKfQoKdHJhaXQgRyB7CiAgICBmbiBtKCZzZWxmKTsKfQoKc3RydWN0IFg7CgppbXBsIEYgZm9yIFggeyBmbiBtKCZzZWxmKSB7IHByaW50bG4hKCJJIGFtIEYiKTsgfSB9CmltcGwgRyBmb3IgWCB7IGZuIG0oJnNlbGYpIHsgcHJpbnRsbiEoIkkgYW0gRyIpOyB9IH0KCmZuIG1haW4oKSB7CiAgICBsZXQgZiA9IFg7CgogICAgRjo6bSgmZik7IC8vIGl0IGRpc3BsYXlzICJJIGFtIEYiCiAgICBHOjptKCZmKTsgLy8gaXQgZGlzcGxheXMgIkkgYW0gRyIKfQpgYGAKABT///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/z/NCc0JAAEAzQkAmg0mLAAATAAAAE0AAL0CDgYAAEsCBQEEU29tZQEBAJ8OAAFMAAC9Ag4GAAJLAAEAqAIkBgAASgEBAJ8OAAIAqQISKwCfDgUBBUUwMDM0AAEfBQUAAQAFAKgCJAYAAEoBAQGkDgABSwAAyQ0mLgAAUQAAAgDJDSYuAJ8OBQHuPVRyYWl0IG9iamVjdHMgbGlrZSBgQm94PFRyYWl0PmAgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2hlbiBjZXJ0YWluCnJlcXVpcmVtZW50cyBhcmUgc2F0aXNmaWVkIGJ5IHRoZSB0cmFpdCBpbiBxdWVzdGlvbi4KClRyYWl0IG9iamVjdHMgYXJlIGEgZm9ybSBvZiBkeW5hbWljIGRpc3BhdGNoIGFuZCB1c2UgYSBkeW5hbWljYWxseSBzaXplZCB0eXBlCmZvciB0aGUgaW5uZXIgdHlwZS4gU28sIGZvciBhIGdpdmVuIHRyYWl0IGBUcmFpdGAsIHdoZW4gYFRyYWl0YCBpcyB0cmVhdGVkIGFzIGEKdHlwZSwgYXMgaW4gYEJveDxUcmFpdD5gLCB0aGUgaW5uZXIgdHlwZSBpcyAndW5zaXplZCcuIEluIHN1Y2ggY2FzZXMgdGhlIGJveGVkCnBvaW50ZXIgaXMgYSAnZmF0IHBvaW50ZXInIHRoYXQgY29udGFpbnMgYW4gZXh0cmEgcG9pbnRlciB0byBhIHRhYmxlIG9mIG1ldGhvZHMKKGFtb25nIG90aGVyIHRoaW5ncykgZm9yIGR5bmFtaWMgZGlzcGF0Y2guIFRoaXMgZGVzaWduIG1hbmRhdGVzIHNvbWUKcmVzdHJpY3Rpb25zIG9uIHRoZSB0eXBlcyBvZiB0cmFpdHMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkIGluIHRyYWl0Cm9iamVjdHMsIHdoaWNoIGFyZSBjb2xsZWN0aXZlbHkgdGVybWVkIGFzICdvYmplY3Qgc2FmZXR5JyBydWxlcy4KCkF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgdHJhaXQgb2JqZWN0IGZvciBhIG5vbiBvYmplY3Qtc2FmZSB0cmFpdCB3aWxsIHRyaWdnZXIKdGhpcyBlcnJvci4KClRoZXJlIGFyZSB2YXJpb3VzIHJ1bGVzOgoKIyMjIFRoZSB0cmFpdCBjYW5ub3QgcmVxdWlyZSBgU2VsZjogU2l6ZWRgCgpXaGVuIGBUcmFpdGAgaXMgdHJlYXRlZCBhcyBhIHR5cGUsIHRoZSB0eXBlIGRvZXMgbm90IGltcGxlbWVudCB0aGUgc3BlY2lhbApgU2l6ZWRgIHRyYWl0LCBiZWNhdXNlIHRoZSB0eXBlIGRvZXMgbm90IGhhdmUgYSBrbm93biBzaXplIGF0IGNvbXBpbGUgdGltZSBhbmQKY2FuIG9ubHkgYmUgYWNjZXNzZWQgYmVoaW5kIGEgcG9pbnRlci4gVGh1cywgaWYgd2UgaGF2ZSBhIHRyYWl0IGxpa2UgdGhlCmZvbGxvd2luZzoKCmBgYAp0cmFpdCBGb28gd2hlcmUgU2VsZjogU2l6ZWQgewoKfQpgYGAKCldlIGNhbm5vdCBjcmVhdGUgYW4gb2JqZWN0IG9mIHR5cGUgYEJveDxGb28+YCBvciBgJkZvb2Agc2luY2UgaW4gdGhpcyBjYXNlCmBTZWxmYCB3b3VsZCBub3QgYmUgYFNpemVkYC4KCkdlbmVyYWxseSwgYFNlbGY6IFNpemVkYCBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRyYWl0IHNob3VsZCBub3QgYmUgdXNlZAphcyBhIHRyYWl0IG9iamVjdC4gSWYgdGhlIHRyYWl0IGNvbWVzIGZyb20geW91ciBvd24gY3JhdGUsIGNvbnNpZGVyIHJlbW92aW5nCnRoaXMgcmVzdHJpY3Rpb24uCgojIyMgTWV0aG9kIHJlZmVyZW5jZXMgdGhlIGBTZWxmYCB0eXBlIGluIGl0cyBwYXJhbWV0ZXJzIG9yIHJldHVybiB0eXBlCgpUaGlzIGhhcHBlbnMgd2hlbiBhIHRyYWl0IGhhcyBhIG1ldGhvZCBsaWtlIHRoZSBmb2xsb3dpbmc6CgpgYGAKdHJhaXQgVHJhaXQgewogICAgZm4gZm9vKCZzZWxmKSAtPiBTZWxmOwp9CgppbXBsIFRyYWl0IGZvciBTdHJpbmcgewogICAgZm4gZm9vKCZzZWxmKSAtPiBTZWxmIHsKICAgICAgICAiaGkiLnRvX293bmVkKCkKICAgIH0KfQoKaW1wbCBUcmFpdCBmb3IgdTggewogICAgZm4gZm9vKCZzZWxmKSAtPiBTZWxmIHsKICAgICAgICAxCiAgICB9Cn0KYGBgCgooTm90ZSB0aGF0IGAmc2VsZmAgYW5kIGAmbXV0IHNlbGZgIGFyZSBva2F5LCBpdCdzIGFkZGl0aW9uYWwgYFNlbGZgIHR5cGVzIHdoaWNoCmNhdXNlIHRoaXMgcHJvYmxlbS4pCgpJbiBzdWNoIGEgY2FzZSwgdGhlIGNvbXBpbGVyIGNhbm5vdCBwcmVkaWN0IHRoZSByZXR1cm4gdHlwZSBvZiBgZm9vKClgIGluIGEKc2l0dWF0aW9uIGxpa2UgdGhlIGZvbGxvd2luZzoKCmBgYGNvbXBpbGVfZmFpbCxFMDAzOAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpIC0+IFNlbGY7Cn0KCmZuIGNhbGxfZm9vKHg6IEJveDxUcmFpdD4pIHsKICAgIGxldCB5ID0geC5mb28oKTsgLy8gV2hhdCB0eXBlIGlzIHk/CiAgICAvLyAuLi4KfQpgYGAKCklmIG9ubHkgc29tZSBtZXRob2RzIGFyZW4ndCBvYmplY3Qtc2FmZSwgeW91IGNhbiBhZGQgYSBgd2hlcmUgU2VsZjogU2l6ZWRgIGJvdW5kCm9uIHRoZW0gdG8gbWFyayB0aGVtIGFzIGV4cGxpY2l0bHkgdW5hdmFpbGFibGUgdG8gdHJhaXQgb2JqZWN0cy4gVGhlCmZ1bmN0aW9uYWxpdHkgd2lsbCBzdGlsbCBiZSBhdmFpbGFibGUgdG8gYWxsIG90aGVyIGltcGxlbWVudGVycywgaW5jbHVkaW5nCmBCb3g8VHJhaXQ+YCB3aGljaCBpcyBpdHNlbGYgc2l6ZWQgKGFzc3VtaW5nIHlvdSBgaW1wbCBUcmFpdCBmb3IgQm94PFRyYWl0PmApLgoKYGBgCnRyYWl0IFRyYWl0IHsKICAgIGZuIGZvbygmc2VsZikgLT4gU2VsZiB3aGVyZSBTZWxmOiBTaXplZDsKICAgIC8vIG1vcmUgZnVuY3Rpb25zCn0KYGBgCgpOb3csIGBmb28oKWAgY2FuIG5vIGxvbmdlciBiZSBjYWxsZWQgb24gYSB0cmFpdCBvYmplY3QsIGJ1dCB5b3Ugd2lsbCBub3cgYmUKYWxsb3dlZCB0byBtYWtlIGEgdHJhaXQgb2JqZWN0LCBhbmQgdGhhdCB3aWxsIGJlIGFibGUgdG8gY2FsbCBhbnkgb2JqZWN0LXNhZmUKbWV0aG9kcy4gV2l0aCBzdWNoIGEgYm91bmQsIG9uZSBjYW4gc3RpbGwgY2FsbCBgZm9vKClgIG9uIHR5cGVzIGltcGxlbWVudGluZwp0aGF0IHRyYWl0IHRoYXQgYXJlbid0IGJlaGluZCB0cmFpdCBvYmplY3RzLgoKIyMjIE1ldGhvZCBoYXMgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMKCkFzIG1lbnRpb25lZCBiZWZvcmUsIHRyYWl0IG9iamVjdHMgY29udGFpbiBwb2ludGVycyB0byBtZXRob2QgdGFibGVzLiBTbywgaWYgd2UKaGF2ZToKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpOwp9CgppbXBsIFRyYWl0IGZvciBTdHJpbmcgewogICAgZm4gZm9vKCZzZWxmKSB7CiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gMQogICAgfQp9CgppbXBsIFRyYWl0IGZvciB1OCB7CiAgICBmbiBmb28oJnNlbGYpIHsKICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiAyCiAgICB9Cn0KLy8gLi4uCmBgYAoKQXQgY29tcGlsZSB0aW1lIGVhY2ggaW1wbGVtZW50YXRpb24gb2YgYFRyYWl0YCB3aWxsIHByb2R1Y2UgYSB0YWJsZSBjb250YWluaW5nCnRoZSB2YXJpb3VzIG1ldGhvZHMgKGFuZCBvdGhlciBpdGVtcykgcmVsYXRlZCB0byB0aGUgaW1wbGVtZW50YXRpb24uCgpUaGlzIHdvcmtzIGZpbmUsIGJ1dCB3aGVuIHRoZSBtZXRob2QgZ2FpbnMgZ2VuZXJpYyBwYXJhbWV0ZXJzLCB3ZSBjYW4gaGF2ZSBhCnByb2JsZW0uCgpVc3VhbGx5LCBnZW5lcmljIHBhcmFtZXRlcnMgZ2V0IF9tb25vbW9ycGhpemVkXy4gRm9yIGV4YW1wbGUsIGlmIEkgaGF2ZQoKYGBgCmZuIGZvbzxUPih4OiBUKSB7CiAgICAvLyAuLi4KfQpgYGAKClRoZSBtYWNoaW5lIGNvZGUgZm9yIGBmb286Ojx1OD4oKWAsIGBmb286Ojxib29sPigpYCwgYGZvbzo6PFN0cmluZz4oKWAsIG9yIGFueQpvdGhlciB0eXBlIHN1YnN0aXR1dGlvbiBpcyBkaWZmZXJlbnQuIEhlbmNlIHRoZSBjb21waWxlciBnZW5lcmF0ZXMgdGhlCmltcGxlbWVudGF0aW9uIG9uLWRlbWFuZC4gSWYgeW91IGNhbGwgYGZvbygpYCB3aXRoIGEgYGJvb2xgIHBhcmFtZXRlciwgdGhlCmNvbXBpbGVyIHdpbGwgb25seSBnZW5lcmF0ZSBjb2RlIGZvciBgZm9vOjo8Ym9vbD4oKWAuIFdoZW4gd2UgaGF2ZSBhZGRpdGlvbmFsCnR5cGUgcGFyYW1ldGVycywgdGhlIG51bWJlciBvZiBtb25vbW9ycGhpemVkIGltcGxlbWVudGF0aW9ucyB0aGUgY29tcGlsZXIKZ2VuZXJhdGVzIGRvZXMgbm90IGdyb3cgZHJhc3RpY2FsbHksIHNpbmNlIHRoZSBjb21waWxlciB3aWxsIG9ubHkgZ2VuZXJhdGUgYW4KaW1wbGVtZW50YXRpb24gaWYgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHVucGFyYW1ldHJpemVkIHN1YnN0aXR1dGlvbnMKKGkuZS4sIHN1YnN0aXR1dGlvbnMgd2hlcmUgbm9uZSBvZiB0aGUgc3Vic3RpdHV0ZWQgdHlwZXMgYXJlIHRoZW1zZWx2ZXMKcGFyYW1ldGVyaXplZCkuCgpIb3dldmVyLCB3aXRoIHRyYWl0IG9iamVjdHMgd2UgaGF2ZSB0byBtYWtlIGEgdGFibGUgY29udGFpbmluZyBfZXZlcnlfIG9iamVjdAp0aGF0IGltcGxlbWVudHMgdGhlIHRyYWl0LiBOb3csIGlmIGl0IGhhcyB0eXBlIHBhcmFtZXRlcnMsIHdlIG5lZWQgdG8gYWRkCmltcGxlbWVudGF0aW9ucyBmb3IgZXZlcnkgdHlwZSB0aGF0IGltcGxlbWVudHMgdGhlIHRyYWl0LCBhbmQgdGhlcmUgY291bGQKdGhlb3JldGljYWxseSBiZSBhbiBpbmZpbml0ZSBudW1iZXIgb2YgdHlwZXMuCgpGb3IgZXhhbXBsZSwgd2l0aDoKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb288VD4oJnNlbGYsIG9uOiBUKTsKICAgIC8vIG1vcmUgbWV0aG9kcwp9CgppbXBsIFRyYWl0IGZvciBTdHJpbmcgewogICAgZm4gZm9vPFQ+KCZzZWxmLCBvbjogVCkgewogICAgICAgIC8vIGltcGxlbWVudGF0aW9uIDEKICAgIH0KfQoKaW1wbCBUcmFpdCBmb3IgdTggewogICAgZm4gZm9vPFQ+KCZzZWxmLCBvbjogVCkgewogICAgICAgIC8vIGltcGxlbWVudGF0aW9uIDIKICAgIH0KfQoKLy8gOCBtb3JlIGltcGxlbWVudGF0aW9ucwpgYGAKCk5vdywgaWYgd2UgaGF2ZSB0aGUgZm9sbG93aW5nIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMzgKIyB0cmFpdCBUcmFpdCB7IGZuIGZvbzxUPigmc2VsZiwgb246IFQpOyB9CiMgaW1wbCBUcmFpdCBmb3IgU3RyaW5nIHsgZm4gZm9vPFQ+KCZzZWxmLCBvbjogVCkge30gfQojIGltcGwgVHJhaXQgZm9yIHU4IHsgZm4gZm9vPFQ+KCZzZWxmLCBvbjogVCkge30gfQojIGltcGwgVHJhaXQgZm9yIGJvb2wgeyBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB7fSB9CiMgLy8gZXRjLgpmbiBjYWxsX2Zvbyh0aGluZzogQm94PFRyYWl0PikgewogICAgdGhpbmcuZm9vKHRydWUpOyAvLyB0aGlzIGNvdWxkIGJlIGFueSBvbmUgb2YgdGhlIDggdHlwZXMgYWJvdmUKICAgIHRoaW5nLmZvbygxKTsKICAgIHRoaW5nLmZvbygiaGVsbG8iKTsKfQpgYGAKCldlIGRvbid0IGp1c3QgbmVlZCB0byBjcmVhdGUgYSB0YWJsZSBvZiBhbGwgaW1wbGVtZW50YXRpb25zIG9mIGFsbCBtZXRob2RzIG9mCmBUcmFpdGAsIHdlIG5lZWQgdG8gY3JlYXRlIHN1Y2ggYSB0YWJsZSwgZm9yIGVhY2ggZGlmZmVyZW50IHR5cGUgZmVkIHRvCmBmb28oKWAuIEluIHRoaXMgY2FzZSB0aGlzIHR1cm5zIG91dCB0byBiZSAoMTAgdHlwZXMgaW1wbGVtZW50aW5nIGBUcmFpdGApXCooMwp0eXBlcyBiZWluZyBmZWQgdG8gYGZvbygpYCkgPSAzMCBpbXBsZW1lbnRhdGlvbnMhCgpXaXRoIHJlYWwgd29ybGQgdHJhaXRzIHRoZXNlIG51bWJlcnMgY2FuIGdyb3cgZHJhc3RpY2FsbHkuCgpUbyBmaXggdGhpcywgaXQgaXMgc3VnZ2VzdGVkIHRvIHVzZSBhIGB3aGVyZSBTZWxmOiBTaXplZGAgYm91bmQgc2ltaWxhciB0byB0aGUKZml4IGZvciB0aGUgc3ViLWVycm9yIGFib3ZlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIGNhbGwgdGhlIG1ldGhvZCB3aXRoIHR5cGUKcGFyYW1ldGVyczoKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB3aGVyZSBTZWxmOiBTaXplZDsKICAgIC8vIG1vcmUgbWV0aG9kcwp9CmBgYAoKSWYgdGhpcyBpcyBub3QgYW4gb3B0aW9uLCBjb25zaWRlciByZXBsYWNpbmcgdGhlIHR5cGUgcGFyYW1ldGVyIHdpdGggYW5vdGhlcgp0cmFpdCBvYmplY3QgKGUuZy4sIGlmIGBUOiBPdGhlclRyYWl0YCwgdXNlIGBvbjogQm94PE90aGVyVHJhaXQ+YCkuIElmIHRoZQpudW1iZXIgb2YgdHlwZXMgeW91IGludGVuZCB0byBmZWVkIHRvIHRoaXMgbWV0aG9kIGlzIGxpbWl0ZWQsIGNvbnNpZGVyIG1hbnVhbGx5Cmxpc3Rpbmcgb3V0IHRoZSBtZXRob2RzIG9mIGRpZmZlcmVudCB0eXBlcy4KCiMjIyBNZXRob2QgaGFzIG5vIHJlY2VpdmVyCgpNZXRob2RzIHRoYXQgZG8gbm90IHRha2UgYSBgc2VsZmAgcGFyYW1ldGVyIGNhbid0IGJlIGNhbGxlZCBzaW5jZSB0aGVyZSB3b24ndCBiZQphIHdheSB0byBnZXQgYSBwb2ludGVyIHRvIHRoZSBtZXRob2QgdGFibGUgZm9yIHRoZW0uCgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpIC0+IHU4Owp9CmBgYAoKVGhpcyBjb3VsZCBiZSBjYWxsZWQgYXMgYDxGb28gYXMgRm9vPjo6Zm9vKClgLCB3aGljaCB3b3VsZCBub3QgYmUgYWJsZSB0byBwaWNrCmFuIGltcGxlbWVudGF0aW9uLgoKQWRkaW5nIGEgYFNlbGY6IFNpemVkYCBib3VuZCB0byB0aGVzZSBtZXRob2RzIHdpbGwgZ2VuZXJhbGx5IG1ha2UgdGhpcyBjb21waWxlLgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oKSAtPiB1OCB3aGVyZSBTZWxmOiBTaXplZDsKfQpgYGAKCiMjIyBUaGUgdHJhaXQgY2Fubm90IGNvbnRhaW4gYXNzb2NpYXRlZCBjb25zdGFudHMKCkp1c3QgbGlrZSBzdGF0aWMgZnVuY3Rpb25zLCBhc3NvY2lhdGVkIGNvbnN0YW50cyBhcmVuJ3Qgc3RvcmVkIG9uIHRoZSBtZXRob2QKdGFibGUuIElmIHRoZSB0cmFpdCBvciBhbnkgc3VidHJhaXQgY29udGFpbiBhbiBhc3NvY2lhdGVkIGNvbnN0YW50LCB0aGV5IGNhbm5vdApiZSBtYWRlIGludG8gYW4gb2JqZWN0LgoKYGBgY29tcGlsZV9mYWlsLEUwMDM4CnRyYWl0IEZvbyB7CiAgICBjb25zdCBYOiBpMzI7Cn0KCmltcGwgRm9vIHt9CmBgYAoKQSBzaW1wbGUgd29ya2Fyb3VuZCBpcyB0byB1c2UgYSBoZWxwZXIgbWV0aG9kIGluc3RlYWQ6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIHgoJnNlbGYpIC0+IGkzMjsKfQpgYGAKCiMjIyBUaGUgdHJhaXQgY2Fubm90IHVzZSBgU2VsZmAgYXMgYSB0eXBlIHBhcmFtZXRlciBpbiB0aGUgc3VwZXJ0cmFpdCBsaXN0aW5nCgpUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHNlY29uZCBzdWItZXJyb3IsIGJ1dCBzdWJ0bGVyLiBJdCBoYXBwZW5zIGluIHNpdHVhdGlvbnMKbGlrZSB0aGUgZm9sbG93aW5nOgoKYGBgY29tcGlsZV9mYWlsLEUwMDM4CnRyYWl0IFN1cGVyPEE6ID9TaXplZD4ge30KCnRyYWl0IFRyYWl0OiBTdXBlcjxTZWxmPiB7Cn0KCnN0cnVjdCBGb287CgppbXBsIFN1cGVyPEZvbz4gZm9yIEZvb3t9CgppbXBsIFRyYWl0IGZvciBGb28ge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeDogQm94PGR5biBUcmFpdD47Cn0KYGBgCgpIZXJlLCB0aGUgc3VwZXJ0cmFpdCBtaWdodCBoYXZlIG1ldGhvZHMgYXMgZm9sbG93czoKCmBgYAp0cmFpdCBTdXBlcjxBOiA/U2l6ZWQ+IHsKICAgIGZuIGdldF9hKCZzZWxmKSAtPiAmQTsgLy8gbm90ZSB0aGF0IHRoaXMgaXMgb2JqZWN0IHNhZmUhCn0KYGBgCgpJZiB0aGUgdHJhaXQgYFRyYWl0YCB3YXMgZGVyaXZpbmcgZnJvbSBzb21ldGhpbmcgbGlrZSBgU3VwZXI8U3RyaW5nPmAgb3IKYFN1cGVyPFQ+YCAod2hlcmUgYEZvb2AgaXRzZWxmIGlzIGBGb288VD5gKSwgdGhpcyBpcyBva2F5LCBiZWNhdXNlIGdpdmVuIGEgdHlwZQpgZ2V0X2EoKWAgd2lsbCBkZWZpbml0ZWx5IHJldHVybiBhbiBvYmplY3Qgb2YgdGhhdCB0eXBlLgoKSG93ZXZlciwgaWYgaXQgZGVyaXZlcyBmcm9tIGBTdXBlcjxTZWxmPmAsIGV2ZW4gdGhvdWdoIGBTdXBlcmAgaXMgb2JqZWN0IHNhZmUsCnRoZSBtZXRob2QgYGdldF9hKClgIHdvdWxkIHJldHVybiBhbiBvYmplY3Qgb2YgdW5rbm93biB0eXBlIHdoZW4gY2FsbGVkIG9uIHRoZQpmdW5jdGlvbi4gYFNlbGZgIHR5cGUgcGFyYW1ldGVycyBsZXQgdXMgbWFrZSBvYmplY3Qgc2FmZSB0cmFpdHMgbm8gbG9uZ2VyIHNhZmUsCnNvIHRoZXkgYXJlIGZvcmJpZGRlbiB3aGVuIHNwZWNpZnlpbmcgc3VwZXJ0cmFpdHMuCgpUaGVyZSdzIG5vIGVhc3kgZml4IGZvciB0aGlzLCBnZW5lcmFsbHkgY29kZSB3aWxsIG5lZWQgdG8gYmUgcmVmYWN0b3JlZCBzbyB0aGF0CnlvdSBubyBsb25nZXIgbmVlZCB0byBkZXJpdmUgZnJvbSBgU3VwZXI8U2VsZj5gLgoAfP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////w/uPe49AAEA7j0AyQ0mLgAAUAAAAFEAAL0CDgYAAE8CBQEEU29tZQEBAJ8OAAFQAAC9Ag4GAAJPAAEAqAIkBgAATgEBAJ8OAAIAqQISLQCfDgUBBUUwMDM4AAEfBQUAAQAFAKgCJAYAAE4BAQGkDgABTwAA+A0mMAAAVQAAAgD4DSYwAJ8OBQG+BUl0IGlzIG5vdCBhbGxvd2VkIHRvIG1hbnVhbGx5IGNhbGwgZGVzdHJ1Y3RvcnMgaW4gUnVzdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNDAKc3RydWN0IEZvbyB7CiAgICB4OiBpMzIsCn0KCmltcGwgRHJvcCBmb3IgRm9vIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7CiAgICAgICAgcHJpbnRsbiEoImthYm9vbSIpOwogICAgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCB4ID0gRm9vIHsgeDogLTcgfTsKICAgIHguZHJvcCgpOyAvLyBlcnJvcjogZXhwbGljaXQgdXNlIG9mIGRlc3RydWN0b3IgbWV0aG9kCn0KYGBgCgpJdCBpcyB1bm5lY2Vzc2FyeSB0byBkbyB0aGlzIHNpbmNlIGBkcm9wYCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuZXZlciBhCnZhbHVlIGdvZXMgb3V0IG9mIHNjb3BlLiBIb3dldmVyLCBpZiB5b3UgcmVhbGx5IG5lZWQgdG8gZHJvcCBhIHZhbHVlIGJ5IGhhbmQsCnlvdSBjYW4gdXNlIHRoZSBgc3RkOjptZW06OmRyb3BgIGZ1bmN0aW9uOgoKYGBgCnN0cnVjdCBGb28gewogICAgeDogaTMyLAp9CmltcGwgRHJvcCBmb3IgRm9vIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7CiAgICAgICAgcHJpbnRsbiEoImthYm9vbSIpOwogICAgfQp9CmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHggPSBGb28geyB4OiAtNyB9OwogICAgZHJvcCh4KTsgLy8gb2shCn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////P74FvgUAAQC+BQD4DSYwAABUAAAAVQAAvQIOBgAAUwIFAQRTb21lAQEAnw4AAVQAAL0CDgYAAlMAAQCoAiQGAABSAQEAnw4AAgCpAhIvAJ8OBQEFRTAwNDAAAR8FBQABAAUAqAIkBgAAUgEBAaQOAAFTAACnDiYyAABZAAACAKcOJjIAnw4FAboCWW91IGNhbm5vdCB1c2UgdHlwZSBvciBjb25zdCBwYXJhbWV0ZXJzIG9uIGZvcmVpZ24gaXRlbXMuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDQ0CmV4dGVybiB7IGZuIHNvbWVfZnVuYzxUPih4OiBUKTsgfQpgYGAKClRvIGZpeCB0aGlzLCByZXBsYWNlIHRoZSBnZW5lcmljIHBhcmFtZXRlciB3aXRoIHRoZSBzcGVjaWFsaXphdGlvbnMgdGhhdCB5b3UKbmVlZDoKCmBgYApleHRlcm4geyBmbiBzb21lX2Z1bmNfaTMyKHg6IGkzMik7IH0KZXh0ZXJuIHsgZm4gc29tZV9mdW5jX2k2NCh4OiBpNjQpOyB9CmBgYAoABf///////////wH///////////8B////////////Af///////////wH//////////wO6AroCAAEAugIApw4mMgAAWAAAAFkAAL0CDgYAAFcCBQEEU29tZQEBAJ8OAAFYAAC9Ag4GAAJXAAEAqAIkBgAAVgEBAJ8OAAIAqQISMQCfDgUBBUUwMDQ0AAEfBQUAAQAFAKgCJAYAAFYBAQGkDgABVwAA1g4mNAAAXQAAAgDWDiY0AJ8OBQHZA1ZhcmlhZGljIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHVzZWQgb24gYSBub24tQyBBQkkgZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDQ1CiMhW2ZlYXR1cmUodW5ib3hlZF9jbG9zdXJlcyldCgpleHRlcm4gInJ1c3QtY2FsbCIgewogICAgZm4gZm9vKHg6IHU4LCAuLi4pOyAvLyBlcnJvciEKfQpgYGAKClJ1c3Qgb25seSBzdXBwb3J0cyB2YXJpYWRpYyBwYXJhbWV0ZXJzIGZvciBpbnRlcm9wZXJhYmlsaXR5IHdpdGggQyBjb2RlIGluIGl0cwpGRkkuIEFzIHN1Y2gsIHZhcmlhZGljIHBhcmFtZXRlcnMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyB3aGljaCBhcmUKdXNpbmcgdGhlIEMgQUJJLiBUbyBmaXggc3VjaCBjb2RlLCBwdXQgdGhlbSBpbiBhbiBleHRlcm4gIkMiIGJsb2NrOgoKYGBgCmV4dGVybiAiQyIgewogICAgZm4gZm9vICh4OiB1OCwgLi4uKTsKfQpgYGAKAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////D9kD2QMAAQDZAwDWDiY0AABcAAAAXQAAvQIOBgAAWwIFAQRTb21lAQEAnw4AAVwAAL0CDgYAAlsAAQCoAiQGAABaAQEAnw4AAgCpAhIzAJ8OBQEFRTAwNDUAAR8FBQABAAUAqAIkBgAAWgEBAaQOAAFbAACFDyY2AABhAAACAIUPJjYAnw4FAdMESXRlbXMgYXJlIG1pc3NpbmcgaW4gYSB0cmFpdCBpbXBsZW1lbnRhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNDYKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7fQovLyBlcnJvcjogbm90IGFsbCB0cmFpdCBpdGVtcyBpbXBsZW1lbnRlZCwgbWlzc2luZzogYGZvb2AKYGBgCgpXaGVuIHRyeWluZyB0byBtYWtlIHNvbWUgdHlwZSBpbXBsZW1lbnQgYSB0cmFpdCBgRm9vYCwgeW91IG11c3QsIGF0IG1pbmltdW0sCnByb3ZpZGUgaW1wbGVtZW50YXRpb25zIGZvciBhbGwgb2YgYEZvb2AncyByZXF1aXJlZCBtZXRob2RzIChtZWFuaW5nIHRoZQptZXRob2RzIHRoYXQgZG8gbm90IGhhdmUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMpLCBhcyB3ZWxsIGFzIGFueSByZXF1aXJlZAp0cmFpdCBpdGVtcyBsaWtlIGFzc29jaWF0ZWQgdHlwZXMgb3IgY29uc3RhbnRzLiBFeGFtcGxlOgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCkge30gLy8gb2shCn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8f0wTTBAABANMEAIUPJjYAAGAAAABhAAC9Ag4GAABfAgUBBFNvbWUBAQCfDgABYAAAvQIOBgACXwABAKgCJAYAAF4BAQCfDgACAKkCEjUAnw4FAQVFMDA0NgABHwUFAAEABQCoAiQGAABeAQEBpA4AAV8AALQPJjgAAGUAAAIAtA8mOACfDgUB5AVBbiBhdHRlbXB0ZWQgaW1wbGVtZW50YXRpb24gb2YgYSB0cmFpdCBtZXRob2QgaGFzIHRoZSB3cm9uZyBudW1iZXIgb2YgdHlwZSBvcgpjb25zdCBwYXJhbWV0ZXJzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA0OQp0cmFpdCBGb28gewogICAgZm4gZm9vPFQ6IERlZmF1bHQ+KHg6IFQpIC0+IFNlbGY7Cn0KCnN0cnVjdCBCYXI7CgovLyBlcnJvcjogbWV0aG9kIGBmb29gIGhhcyAwIHR5cGUgcGFyYW1ldGVycyBidXQgaXRzIHRyYWl0IGRlY2xhcmF0aW9uIGhhcyAxCi8vIHR5cGUgcGFyYW1ldGVyCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKHg6IGJvb2wpIC0+IFNlbGYgeyBCYXIgfQp9CmBgYAoKRm9yIGV4YW1wbGUsIHRoZSBgRm9vYCB0cmFpdCBoYXMgYSBtZXRob2QgYGZvb2Agd2l0aCBhIHR5cGUgcGFyYW1ldGVyIGBUYCwKYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9vYCBmb3IgdGhlIHR5cGUgYEJhcmAgaXMgbWlzc2luZyB0aGlzIHBhcmFtZXRlci4KVG8gZml4IHRoaXMgZXJyb3IsIHRoZXkgbXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUgcGFyYW1ldGVyczoKCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vPFQ6IERlZmF1bHQ+KHg6IFQpIC0+IFNlbGY7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGZvbzxUOiBEZWZhdWx0Pih4OiBUKSAtPiBTZWxmIHsgLy8gb2shCiAgICAgICAgQmFyCiAgICB9Cn0KYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wHkBeQFAAEA5AUAtA8mOAAAZAAAAGUAAL0CDgYAAGMCBQEEU29tZQEBAJ8OAAFkAAC9Ag4GAAJjAAEAqAIkBgAAYgEBAJ8OAAIAqQISNwCfDgUBBUUwMDQ5AAEfBQUAAQAFAKgCJAYAAGIBAQGkDgABYwAA4w8mOgAAaQAAAgDjDyY6AJ8OBQHcBUFuIGF0dGVtcHRlZCBpbXBsZW1lbnRhdGlvbiBvZiBhIHRyYWl0IG1ldGhvZCBoYXMgdGhlIHdyb25nIG51bWJlciBvZiBmdW5jdGlvbgpwYXJhbWV0ZXJzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA1MAp0cmFpdCBGb28gewogICAgZm4gZm9vKCZzZWxmLCB4OiB1OCkgLT4gYm9vbDsKfQoKc3RydWN0IEJhcjsKCi8vIGVycm9yOiBtZXRob2QgYGZvb2AgaGFzIDEgcGFyYW1ldGVyIGJ1dCB0aGUgZGVjbGFyYXRpb24gaW4gdHJhaXQgYEZvbzo6Zm9vYAovLyBoYXMgMgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGZvbygmc2VsZikgLT4gYm9vbCB7IHRydWUgfQp9CmBgYAoKRm9yIGV4YW1wbGUsIHRoZSBgRm9vYCB0cmFpdCBoYXMgYSBtZXRob2QgYGZvb2Agd2l0aCB0d28gZnVuY3Rpb24gcGFyYW1ldGVycwooYCZzZWxmYCBhbmQgYHU4YCksIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZvb2AgZm9yIHRoZSB0eXBlIGBCYXJgIG9taXRzCnRoZSBgdThgIHBhcmFtZXRlci4gVG8gZml4IHRoaXMgZXJyb3IsIHRoZXkgbXVzdCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlcnM6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygmc2VsZiwgeDogdTgpIC0+IGJvb2w7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGZvbygmc2VsZiwgeDogdTgpIC0+IGJvb2wgeyAvLyBvayEKICAgICAgICB0cnVlCiAgICB9Cn0KYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///9/3AXcBQABANwFAOMPJjoAAGgAAABpAAC9Ag4GAABnAgUBBFNvbWUBAQCfDgABaAAAvQIOBgACZwABAKgCJAYAAGYBAQCfDgACAKkCEjkAnw4FAQVFMDA1MAABHwUFAAEABQCoAiQGAABmAQEBpA4AAWcAAJIQJjwAAG0AAAIAkhAmPACfDgUB9AJUaGUgcGFyYW1ldGVycyBvZiBhbnkgdHJhaXQgbWV0aG9kIG11c3QgbWF0Y2ggYmV0d2VlbiBhIHRyYWl0IGltcGxlbWVudGF0aW9uCmFuZCB0aGUgdHJhaXQgZGVmaW5pdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNTMKdHJhaXQgRm9vIHsKICAgIGZuIGZvbyh4OiB1MTYpOwogICAgZm4gYmFyKCZzZWxmKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgLy8gZXJyb3IsIGV4cGVjdGVkIHUxNiwgZm91bmQgaTE2CiAgICBmbiBmb28oeDogaTE2KSB7IH0KCiAgICAvLyBlcnJvciwgdHlwZXMgZGlmZmVyIGluIG11dGFiaWxpdHkKICAgIGZuIGJhcigmbXV0IHNlbGYpIHsgfQp9CmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B/////////wf0AvQCAAEA9AIAkhAmPAAAbAAAAG0AAL0CDgYAAGsCBQEEU29tZQEBAJ8OAAFsAAC9Ag4GAAJrAAEAqAIkBgAAagEBAJ8OAAIAqQISOwCfDgUBBUUwMDUzAAEfBQUAAQAFAKgCJAYAAGoBAQGkDgABawAAwRAmPgAAcQAAAgDBECY+AJ8OBQGyAkl0IGlzIG5vdCBhbGxvd2VkIHRvIGNhc3QgdG8gYSBib29sLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA1NApsZXQgeCA9IDU7CgovLyBOb3QgYWxsb3dlZCwgd29uJ3QgY29tcGlsZQpsZXQgeF9pc19ub256ZXJvID0geCBhcyBib29sOwpgYGAKCklmIHlvdSBhcmUgdHJ5aW5nIHRvIGNhc3QgYSBudW1lcmljIHR5cGUgdG8gYSBib29sLCB5b3UgY2FuIGNvbXBhcmUgaXQgd2l0aAp6ZXJvIGluc3RlYWQ6CgpgYGAKbGV0IHggPSA1OwoKLy8gT2sKbGV0IHhfaXNfbm9uemVybyA9IHggIT0gMDsKYGBgCgAF////////////Af///////////wH///////////8B////////////Af////////8BsgKyAgABALICAMEQJj4AAHAAAABxAAC9Ag4GAABvAgUBBFNvbWUBAQCfDgABcAAAvQIOBgACbwABAKgCJAYAAG4BAQCfDgACAKkCEj0Anw4FAQVFMDA1NAABHwUFAAEABQCoAiQGAABuAQEBpA4AAW8AAPAQJkAAAHUAAAIA8BAmQACfDgUBjwZEdXJpbmcgYSBtZXRob2QgY2FsbCwgYSB2YWx1ZSBpcyBhdXRvbWF0aWNhbGx5IGRlcmVmZXJlbmNlZCBhcyBtYW55IHRpbWVzIGFzCm5lZWRlZCB0byBtYWtlIHRoZSB2YWx1ZSdzIHR5cGUgbWF0Y2ggdGhlIG1ldGhvZCdzIHJlY2VpdmVyLiBUaGUgY2F0Y2ggaXMgdGhhdAp0aGUgY29tcGlsZXIgd2lsbCBvbmx5IGF0dGVtcHQgdG8gZGVyZWZlcmVuY2UgYSBudW1iZXIgb2YgdGltZXMgdXAgdG8gdGhlCnJlY3Vyc2lvbiBsaW1pdCAod2hpY2ggY2FuIGJlIHNldCB2aWEgdGhlIGByZWN1cnNpb25fbGltaXRgIGF0dHJpYnV0ZSkuCgpGb3IgYSBzb21ld2hhdCBhcnRpZmljaWFsIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNTUKIyFbcmVjdXJzaW9uX2xpbWl0PSI0Il0KCnN0cnVjdCBGb287CgppbXBsIEZvbyB7CiAgICBmbiBmb28oJnNlbGYpIHt9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgZm9vID0gRm9vOwogICAgbGV0IHJlZl9mb28gPSAmJiYmJkZvbzsKCiAgICAvLyBlcnJvciwgcmVhY2hlZCB0aGUgcmVjdXJzaW9uIGxpbWl0IHdoaWxlIGF1dG8tZGVyZWZlcmVuY2luZyBgJiYmJiZGb29gCiAgICByZWZfZm9vLmZvbygpOwp9CmBgYAoKT25lIGZpeCBtYXkgYmUgdG8gaW5jcmVhc2UgdGhlIHJlY3Vyc2lvbiBsaW1pdC4gTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvCmNyZWF0ZSBhbiBpbmZpbml0ZSByZWN1cnNpb24gb2YgZGVyZWZlcmVuY2luZywgaW4gd2hpY2ggY2FzZSB0aGUgb25seSBmaXggaXMgdG8Kc29tZWhvdyBicmVhayB0aGUgcmVjdXJzaW9uLgoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//AY8GjwYAAQCPBgDwECZAAAB0AAAAdQAAvQIOBgAAcwIFAQRTb21lAQEAnw4AAXQAAL0CDgYAAnMAAQCoAiQGAAByAQEAnw4AAgCpAhI/AJ8OBQEFRTAwNTUAAR8FBQABAAUAqAIkBgAAcgEBAaQOAAFzAACfESZCAAB5AAACAJ8RJkIAnw4FAdkEQW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIHdhcyBnaXZlbiB3aGVuIGNhbGxpbmcgYSBjbG9zdXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA1NwpsZXQgZiA9IHx4fCB4ICogMzsKbGV0IGEgPSBmKCk7ICAgICAgICAvLyBpbnZhbGlkLCB0b28gZmV3IHBhcmFtZXRlcnMKbGV0IGIgPSBmKDQpOyAgICAgICAvLyB0aGlzIHdvcmtzIQpsZXQgYyA9IGYoMiwgMyk7ICAgIC8vIGludmFsaWQsIHRvbyBtYW55IHBhcmFtZXRlcnMKYGBgCgpXaGVuIGludm9raW5nIGNsb3N1cmVzIG9yIG90aGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgZnVuY3Rpb24gdHJhaXRzIGBGbmAsCmBGbk11dGAgb3IgYEZuT25jZWAgdXNpbmcgY2FsbCBub3RhdGlvbiwgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUKZnVuY3Rpb24gbXVzdCBtYXRjaCBpdHMgZGVmaW5pdGlvbi4KCkEgZ2VuZXJpYyBmdW5jdGlvbiBtdXN0IGJlIHRyZWF0ZWQgc2ltaWxhcmx5OgoKYGBgCmZuIGZvbzxGOiBGbigpPihmOiBGKSB7CiAgICBmKCk7IC8vIHRoaXMgaXMgdmFsaWQsIGJ1dCBmKDMpIHdvdWxkIG5vdCB3b3JrCn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////D9kE2QQAAQDZBACfESZCAAB4AAAAeQAAvQIOBgAAdwIFAQRTb21lAQEAnw4AAXgAAL0CDgYAAncAAQCoAiQGAAB2AQEAnw4AAgCpAhJBAJ8OBQEFRTAwNTcAAR8FBQABAAUAqAIkBgAAdgEBAaQOAAF3AADOESZEAAB9AAACAM4RJkQAnw4FAfAGVGhlIGJ1aWx0LWluIGZ1bmN0aW9uIHRyYWl0cyBhcmUgZ2VuZXJpYyBvdmVyIGEgdHVwbGUgb2YgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cy4KSWYgb25lIHVzZXMgYW5nbGUtYnJhY2tldCBub3RhdGlvbiAoYEZuPChULCksIE91dHB1dD1VPmApIGluc3RlYWQgb2YgcGFyZW50aGVzZXMKKGBGbihUKSAtPiBVYCkgdG8gZGVub3RlIHRoZSBmdW5jdGlvbiB0cmFpdCwgdGhlIHR5cGUgcGFyYW1ldGVyIHNob3VsZCBiZSBhCnR1cGxlLiBPdGhlcndpc2UgZnVuY3Rpb24gY2FsbCBub3RhdGlvbiBjYW5ub3QgYmUgdXNlZCBhbmQgdGhlIHRyYWl0IHdpbGwgbm90IGJlCmltcGxlbWVudGVkIGJ5IGNsb3N1cmVzLgoKVGhlIG1vc3QgbGlrZWx5IHNvdXJjZSBvZiB0aGlzIGVycm9yIGlzIHVzaW5nIGFuZ2xlLWJyYWNrZXQgbm90YXRpb24gd2l0aG91dAp3cmFwcGluZyB0aGUgZnVuY3Rpb24gYXJndW1lbnQgdHlwZSBpbnRvIGEgdHVwbGUsIGZvciBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDU5CiMhW2ZlYXR1cmUodW5ib3hlZF9jbG9zdXJlcyldCgpmbiBmb288RjogRm48aTMyPj4oZjogRikgLT4gRjo6T3V0cHV0IHsgZigzKSB9CmBgYAoKSXQgY2FuIGJlIGZpeGVkIGJ5IGFkanVzdGluZyB0aGUgdHJhaXQgYm91bmQgbGlrZSB0aGlzOgoKYGBgCiMhW2ZlYXR1cmUodW5ib3hlZF9jbG9zdXJlcyldCgpmbiBmb288RjogRm48KGkzMiwpPj4oZjogRikgLT4gRjo6T3V0cHV0IHsgZigzKSB9CmBgYAoKTm90ZSB0aGF0IGAoVCwpYCBhbHdheXMgZGVub3RlcyB0aGUgdHlwZSBvZiBhIDEtdHVwbGUgY29udGFpbmluZyBhbiBlbGVtZW50IG9mCnR5cGUgYFRgLiBUaGUgY29tbWEgaXMgbmVjZXNzYXJ5IGZvciBzeW50YWN0aWMgZGlzYW1iaWd1YXRpb24uCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////z/wBvAGAAEA8AYAzhEmRAAAfAAAAH0AAL0CDgYAAHsCBQEEU29tZQEBAJ8OAAF8AAC9Ag4GAAJ7AAEAqAIkBgAAegEBAJ8OAAIAqQISQwCfDgUBBUUwMDU5AAEfBQUAAQAFAKgCJAYAAHoBAQGkDgABewAA/REmRgAAgQEAAAIA/REmRgCfDgUBjQhFeHRlcm5hbCBDIGZ1bmN0aW9ucyBhcmUgYWxsb3dlZCB0byBiZSB2YXJpYWRpYy4gSG93ZXZlciwgYSB2YXJpYWRpYyBmdW5jdGlvbgp0YWtlcyBhIG1pbmltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cy4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIEMncyB2YXJpYWRpYyBgcHJpbnRmYApmdW5jdGlvbjoKCmBgYGNvbXBpbGVfZmFpbCxFMDA2MAp1c2Ugc3RkOjpvczo6cmF3Ojp7Y19jaGFyLCBjX2ludH07CgpleHRlcm4gIkMiIHsKICAgIGZuIHByaW50ZihfOiAqY29uc3QgY19jaGFyLCAuLi4pIC0+IGNfaW50Owp9Cgp1bnNhZmUgeyBwcmludGYoKTsgfSAvLyBlcnJvciEKYGBgCgpVc2luZyB0aGlzIGRlY2xhcmF0aW9uLCBpdCBtdXN0IGJlIGNhbGxlZCB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudCwgc28Kc2ltcGx5IGNhbGxpbmcgYHByaW50ZigpYCBpcyBpbnZhbGlkLiBCdXQgdGhlIGZvbGxvd2luZyB1c2VzIGFyZSBhbGxvd2VkOgoKYGBgCiMgIyFbZmVhdHVyZShzdGF0aWNfbm9idW5kbGUpXQojIHVzZSBzdGQ6Om9zOjpyYXc6OntjX2NoYXIsIGNfaW50fTsKIyAjW2NmZ19hdHRyKGFsbCh3aW5kb3dzLCB0YXJnZXRfZW52ID0gIm1zdmMiKSwKIyAgICAgICAgICAgIGxpbmsobmFtZSA9ICJsZWdhY3lfc3RkaW9fZGVmaW5pdGlvbnMiLCBraW5kID0gInN0YXRpYy1ub2J1bmRsZSIpKV0KIyBleHRlcm4gIkMiIHsgZm4gcHJpbnRmKF86ICpjb25zdCBjX2NoYXIsIC4uLikgLT4gY19pbnQ7IH0KIyBmbiBtYWluKCkgewp1bnNhZmUgewogICAgdXNlIHN0ZDo6ZmZpOjpDU3RyaW5nOwoKICAgIGxldCBmbXQgPSBDU3RyaW5nOjpuZXcoInRlc3RcbiIpLnVud3JhcCgpOwogICAgcHJpbnRmKGZtdC5hc19wdHIoKSk7CgogICAgbGV0IGZtdCA9IENTdHJpbmc6Om5ldygibnVtYmVyID0gJWRcbiIpLnVud3JhcCgpOwogICAgcHJpbnRmKGZtdC5hc19wdHIoKSwgMyk7CgogICAgbGV0IGZtdCA9IENTdHJpbmc6Om5ldygiJWQsICVkXG4iKS51bndyYXAoKTsKICAgIHByaW50ZihmbXQuYXNfcHRyKCksIDEwLCA1KTsKfQojIH0KYGBgCgAR////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8/jQiNCAABAI0IAP0RJkYAAIABAAAAgQEAAL0CDgYAAH8CBQEEU29tZQEBAJ8OAAGAAQAAvQIOBgACfwABAKgCJAYAAH4BAQCfDgACAKkCEkUAnw4FAQVFMDA2MAABHwUFAAEABQCoAiQGAAB+AQEBpA4AAX8AAKwSJkgAAIUBAAACAKwSJkgAnw4FAYsEQW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIHdhcyBwYXNzZWQgd2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDYxCmZuIGYodTogaTMyKSB7fQoKZigpOyAvLyBlcnJvciEKYGBgCgpUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gYSBmdW5jdGlvbiBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzCnNwZWNpZmllZCBpbiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLgoKRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gbGlrZToKCmBgYApmbiBmKGE6IHUxNiwgYjogJnN0cikge30KYGBgCgpNdXN0IGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBleGFjdGx5IHR3byBhcmd1bWVudHMsIGUuZy4sIGBmKDIsICJ0ZXN0IilgLgoKTm90ZSB0aGF0IFJ1c3QgZG9lcyBub3QgaGF2ZSBhIG5vdGlvbiBvZiBvcHRpb25hbCBmdW5jdGlvbiBhcmd1bWVudHMgb3IKdmFyaWFkaWMgZnVuY3Rpb25zIChleGNlcHQgZm9yIGl0cyBDLUZGSSkuCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/D4sEiwQAAQCLBACsEiZIAACEAQAAAIUBAAC9Ag4GAACDAQIFAQRTb21lAQEAnw4AAYQBAAC9Ag4GAAKDAQABAKgCJAYAAIIBAQEAnw4AAgCpAhJHAJ8OBQEFRTAwNjEAAR8FBQABAAUAqAIkBgAAggEBAQGkDgABgwEAANsSJkoAAIkBAAACANsSJkoAnw4FAb8EQSBzdHJ1Y3QncyBvciBzdHJ1Y3QtbGlrZSBlbnVtIHZhcmlhbnQncyBmaWVsZCB3YXMgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA2MgpzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMiwKfQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gRm9vIHsKICAgICAgICAgICAgICAgIHg6IDAsCiAgICAgICAgICAgICAgICB4OiAwLCAvLyBlcnJvcjogZmllbGQgYHhgIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZQogICAgICAgICAgICB9Owp9CmBgYAoKVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCBkdXJpbmcgYW4gYXR0ZW1wdCB0byBidWlsZCBhIHN0cnVjdCBvciBzdHJ1Y3QtbGlrZQplbnVtIHZhcmlhbnQsIG9uZSBvZiB0aGUgZmllbGRzIHdhcyBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UuIEVhY2ggZmllbGQgc2hvdWxkCmJlIHNwZWNpZmllZCBleGFjdGx5IG9uZSB0aW1lLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBGb28gewogICAgeDogaTMyLAp9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBGb28geyB4OiAwIH07IC8vIG9rIQp9CmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////9/vwS/BAABAL8EANsSJkoAAIgBAAAAiQEAAL0CDgYAAIcBAgUBBFNvbWUBAQCfDgABiAEAAL0CDgYAAocBAAEAqAIkBgAAhgEBAQCfDgACAKkCEkkAnw4FAQVFMDA2MgABHwUFAAEABQCoAiQGAACGAQEBAaQOAAGHAQAAihMmTAAAjQEAAAIAihMmTACfDgUB/wJBIHN0cnVjdCdzIG9yIHN0cnVjdC1saWtlIGVudW0gdmFyaWFudCdzIGZpZWxkIHdhcyBub3QgcHJvdmlkZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDYzCnN0cnVjdCBGb28gewogICAgeDogaTMyLAogICAgeTogaTMyLAp9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBGb28geyB4OiAwIH07IC8vIGVycm9yOiBtaXNzaW5nIGZpZWxkOiBgeWAKfQpgYGAKCkVhY2ggZmllbGQgc2hvdWxkIGJlIHNwZWNpZmllZCBleGFjdGx5IG9uY2UuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbyB7CiAgICB4OiBpMzIsCiAgICB5OiBpMzIsCn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IEZvbyB7IHg6IDAsIHk6IDAgfTsgLy8gb2shCn0KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH//////////3//Av8CAAEA/wIAihMmTAAAjAEAAACNAQAAvQIOBgAAiwECBQEEU29tZQEBAJ8OAAGMAQAAvQIOBgACiwEAAQCoAiQGAACKAQEBAJ8OAAIAqQISSwCfDgUBBUUwMDYzAAEfBQUAAQAFAKgCJAYAAIoBAQEBpA4AAYsBAAC5EyZOAACRAQAAAgC5EyZOAJ8OBQGSAkFuIGludmFsaWQgbGVmdC1oYW5kIHNpZGUgZXhwcmVzc2lvbiB3YXMgdXNlZCBvbiBhbiBhc3NpZ25tZW50IG9wZXJhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNjcKMTIgKz0gMTsgLy8gZXJyb3IhCmBgYAoKWW91IG5lZWQgdG8gaGF2ZSBhIHBsYWNlIGV4cHJlc3Npb24gdG8gYmUgYWJsZSB0byBhc3NpZ24gaXQgc29tZXRoaW5nLiBGb3IKZXhhbXBsZToKCmBgYApsZXQgbXV0IHg6IGk4ID0gMTI7CnggKz0gMTsgLy8gb2shCmBgYAoABf///////////wH///////////8B////////////Af///////////wH//w+SApICAAEAkgIAuRMmTgAAkAEAAACRAQAAvQIOBgAAjwECBQEEU29tZQEBAJ8OAAGQAQAAvQIOBgACjwEAAQCoAiQGAACOAQEBAJ8OAAIAqQISTQCfDgUBBUUwMDY3AAEfBQUAAQAFAKgCJAYAAI4BAQEBpA4AAY8BAADoEyZQAACVAQAAAgDoEyZQAJ8OBQHIAlRoZSBjb21waWxlciBmb3VuZCBhIGZ1bmN0aW9uIHdob3NlIGJvZHkgY29udGFpbnMgYSBgcmV0dXJuO2Agc3RhdGVtZW50IGJ1dAp3aG9zZSByZXR1cm4gdHlwZSBpcyBub3QgYCgpYC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNjkKLy8gZXJyb3IKZm4gZm9vKCkgLT4gdTggewogICAgcmV0dXJuOwp9CmBgYAoKU2luY2UgYHJldHVybjtgIGlzIGp1c3QgbGlrZSBgcmV0dXJuICgpO2AsIHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiB0aGUKZnVuY3Rpb24ncyByZXR1cm4gdHlwZSBhbmQgdGhlIHZhbHVlIGJlaW5nIHJldHVybmVkLgoABv///////////wH///////////8B////////////Af///////////wH///////////8B/wHIAsgCAAEAyAIA6BMmUAAAlAEAAACVAQAAvQIOBgAAkwECBQEEU29tZQEBAJ8OAAGUAQAAvQIOBgACkwEAAQCoAiQGAACSAQEBAJ8OAAIAqQISTwCfDgUBBUUwMDY5AAEfBQUAAQAFAKgCJAYAAJIBAQEBpA4AAZMBAACXFCZSAACZAQAAAgCXFCZSAJ8OBQGhCUFuIGFzc2lnbm1lbnQgb3BlcmF0b3Igd2FzIHVzZWQgb24gYSBub24tcGxhY2UgZXhwcmVzc2lvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwMDcwCnN0cnVjdCBTb21lU3RydWN0IHsKICAgIHg6IGkzMiwKICAgIHk6IGkzMiwKfQoKY29uc3QgU09NRV9DT05TVDogaTMyID0gMTI7CgpmbiBzb21lX290aGVyX2Z1bmMoKSB7fQoKZm4gc29tZV9mdW5jdGlvbigpIHsKICAgIFNPTUVfQ09OU1QgPSAxNDsgLy8gZXJyb3I6IGEgY29uc3RhbnQgdmFsdWUgY2Fubm90IGJlIGNoYW5nZWQhCiAgICAxID0gMzsgLy8gZXJyb3I6IDEgaXNuJ3QgYSB2YWxpZCBwbGFjZSEKICAgIHNvbWVfb3RoZXJfZnVuYygpID0gNDsgLy8gZXJyb3I6IHdlIGNhbm5vdCBhc3NpZ24gdmFsdWUgdG8gYSBmdW5jdGlvbiEKICAgIFNvbWVTdHJ1Y3Q6OnggPSAxMjsgLy8gZXJyb3I6IFNvbWVTdHJ1Y3QgYSBzdHJ1Y3R1cmUgbmFtZSBidXQgaXQgaXMgdXNlZAogICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgbGlrZSBhIHZhcmlhYmxlIQp9CmBgYAoKVGhlIGxlZnQtaGFuZCBzaWRlIG9mIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IgbXVzdCBiZSBhIHBsYWNlIGV4cHJlc3Npb24uIEEKcGxhY2UgZXhwcmVzc2lvbiByZXByZXNlbnRzIGEgbWVtb3J5IGxvY2F0aW9uIGFuZCBjYW4gYmUgYSB2YXJpYWJsZSAod2l0aApvcHRpb25hbCBuYW1lc3BhY2luZyksIGEgZGVyZWZlcmVuY2UsIGFuIGluZGV4aW5nIGV4cHJlc3Npb24gb3IgYSBmaWVsZApyZWZlcmVuY2UuCgpNb3JlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIHRoZSBbRXhwcmVzc2lvbnNdIHNlY3Rpb24gb2YgdGhlIFJlZmVyZW5jZS4KCltFeHByZXNzaW9uc106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2V4cHJlc3Npb25zLmh0bWwjcGxhY2VzLXJ2YWx1ZXMtYW5kLXRlbXBvcmFyaWVzCgpBbmQgbm93IGxldCdzIGdpdmUgd29ya2luZyBleGFtcGxlczoKCmBgYApzdHJ1Y3QgU29tZVN0cnVjdCB7CiAgICB4OiBpMzIsCiAgICB5OiBpMzIsCn0KbGV0IG11dCBzID0gU29tZVN0cnVjdCB7IHg6IDAsIHk6IDAgfTsKCnMueCA9IDM7IC8vIHRoYXQncyBnb29kICEKCi8vIC4uLgoKZm4gc29tZV9mdW5jKHg6ICZtdXQgaTMyKSB7CiAgICAqeCA9IDEyOyAvLyB0aGF0J3MgZ29vZCAhCn0KYGBgCgAT////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////x+hCaEJAAEAoQkAlxQmUgAAmAEAAACZAQAAvQIOBgAAlwECBQEEU29tZQEBAJ8OAAGYAQAAvQIOBgAClwEAAQCoAiQGAACWAQEBAJ8OAAIAqQISUQCfDgUBBUUwMDcwAAEfBQUAAQAFAKgCJAYAAJYBAQEBpA4AAZcBAADGFCZUAACdAQAAAgDGFCZUAJ8OBQGvBEEgc3RydWN0dXJlLWxpdGVyYWwgc3ludGF4IHdhcyB1c2VkIHRvIGNyZWF0ZSBhbiBpdGVtIHRoYXQgaXMgbm90IGEgc3RydWN0dXJlCm9yIGVudW0gdmFyaWFudC4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNzEKdHlwZSBVMzIgPSB1MzI7CmxldCB0ID0gVTMyIHsgdmFsdWU6IDQgfTsgLy8gZXJyb3I6IGV4cGVjdGVkIHN0cnVjdCwgdmFyaWFudCBvciB1bmlvbiB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvdW5kIGJ1aWx0aW4gdHlwZSBgdTMyYApgYGAKClRvIGZpeCB0aGlzLCBlbnN1cmUgdGhhdCB0aGUgbmFtZSB3YXMgY29ycmVjdGx5IHNwZWxsZWQsIGFuZCB0aGF0IHRoZSBjb3JyZWN0CmZvcm0gb2YgaW5pdGlhbGl6ZXIgd2FzIHVzZWQuCgpGb3IgZXhhbXBsZSwgdGhlIGNvZGUgYWJvdmUgY2FuIGJlIGZpeGVkIHRvOgoKYGBgCmVudW0gRm9vIHsKICAgIEZpcnN0VmFsdWUoaTMyKQp9CgpmbiBtYWluKCkgewogICAgbGV0IHUgPSBGb286OkZpcnN0VmFsdWUoMGkzMik7CgogICAgbGV0IHQgPSA0Owp9CmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////H68ErwQAAQCvBADGFCZUAACcAQAAAJ0BAAC9Ag4GAACbAQIFAQRTb21lAQEAnw4AAZwBAAC9Ag4GAAKbAQABAKgCJAYAAJoBAQEAnw4AAgCpAhJTAJ8OBQEFRTAwNzEAAR8FBQABAAUAqAIkBgAAmgEBAQGkDgABmwEAAPUUJlYAAKEBAAACAPUUJlYAnw4FAfIIQSByZWN1cnNpdmUgdHlwZSBoYXMgaW5maW5pdGUgc2l6ZSBiZWNhdXNlIGl0IGRvZXNuJ3QgaGF2ZSBhbiBpbmRpcmVjdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNzIKc3RydWN0IExpc3ROb2RlIHsKICAgIGhlYWQ6IHU4LAogICAgdGFpbDogT3B0aW9uPExpc3ROb2RlPiwgLy8gZXJyb3I6IG5vIGluZGlyZWN0aW9uIGhlcmUgc28gaW1wb3NzaWJsZSB0bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGNvbXB1dGUgdGhlIHR5cGUncyBzaXplCn0KYGBgCgpXaGVuIGRlZmluaW5nIGEgcmVjdXJzaXZlIHN0cnVjdCBvciBlbnVtLCBhbnkgdXNlIG9mIHRoZSB0eXBlIGJlaW5nIGRlZmluZWQKZnJvbSBpbnNpZGUgdGhlIGRlZmluaXRpb24gbXVzdCBvY2N1ciBiZWhpbmQgYSBwb2ludGVyIChsaWtlIGBCb3hgLCBgJmAgb3IKYFJjYCkuIFRoaXMgaXMgYmVjYXVzZSBzdHJ1Y3RzIGFuZCBlbnVtcyBtdXN0IGhhdmUgYSB3ZWxsLWRlZmluZWQgc2l6ZSwgYW5kCndpdGhvdXQgdGhlIHBvaW50ZXIsIHRoZSBzaXplIG9mIHRoZSB0eXBlIHdvdWxkIG5lZWQgdG8gYmUgdW5ib3VuZGVkLgoKSW4gdGhlIGV4YW1wbGUsIHRoZSB0eXBlIGNhbm5vdCBoYXZlIGEgd2VsbC1kZWZpbmVkIHNpemUsIGJlY2F1c2UgaXQgbmVlZHMgdG8gYmUKYXJiaXRyYXJpbHkgbGFyZ2UgKHNpbmNlIHdlIHdvdWxkIGJlIGFibGUgdG8gbmVzdCBgTGlzdE5vZGVgcyB0byBhbnkgZGVwdGgpLgpTcGVjaWZpY2FsbHksCgpgYGBwbGFpbgpzaXplIG9mIGBMaXN0Tm9kZWAgPSAxIGJ5dGUgZm9yIGBoZWFkYAogICAgICAgICAgICAgICAgICAgKyAxIGJ5dGUgZm9yIHRoZSBkaXNjcmltaW5hbnQgb2YgdGhlIGBPcHRpb25gCiAgICAgICAgICAgICAgICAgICArIHNpemUgb2YgYExpc3ROb2RlYApgYGAKCk9uZSB3YXkgdG8gZml4IHRoaXMgaXMgYnkgd3JhcHBpbmcgYExpc3ROb2RlYCBpbiBhIGBCb3hgLCBsaWtlIHNvOgoKYGBgCnN0cnVjdCBMaXN0Tm9kZSB7CiAgICBoZWFkOiB1OCwKICAgIHRhaWw6IE9wdGlvbjxCb3g8TGlzdE5vZGU+PiwKfQpgYGAKClRoaXMgd29ya3MgYmVjYXVzZSBgQm94YCBpcyBhIHBvaW50ZXIsIHNvIGl0cyBzaXplIGlzIHdlbGwta25vd24uCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////AfII8ggAAQDyCAD1FCZWAACgAQAAAKEBAAC9Ag4GAACfAQIFAQRTb21lAQEAnw4AAaABAAC9Ag4GAAKfAQABAKgCJAYAAJ4BAQEAnw4AAgCpAhJVAJ8OBQEFRTAwNzIAAR8FBQABAAUAqAIkBgAAngEBAQGkDgABnwEAAKQVJlgAAKUBAAACAKQVJlgAnw4FAacEIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKWW91IGNhbm5vdCBkZWZpbmUgYSBzdHJ1Y3QgKG9yIGVudW0pIGBGb29gIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgYEZvb2AKaW4gb3JkZXIgdG8gbWFrZSBhIG5ldyBgRm9vYCB2YWx1ZS4gVGhpcyBpcyBiZWNhdXNlIHRoZXJlIHdvdWxkIGJlIG5vIHdheSBhCmZpcnN0IGluc3RhbmNlIG9mIGBGb29gIGNvdWxkIGJlIG1hZGUgdG8gaW5pdGlhbGl6ZSBhbm90aGVyIGluc3RhbmNlIQoKSGVyZSdzIGFuIGV4YW1wbGUgb2YgYSBzdHJ1Y3QgdGhhdCBoYXMgdGhpcyBwcm9ibGVtOgoKYGBgCnN0cnVjdCBGb28geyB4OiBCb3g8Rm9vPiB9IC8vIGVycm9yCmBgYAoKT25lIGZpeCBpcyB0byB1c2UgYE9wdGlvbmAsIGxpa2Ugc286CgpgYGAKc3RydWN0IEZvbyB7IHg6IE9wdGlvbjxCb3g8Rm9vPj4gfQpgYGAKCk5vdyBpdCdzIHBvc3NpYmxlIHRvIGNyZWF0ZSBhdCBsZWFzdCBvbmUgaW5zdGFuY2Ugb2YgYEZvb2A6IGBGb28geyB4OiBOb25lIH1gLgoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8PpwSnBAABAKcEAKQVJlgAAKQBAAAApQEAAL0CDgYAAKMBAgUBBFNvbWUBAQCfDgABpAEAAL0CDgYAAqMBAAEAqAIkBgAAogEBAQCfDgACAKkCElcAnw4FAQVFMDA3MwABHwUFAAEABQCoAiQGAACiAQEBAaQOAAGjAQAA0xUmWgAAqQEAAAIA0xUmWgCfDgUB7wMjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpXaGVuIHVzaW5nIHRoZSBgI1tzaW1kXWAgYXR0cmlidXRlIG9uIGEgdHVwbGUgc3RydWN0LCB0aGUgY29tcG9uZW50cyBvZiB0aGUKdHVwbGUgc3RydWN0IG11c3QgYWxsIGJlIG9mIGEgY29uY3JldGUsIG5vbmdlbmVyaWMgdHlwZSBzbyB0aGUgY29tcGlsZXIgY2FuCnJlYXNvbiBhYm91dCBob3cgdG8gdXNlIFNJTUQgd2l0aCB0aGVtLiBUaGlzIGVycm9yIHdpbGwgb2NjdXIgaWYgdGhlIHR5cGVzCmFyZSBnZW5lcmljLgoKVGhpcyB3aWxsIGNhdXNlIGFuIGVycm9yOgoKYGBgCiMhW2ZlYXR1cmUocmVwcl9zaW1kKV0KCiNbcmVwcihzaW1kKV0Kc3RydWN0IEJhZDxUPihULCBULCBUKTsKYGBgCgpUaGlzIHdpbGwgbm90OgoKYGBgCiMhW2ZlYXR1cmUocmVwcl9zaW1kKV0KCiNbcmVwcihzaW1kKV0Kc3RydWN0IEdvb2QodTMyLCB1MzIsIHUzMik7CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8f7wPvAwABAO8DANMVJloAAKgBAAAAqQEAAL0CDgYAAKcBAgUBBFNvbWUBAQCfDgABqAEAAL0CDgYAAqcBAAEAqAIkBgAApgEBAQCfDgACAKkCElkAnw4FAQVFMDA3NAABHwUFAAEABQCoAiQGAACmAQEBAaQOAAGnAQAAghYmXAAArQEAAAIAghYmXACfDgUBsQNBIGAjW3NpbWRdYCBhdHRyaWJ1dGUgd2FzIGFwcGxpZWQgdG8gYW4gZW1wdHkgdHVwbGUgc3RydWN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA3NQojIVtmZWF0dXJlKHJlcHJfc2ltZCldCgojW3JlcHIoc2ltZCldCnN0cnVjdCBCYWQ7IC8vIGVycm9yIQpgYGAKClRoZSBgI1tzaW1kXWAgYXR0cmlidXRlIGNhbiBvbmx5IGJlIGFwcGxpZWQgdG8gbm9uIGVtcHR5IHR1cGxlIHN0cnVjdHMsIGJlY2F1c2UKaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHRyeSB0byB1c2UgU0lNRCBvcGVyYXRpb25zIHdoZW4gdGhlcmUgYXJlIG5vIHZhbHVlcyB0bwpvcGVyYXRlIG9uLgoKRml4ZWQgZXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHJlcHJfc2ltZCldCgojW3JlcHIoc2ltZCldCnN0cnVjdCBHb29kKHUzMik7IC8vIG9rIQpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////9/sQOxAwABALEDAIIWJlwAAKwBAAAArQEAAL0CDgYAAKsBAgUBBFNvbWUBAQCfDgABrAEAAL0CDgYAAqsBAAEAqAIkBgAAqgEBAQCfDgACAKkCElsAnw4FAQVFMDA3NQABHwUFAAEABQCoAiQGAACqAQEBAaQOAAGrAQAAsRYmXgAAsQEAAAIAsRYmXgCfDgUB6gNBbGwgdHlwZXMgaW4gYSB0dXBsZSBzdHJ1Y3QgYXJlbid0IHRoZSBzYW1lIHdoZW4gdXNpbmcgdGhlIGAjW3NpbWRd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XSBzZWN0aW9uIG9mIHRoZSBSZWZlcmVuY2UKZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc2V0dGluZyBjdXN0b20gaW50ZWdlciB0eXBlcyBvbiBmaWVsZGxlc3MgZW51bXMKdXNpbmcgdGhlIFtgcmVwcmAgYXR0cmlidXRlXVtyZXByLWF0dHJpYnV0ZV0uCgpbY3VzdG9tLWRpc2NyaW1pbmFudHNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9pdGVtcy9lbnVtZXJhdGlvbnMuaHRtbCNjdXN0b20tZGlzY3JpbWluYW50LXZhbHVlcy1mb3ItZmllbGQtbGVzcy1lbnVtZXJhdGlvbnMKW3JlcHItYXR0cmlidXRlXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvdHlwZS1sYXlvdXQuaHRtbCNyZXByYy1lbnVtcwoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////Ad0G3QYAAQDdBgCPFyZiAAC4AQAAALkBAAC9Ag4GAAC3AQIFAQRTb21lAQEAnw4AAbgBAAC9Ag4GAAK3AQABAKgCJAYAALYBAQEAnw4AAgCpAhJhAJ8OBQEFRTAwODAAAR8FBQABAAUAqAIkBgAAtgEBAQGkDgABtwEAAL4XJmQAAL0BAAACAL4XJmQAnw4FAfsFQSBkaXNjcmltaW5hbnQgdmFsdWUgaXMgcHJlc2VudCBtb3JlIHRoYW4gb25jZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwODEKZW51bSBFbnVtIHsKICAgIFAgPSAzLAogICAgWCA9IDMsIC8vIGVycm9yIQogICAgWSA9IDUsCn0KYGBgCgpFbnVtIGRpc2NyaW1pbmFudHMgYXJlIHVzZWQgdG8gZGlmZmVyZW50aWF0ZSBlbnVtIHZhcmlhbnRzIHN0b3JlZCBpbiBtZW1vcnkuClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIHNhbWUgdmFsdWUgd2FzIHVzZWQgZm9yIHR3byBvciBtb3JlIHZhcmlhbnRzLAptYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBkaXN0aW5ndWlzaCB0aGVtLgoKYGBgCmVudW0gRW51bSB7CiAgICBQLAogICAgWCA9IDMsIC8vIG9rIQogICAgWSA9IDUsCn0KYGBgCgpOb3RlIHRoYXQgdmFyaWFudHMgd2l0aG91dCBhIG1hbnVhbGx5IHNwZWNpZmllZCBkaXNjcmltaW5hbnQgYXJlIG51bWJlcmVkIGZyb20KdG9wIHRvIGJvdHRvbSBzdGFydGluZyBmcm9tIDAsIHNvIGNsYXNoZXMgY2FuIG9jY3VyIHdpdGggc2VlbWluZ2x5IHVucmVsYXRlZAp2YXJpYW50cy4KCmBgYGNvbXBpbGVfZmFpbCxFMDA4MQplbnVtIEJhZCB7CiAgICBYLAogICAgWSA9IDAsIC8vIGVycm9yIQp9CmBgYAoKSGVyZSBgWGAgd2lsbCBoYXZlIGFscmVhZHkgYmVlbiBzcGVjaWZpZWQgdGhlIGRpc2NyaW1pbmFudCAwIGJ5IHRoZSB0aW1lIGBZYCBpcwplbmNvdW50ZXJlZCwgc28gYSBjb25mbGljdCBvY2N1cnMuCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wf7BfsFAAEA+wUAvhcmZAAAvAEAAAC9AQAAvQIOBgAAuwECBQEEU29tZQEBAJ8OAAG8AQAAvQIOBgACuwEAAQCoAiQGAAC6AQEBAJ8OAAIAqQISYwCfDgUBBUUwMDgxAAEfBQUAAQAFAKgCJAYAALoBAQEBpA4AAbsBAADtFyZmAADBAQAAAgDtFyZmAJ8OBQGSBUFuIHVuc3VwcG9ydGVkIHJlcHJlc2VudGF0aW9uIHdhcyBhdHRlbXB0ZWQgb24gYSB6ZXJvLXZhcmlhbnQgZW51bS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwODQKI1tyZXByKGkzMildCmVudW0gTmlnaHRzV2F0Y2gge30gLy8gZXJyb3I6IHVuc3VwcG9ydGVkIHJlcHJlc2VudGF0aW9uIGZvciB6ZXJvLXZhcmlhbnQgZW51bQpgYGAKCkl0IGlzIGltcG9zc2libGUgdG8gZGVmaW5lIGFuIGludGVnZXIgdHlwZSB0byBiZSB1c2VkIHRvIHJlcHJlc2VudCB6ZXJvLXZhcmlhbnQKZW51bSB2YWx1ZXMgYmVjYXVzZSB0aGVyZSBhcmUgbm8gemVyby12YXJpYW50IGVudW0gdmFsdWVzLiBUaGVyZSBpcyBubyB3YXkgdG8KY29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoZSBmb2xsb3dpbmcgdHlwZSB1c2luZyBvbmx5IHNhZmUgY29kZS4gU28geW91IGhhdmUKdHdvIHNvbHV0aW9ucy4gRWl0aGVyIHlvdSBhZGQgdmFyaWFudHMgaW4geW91ciBlbnVtOgoKYGBgCiNbcmVwcihpMzIpXQplbnVtIE5pZ2h0c1dhdGNoIHsKICAgIEpvblNub3csCiAgICBDb21tYW5kZXIsCn0KYGBgCgpvciB5b3UgcmVtb3ZlIHRoZSBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIG9mIHlvdXIgZW51bToKCmBgYAplbnVtIE5pZ2h0c1dhdGNoIHt9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//w+SBZIFAAEAkgUA7RcmZgAAwAEAAADBAQAAvQIOBgAAvwECBQEEU29tZQEBAJ8OAAHAAQAAvQIOBgACvwEAAQCoAiQGAAC+AQEBAJ8OAAIAqQISZQCfDgUBBUUwMDg0AAEfBQUAAQAFAKgCJAYAAL4BAQEBpA4AAb8BAACcGCZoAADFAQAAAgCcGCZoAJ8OBQGSAyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRvbyBtYW55IHR5cGUgYXJndW1lbnRzIHdlcmUgc3VwcGxpZWQgZm9yIGEgZnVuY3Rpb24uIEZvciBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CmZuIGZvbzxUPigpIHt9CgpmbiBtYWluKCkgewogICAgZm9vOjo8ZjY0LCBib29sPigpOyAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZXhwZWN0ZWQgMSwgZm91bmQgMgp9CmBgYAoKVGhlIG51bWJlciBvZiBzdXBwbGllZCBhcmd1bWVudHMgbXVzdCBleGFjdGx5IG1hdGNoIHRoZSBudW1iZXIgb2YgZGVmaW5lZCB0eXBlCnBhcmFtZXRlcnMuCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8PkgOSAwABAJIDAJwYJmgAAMQBAAAAxQEAAL0CDgYAAMMBAgUBBFNvbWUBAQCfDgABxAEAAL0CDgYAAsMBAAEAqAIkBgAAwgEBAQCfDgACAKkCEmcAnw4FAQVFMDA4NwABHwUFAAEABQCoAiQGAADCAQEBAaQOAAHDAQAAyxgmagAAyQEAAAIAyxgmagCfDgUBlgcjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpZb3UgZ2F2ZSB0b28gbWFueSBsaWZldGltZSBhcmd1bWVudHMuIEVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDcKZm4gZigpIHt9CgpmbiBtYWluKCkgewogICAgZjo6PCdzdGF0aWM+KCkgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiBsaWZldGltZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZXhwZWN0ZWQgMCwgZm91bmQgMQp9CmBgYAoKUGxlYXNlIGNoZWNrIHlvdSBnaXZlIHRoZSByaWdodCBudW1iZXIgb2YgbGlmZXRpbWUgYXJndW1lbnRzLiBFeGFtcGxlOgoKYGBgCmZuIGYoKSB7fQoKZm4gbWFpbigpIHsKICAgIGYoKSAvLyBvayEKfQpgYGAKCkl0J3MgYWxzbyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IHRoZSBSdXN0IGNvbXBpbGVyIGNhbiBnZW5lcmFsbHkKZGV0ZXJtaW5lIHRoZSBsaWZldGltZSBieSBpdHNlbGYuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbyB7CiAgICB2YWx1ZTogU3RyaW5nCn0KCmltcGwgRm9vIHsKICAgIC8vIGl0IGNhbiBiZSB3cml0dGVuIGxpa2UgdGhpcwogICAgZm4gZ2V0X3ZhbHVlPCdhPigmJ2Egc2VsZikgLT4gJidhIHN0ciB7ICZzZWxmLnZhbHVlIH0KICAgIC8vIGJ1dCB0aGUgY29tcGlsZXIgd29ya3MgZmluZSB3aXRoIHRoaXMgdG9vOgogICAgZm4gd2l0aG91dF9saWZldGltZSgmc2VsZikgLT4gJnN0ciB7ICZzZWxmLnZhbHVlIH0KfQoKZm4gbWFpbigpIHsKICAgIGxldCBmID0gRm9vIHsgdmFsdWU6ICJoZWxsbyIudG9fb3duZWQoKSB9OwoKICAgIHByaW50bG4hKCJ7fSIsIGYuZ2V0X3ZhbHVlKCkpOwogICAgcHJpbnRsbiEoInt9IiwgZi53aXRob3V0X2xpZmV0aW1lKCkpOwp9CmBgYAoAD////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////AZYHlgcAAQCWBwDLGCZqAADIAQAAAMkBAAC9Ag4GAADHAQIFAQRTb21lAQEAnw4AAcgBAAC9Ag4GAALHAQABAKgCJAYAAMYBAQEAnw4AAgCpAhJpAJ8OBQEFRTAwODgAAR8FBQABAAUAqAIkBgAAxgEBAQGkDgABxwEAAPoYJmwAAM0BAAACAPoYJmwAnw4FAZoFIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVG9vIGZldyB0eXBlIGFyZ3VtZW50cyB3ZXJlIHN1cHBsaWVkIGZvciBhIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpmbiBmb288VCwgVT4oKSB7fQoKZm4gbWFpbigpIHsKICAgIGZvbzo6PGY2ND4oKTsgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czogZXhwZWN0ZWQgMiwgZm91bmQgMQp9CmBgYAoKTm90ZSB0aGF0IGlmIGEgZnVuY3Rpb24gdGFrZXMgbXVsdGlwbGUgdHlwZSBhcmd1bWVudHMgYnV0IHlvdSB3YW50IHRoZSBjb21waWxlcgp0byBpbmZlciBzb21lIG9mIHRoZW0sIHlvdSBjYW4gdXNlIHR5cGUgcGxhY2Vob2xkZXJzOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CmZuIGZvbzxULCBVPih4OiBUKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4OiBib29sID0gdHJ1ZTsKICAgIGZvbzo6PGY2ND4oeCk7ICAgIC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZXhwZWN0ZWQgMiwgZm91bmQgMQogICAgZm9vOjo8XywgZjY0Pih4KTsgLy8gc2FtZSBhcyBgZm9vOjo8Ym9vbCwgZjY0Pih4KWAKfQpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////H5oFmgUAAQCaBQD6GCZsAADMAQAAAM0BAAC9Ag4GAADLAQIFAQRTb21lAQEAnw4AAcwBAAC9Ag4GAALLAQABAKgCJAYAAMoBAQEAnw4AAgCpAhJrAJ8OBQEFRTAwODkAAR8FBQABAAUAqAIkBgAAygEBAQGkDgABywEAAKkZJm4AANEBAAACAKkZJm4Anw4FAckDIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKWW91IGdhdmUgdG9vIGZldyBsaWZldGltZSBhcmd1bWVudHMuIEV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDcKZm4gZm9vPCdhOiAnYiwgJ2I6ICdhPigpIHt9CgpmbiBtYWluKCkgewogICAgZm9vOjo8J3N0YXRpYz4oKTsgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiBsaWZldGltZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZXhwZWN0ZWQgMiwgZm91bmQgMQp9CmBgYAoKUGxlYXNlIGNoZWNrIHlvdSBnaXZlIHRoZSByaWdodCBudW1iZXIgb2YgbGlmZXRpbWUgYXJndW1lbnRzLiBFeGFtcGxlOgoKYGBgCmZuIGZvbzwnYTogJ2IsICdiOiAnYT4oKSB7fQoKZm4gbWFpbigpIHsKICAgIGZvbzo6PCdzdGF0aWMsICdzdGF0aWM+KCk7Cn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8DyQPJAwABAMkDAKkZJm4AANABAAAA0QEAAL0CDgYAAM8BAgUBBFNvbWUBAQCfDgAB0AEAAL0CDgYAAs8BAAEAqAIkBgAAzgEBAQCfDgACAKkCEm0Anw4FAQVFMDA5MAABHwUFAAEABQCoAiQGAADOAQEBAaQOAAHPAQAA2BkmcAAA1QEAAAIA2BkmcACfDgUB8QJBbiB1bm5lY2Vzc2FyeSB0eXBlIG9yIGNvbnN0IHBhcmFtZXRlciB3YXMgZ2l2ZW4gaW4gYSB0eXBlIGFsaWFzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA5MQp0eXBlIEZvbzxUPiA9IHUzMjsgLy8gZXJyb3I6IHR5cGUgcGFyYW1ldGVyIGBUYCBpcyB1bnVzZWQKLy8gb3I6CnR5cGUgRm9vPEEsQj4gPSBCb3g8QT47IC8vIGVycm9yOiB0eXBlIHBhcmFtZXRlciBgQmAgaXMgdW51c2VkCmBgYAoKUGxlYXNlIGNoZWNrIHlvdSBkaWRuJ3Qgd3JpdGUgdG9vIG1hbnkgcGFyYW1ldGVycy4gRXhhbXBsZToKCmBgYAp0eXBlIEZvbyA9IHUzMjsgLy8gb2shCnR5cGUgRm9vMjxBPiA9IEJveDxBPjsgLy8gb2shCmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B////////f/EC8QIAAQDxAgDYGSZwAADUAQAAANUBAAC9Ag4GAADTAQIFAQRTb21lAQEAnw4AAdQBAAC9Ag4GAALTAQABAKgCJAYAANIBAQEAnw4AAgCpAhJvAJ8OBQEFRTAwOTEAAR8FBQABAAUAqAIkBgAA0gEBAQGkDgAB0wEAAIcaJnIAANkBAAACAIcaJnIAnw4FAawEQW4gdW5kZWZpbmVkIGF0b21pYyBvcGVyYXRpb24gZnVuY3Rpb24gd2FzIGRlY2xhcmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA5MgojIVtmZWF0dXJlKGludHJpbnNpY3MpXQoKZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgZm4gYXRvbWljX2ZvbygpOyAvLyBlcnJvcjogdW5yZWNvZ25pemVkIGF0b21pYyBvcGVyYXRpb24KICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGZ1bmN0aW9uCn0KYGBgCgpQbGVhc2UgY2hlY2sgeW91IGRpZG4ndCBtYWtlIGEgbWlzdGFrZSBpbiB0aGUgZnVuY3Rpb24ncyBuYW1lLiBBbGwgaW50cmluc2ljCmZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiBgbGlicnVzdGNfY29kZWdlbl9sbHZtL2ludHJpbnNpYy5yc2AgYW5kIGluCmBsaWJjb3JlL2ludHJpbnNpY3MucnNgIGluIHRoZSBSdXN0IHNvdXJjZSBjb2RlLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBmbiBhdG9taWNfZmVuY2UoKTsgLy8gb2shCn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8DrASsBAABAKwEAIcaJnIAANgBAAAA2QEAAL0CDgYAANcBAgUBBFNvbWUBAQCfDgAB2AEAAL0CDgYAAtcBAAEAqAIkBgAA1gEBAQCfDgACAKkCEnEAnw4FAQVFMDA5MgABHwUFAAEABQCoAiQGAADWAQEBAaQOAAHXAQAAthomdAAA3QEAAAIAthomdACfDgUB6ARBbiB1bmtub3duIGludHJpbnNpYyBmdW5jdGlvbiB3YXMgZGVjbGFyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDkzCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBmbiBmb28oKTsgLy8gZXJyb3I6IHVucmVjb2duaXplZCBpbnRyaW5zaWMgZnVuY3Rpb246IGBmb29gCn0KCmZuIG1haW4oKSB7CiAgICB1bnNhZmUgewogICAgICAgIGZvbygpOwogICAgfQp9CmBgYAoKUGxlYXNlIGNoZWNrIHlvdSBkaWRuJ3QgbWFrZSBhIG1pc3Rha2UgaW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZS4gQWxsIGludHJpbnNpYwpmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gYGxpYnJ1c3RjX2NvZGVnZW5fbGx2bS9pbnRyaW5zaWMucnNgIGFuZCBpbgpgbGliY29yZS9pbnRyaW5zaWNzLnJzYCBpbiB0aGUgUnVzdCBzb3VyY2UgY29kZS4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGludHJpbnNpY3MpXQoKZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgZm4gYXRvbWljX2ZlbmNlKCk7IC8vIG9rIQp9CgpmbiBtYWluKCkgewogICAgdW5zYWZlIHsKICAgICAgICBhdG9taWNfZmVuY2UoKTsKICAgIH0KfQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////x/oBOgEAAEA6AQAthomdAAA3AEAAADdAQAAvQIOBgAA2wECBQEEU29tZQEBAJ8OAAHcAQAAvQIOBgAC2wEAAQCoAiQGAADaAQEBAJ8OAAIAqQIScwCfDgUBBUUwMDkzAAEfBQUAAQAFAKgCJAYAANoBAQEBpA4AAdsBAADlGiZ2AADhAQAAAgDlGiZ2AJ8OBQGoBEFuIGludmFsaWQgbnVtYmVyIG9mIHR5cGUgcGFyYW1ldGVycyB3YXMgZ2l2ZW4gdG8gYW4gaW50cmluc2ljIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA5NAojIVtmZWF0dXJlKGludHJpbnNpY3MpXQoKZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgZm4gc2l6ZV9vZjxULCBVPigpIC0+IHVzaXplOyAvLyBlcnJvcjogaW50cmluc2ljIGhhcyB3cm9uZyBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIG9mIHR5cGUgcGFyYW1ldGVycwp9CmBgYAoKUGxlYXNlIGNoZWNrIHRoYXQgeW91IHByb3ZpZGVkIHRoZSByaWdodCBudW1iZXIgb2YgdHlwZSBwYXJhbWV0ZXJzCmFuZCB2ZXJpZnkgd2l0aCB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gaW4gdGhlIFJ1c3Qgc291cmNlIGNvZGUuCkV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIGZuIHNpemVfb2Y8VD4oKSAtPiB1c2l6ZTsgLy8gb2shCn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////x+oBKgEAAEAqAQA5RomdgAA4AEAAADhAQAAvQIOBgAA3wECBQEEU29tZQEBAJ8OAAHgAQAAvQIOBgAC3wEAAQCoAiQGAADeAQEBAJ8OAAIAqQISdQCfDgUBBUUwMDk0AAEfBQUAAQAFAKgCJAYAAN4BAQEBpA4AAd8BAACUGyZ4AADlAQAAAgCUGyZ4AJ8OBQGQDlRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgYSBsaWZldGltZSBpcyBtaXNzaW5nIGZyb20gYSB0eXBlLiBJZiBpdCBpcyBhbiBlcnJvcgppbnNpZGUgYSBmdW5jdGlvbiBzaWduYXR1cmUsIHRoZSBwcm9ibGVtIG1heSBiZSB3aXRoIGZhaWxpbmcgdG8gYWRoZXJlIHRvIHRoZQpsaWZldGltZSBlbGlzaW9uIHJ1bGVzIChzZWUgYmVsb3cpLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDYKc3RydWN0IEZvbzEgeyB4OiAmYm9vbCB9CiAgICAgICAgICAgICAgLy8gXiBleHBlY3RlZCBsaWZldGltZSBwYXJhbWV0ZXIKc3RydWN0IEZvbzI8J2E+IHsgeDogJidhIGJvb2wgfSAvLyBjb3JyZWN0CgpzdHJ1Y3QgQmFyMSB7IHg6IEZvbzIgfQogICAgICAgICAgICAgIC8vIF5eXl4gZXhwZWN0ZWQgbGlmZXRpbWUgcGFyYW1ldGVyCnN0cnVjdCBCYXIyPCdhPiB7IHg6IEZvbzI8J2E+IH0gLy8gY29ycmVjdAoKZW51bSBCYXoxIHsgQSh1OCksIEIoJmJvb2wpLCB9CiAgICAgICAgICAgICAgICAgIC8vIF4gZXhwZWN0ZWQgbGlmZXRpbWUgcGFyYW1ldGVyCmVudW0gQmF6MjwnYT4geyBBKHU4KSwgQigmJ2EgYm9vbCksIH0gLy8gY29ycmVjdAoKdHlwZSBNeVN0cjEgPSAmc3RyOwogICAgICAgICAgIC8vIF4gZXhwZWN0ZWQgbGlmZXRpbWUgcGFyYW1ldGVyCnR5cGUgTXlTdHIyPCdhPiA9ICYnYSBzdHI7IC8vIGNvcnJlY3QKYGBgCgpMaWZldGltZSBlbGlzaW9uIGlzIGEgc3BlY2lhbCwgbGltaXRlZCBraW5kIG9mIGluZmVyZW5jZSBmb3IgbGlmZXRpbWVzIGluCmZ1bmN0aW9uIHNpZ25hdHVyZXMgd2hpY2ggYWxsb3dzIHlvdSB0byBsZWF2ZSBvdXQgbGlmZXRpbWVzIGluIGNlcnRhaW4gY2FzZXMuCkZvciBtb3JlIGJhY2tncm91bmQgb24gbGlmZXRpbWUgZWxpc2lvbiBzZWUgW3RoZSBib29rXVtib29rLWxlXS4KClRoZSBsaWZldGltZSBlbGlzaW9uIHJ1bGVzIHJlcXVpcmUgdGhhdCBhbnkgZnVuY3Rpb24gc2lnbmF0dXJlIHdpdGggYW4gZWxpZGVkCm91dHB1dCBsaWZldGltZSBtdXN0IGVpdGhlciBoYXZlOgoKIC0gZXhhY3RseSBvbmUgaW5wdXQgbGlmZXRpbWUKIC0gb3IsIG11bHRpcGxlIGlucHV0IGxpZmV0aW1lcywgYnV0IHRoZSBmdW5jdGlvbiBtdXN0IGFsc28gYmUgYSBtZXRob2Qgd2l0aCBhCiAgIGAmc2VsZmAgb3IgYCZtdXQgc2VsZmAgcmVjZWl2ZXIKCkluIHRoZSBmaXJzdCBjYXNlLCB0aGUgb3V0cHV0IGxpZmV0aW1lIGlzIGluZmVycmVkIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSB1bmlxdWUKaW5wdXQgbGlmZXRpbWUuIEluIHRoZSBzZWNvbmQgY2FzZSwgdGhlIGxpZmV0aW1lIGlzIGluc3RlYWQgaW5mZXJyZWQgdG8gYmUgdGhlCnNhbWUgYXMgdGhlIGxpZmV0aW1lIG9uIGAmc2VsZmAgb3IgYCZtdXQgc2VsZmAuCgpIZXJlIGFyZSBzb21lIGV4YW1wbGVzIG9mIGVsaXNpb24gZXJyb3JzOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA2Ci8vIGVycm9yLCBubyBpbnB1dCBsaWZldGltZXMKZm4gZm9vKCkgLT4gJnN0ciB7IH0KCi8vIGVycm9yLCBgeGAgYW5kIGB5YCBoYXZlIGRpc3RpbmN0IGxpZmV0aW1lcyBpbmZlcnJlZApmbiBiYXIoeDogJnN0ciwgeTogJnN0cikgLT4gJnN0ciB7IH0KCi8vIGVycm9yLCBgeWAncyBsaWZldGltZSBpcyBpbmZlcnJlZCB0byBiZSBkaXN0aW5jdCBmcm9tIGB4YCdzCmZuIGJhejwnYT4oeDogJidhIHN0ciwgeTogJnN0cikgLT4gJnN0ciB7IH0KYGBgCgpbYm9vay1sZV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDEwLTAzLWxpZmV0aW1lLXN5bnRheC5odG1sI2xpZmV0aW1lLWVsaXNpb24KAB3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8DkA6QDgABAJAOAJQbJngAAOQBAAAA5QEAAL0CDgYAAOMBAgUBBFNvbWUBAQCfDgAB5AEAAL0CDgYAAuMBAAEAqAIkBgAA4gEBAQCfDgACAKkCEncAnw4FAQVFMDEwNgABHwUFAAEABQCoAiQGAADiAQEBAaQOAAHjAQAAwxsmegAA6QEAAAIAwxsmegCfDgUBrgpBbiBpbmNvcnJlY3QgbnVtYmVyIG9mIGdlbmVyaWMgYXJndW1lbnRzIHdlcmUgcHJvdmlkZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CnN0cnVjdCBGb288VD4geyB4OiBUIH0KCnN0cnVjdCBCYXIgeyB4OiBGb28gfSAgICAgICAgICAgICAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDEsIGZvdW5kIDAKc3RydWN0IEJhejxTLCBUPiB7IHg6IEZvbzxTLCBUPiB9IC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZXhwZWN0ZWQgMSwgZm91bmQgMgoKZm4gZm9vPFQsIFU+KHg6IFQsIHk6IFUpIHt9CmZuIGYoKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4OiBib29sID0gdHJ1ZTsKICAgIGZvbzo6PGJvb2w+KHgpOyAgICAgICAgICAgICAgICAgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDIsIGZvdW5kIDEKICAgIGZvbzo6PGJvb2wsIGkzMiwgaTMyPih4LCAyLCA0KTsgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDIsIGZvdW5kIDMKICAgIGY6Ojwnc3RhdGljPigpOyAgICAgICAgICAgICAgICAgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiBsaWZldGltZSBhcmd1bWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDAsIGZvdW5kIDEKfQpgYGAKCldoZW4gdXNpbmcvZGVjbGFyaW5nIGFuIGl0ZW0gd2l0aCBnZW5lcmljIGFyZ3VtZW50cywgeW91IG11c3QgcHJvdmlkZSB0aGUgZXhhY3QKc2FtZSBudW1iZXI6CgpgYGAKc3RydWN0IEZvbzxUPiB7IHg6IFQgfQoKc3RydWN0IEJhcjxUPiB7IHg6IEZvbzxUPiB9ICAgICAgICAgICAgICAgLy8gb2shCnN0cnVjdCBCYXo8UywgVD4geyB4OiBGb288Uz4sIHk6IEZvbzxUPiB9IC8vIG9rIQoKZm4gZm9vPFQsIFU+KHg6IFQsIHk6IFUpIHt9CmZuIGYoKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4OiBib29sID0gdHJ1ZTsKICAgIGZvbzo6PGJvb2wsIHUzMj4oeCwgMTIpOyAgICAgICAgICAgICAgLy8gb2shCiAgICBmKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9rIQp9CmBgYAoAFf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////D64KrgoAAQCuCgDDGyZ6AADoAQAAAOkBAAC9Ag4GAADnAQIFAQRTb21lAQEAnw4AAegBAAC9Ag4GAALnAQABAKgCJAYAAOYBAQEAnw4AAgCpAhJ5AJ8OBQEFRTAxMDcAAR8FBQABAAUAqAIkBgAA5gEBAQGkDgAB5wEAAPIbJnwAAO0BAAACAPIbJnwAnw4FAYQFWW91IHRyaWVkIHRvIHByb3ZpZGUgYSBnZW5lcmljIGFyZ3VtZW50IHRvIGEgdHlwZSB3aGljaCBkb2Vzbid0IG5lZWQgaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA5CnR5cGUgWCA9IHUzMjxpMzI+OyAvLyBlcnJvcjogdHlwZSBhcmd1bWVudHMgYXJlIG5vdCBhbGxvd2VkIGZvciB0aGlzIHR5cGUKdHlwZSBZID0gYm9vbDwnc3RhdGljPjsgLy8gZXJyb3I6IGxpZmV0aW1lIHBhcmFtZXRlcnMgYXJlIG5vdCBhbGxvd2VkIG9uCiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGlzIHR5cGUKYGBgCgpDaGVjayB0aGF0IHlvdSB1c2VkIHRoZSBjb3JyZWN0IGFyZ3VtZW50IGFuZCB0aGF0IHRoZSBkZWZpbml0aW9uIGlzIGNvcnJlY3QuCgpFeGFtcGxlOgoKYGBgCnR5cGUgWCA9IHUzMjsgLy8gb2shCnR5cGUgWSA9IGJvb2w7IC8vIG9rIQpgYGAKCk5vdGUgdGhhdCBnZW5lcmljIGFyZ3VtZW50cyBmb3IgZW51bSB2YXJpYW50IGNvbnN0cnVjdG9ycyBnbyBhZnRlciB0aGUgdmFyaWFudCwKbm90IGFmdGVyIHRoZSBlbnVtLiBGb3IgZXhhbXBsZSwgeW91IHdvdWxkIHdyaXRlIGBPcHRpb246Ok5vbmU6Ojx1MzI+YCwKcmF0aGVyIHRoYW4gYE9wdGlvbjo6PHUzMj46Ok5vbmVgLgoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEPhAWEBQABAIQFAPIbJnwAAOwBAAAA7QEAAL0CDgYAAOsBAgUBBFNvbWUBAQCfDgAB7AEAAL0CDgYAAusBAAEAqAIkBgAA6gEBAQCfDgACAKkCEnsAnw4FAQVFMDEwOQABHwUFAAEABQCoAiQGAADqAQEBAaQOAAHrAQAAoRwmfgAA8QEAAAIAoRwmfgCfDgUBoQEjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpZb3UgdHJpZWQgdG8gcHJvdmlkZSBhIGxpZmV0aW1lIHRvIGEgdHlwZSB3aGljaCBkb2Vzbid0IG5lZWQgaXQuClNlZSBgRTAxMDlgIGZvciBtb3JlIGRldGFpbHMuCgAD////////////Af///////////wH/////H6EBoQEAAQChAQChHCZ+AADwAQAAAPEBAAC9Ag4GAADvAQIFAQRTb21lAQEAnw4AAfABAAC9Ag4GAALvAQABAKgCJAYAAO4BAQEAnw4AAgCpAhJ9AJ8OBQEFRTAxMTAAAR8FBQABAAUAqAIkBgAA7gEBAQGkDgAB7wEAANAcJoABAAD1AQAAAgDQHCaAAQCfDgUBtwZBbiBpbmhlcmVudCBpbXBsZW1lbnRhdGlvbiB3YXMgZGVmaW5lZCBmb3IgYSB0eXBlIG91dHNpZGUgdGhlIGN1cnJlbnQgY3JhdGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTE2CmltcGwgVmVjPHU4PiB7IH0gLy8gZXJyb3IKYGBgCgpZb3UgY2FuIG9ubHkgZGVmaW5lIGFuIGluaGVyZW50IGltcGxlbWVudGF0aW9uIGZvciBhIHR5cGUgaW4gdGhlIHNhbWUgY3JhdGUKd2hlcmUgdGhlIHR5cGUgd2FzIGRlZmluZWQuIEZvciBleGFtcGxlLCBhbiBgaW1wbGAgYmxvY2sgYXMgYWJvdmUgaXMgbm90IGFsbG93ZWQKc2luY2UgYFZlY2AgaXMgZGVmaW5lZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeS4KClRvIGZpeCB0aGlzIHByb2JsZW0sIHlvdSBjYW4gZG8gZWl0aGVyIG9mIHRoZXNlIHRoaW5nczoKCiAtIGRlZmluZSBhIHRyYWl0IHRoYXQgaGFzIHRoZSBkZXNpcmVkIGFzc29jaWF0ZWQgZnVuY3Rpb25zL3R5cGVzL2NvbnN0YW50cyBhbmQKICAgaW1wbGVtZW50IHRoZSB0cmFpdCBmb3IgdGhlIHR5cGUgaW4gcXVlc3Rpb24KIC0gZGVmaW5lIGEgbmV3IHR5cGUgd3JhcHBpbmcgdGhlIHR5cGUgYW5kIGRlZmluZSBhbiBpbXBsZW1lbnRhdGlvbiBvbiB0aGUgbmV3CiAgIHR5cGUKCk5vdGUgdGhhdCB1c2luZyB0aGUgYHR5cGVgIGtleXdvcmQgZG9lcyBub3Qgd29yayBoZXJlIGJlY2F1c2UgYHR5cGVgIG9ubHkKaW50cm9kdWNlcyBhIHR5cGUgYWxpYXM6CgpgYGBjb21waWxlX2ZhaWwsRTAxMTYKdHlwZSBCeXRlcyA9IFZlYzx1OD47CgppbXBsIEJ5dGVzIHsgfSAvLyBlcnJvciwgc2FtZSBhcyBhYm92ZQpgYGAKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////P7cGtwYAAQC3BgDQHCaAAQAA9AEAAAD1AQAAvQIOBgAA8wECBQEEU29tZQEBAJ8OAAH0AQAAvQIOBgAC8wEAAQCoAiQGAADyAQEBAJ8OAAIAqQISfwCfDgUBBUUwMTE2AAEfBQUAAQAFAKgCJAYAAPIBAQEBpA4AAfMBAAD/HCaCAQAA+QEAAAIA/xwmggEAnw4FAfkJT25seSB0cmFpdHMgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBjcmF0ZSBjYW4gYmUgaW1wbGVtZW50ZWQgZm9yIGFyYml0cmFyeSB0eXBlcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMTcKaW1wbCBEcm9wIGZvciB1MzIge30KYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyBhIHZpb2xhdGlvbiBvZiBvbmUgb2YgUnVzdCdzIG9ycGhhbiBydWxlcyBmb3IgdHJhaXQKaW1wbGVtZW50YXRpb25zLiBUaGUgcnVsZSBwcm9oaWJpdHMgYW55IGltcGxlbWVudGF0aW9uIG9mIGEgZm9yZWlnbiB0cmFpdCAoYQp0cmFpdCBkZWZpbmVkIGluIGFub3RoZXIgY3JhdGUpIHdoZXJlCgogLSB0aGUgdHlwZSB0aGF0IGlzIGltcGxlbWVudGluZyB0aGUgdHJhaXQgaXMgZm9yZWlnbgogLSBhbGwgb2YgdGhlIHBhcmFtZXRlcnMgYmVpbmcgcGFzc2VkIHRvIHRoZSB0cmFpdCAoaWYgdGhlcmUgYXJlIGFueSkgYXJlIGFsc28KICAgZm9yZWlnbi4KClRvIGF2b2lkIHRoaXMga2luZCBvZiBlcnJvciwgZW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGxvY2FsIHR5cGUgaXMgcmVmZXJlbmNlZApieSB0aGUgYGltcGxgOgoKYGBgCnB1YiBzdHJ1Y3QgRm9vOyAvLyB5b3UgZGVmaW5lIHlvdXIgdHlwZSBpbiB5b3VyIGNyYXRlCgppbXBsIERyb3AgZm9yIEZvbyB7IC8vIGFuZCB5b3UgY2FuIGltcGxlbWVudCB0aGUgdHJhaXQgb24gaXQhCiAgICAvLyBjb2RlIG9mIHRyYWl0IGltcGxlbWVudGF0aW9uIGhlcmUKIyAgIGZuIGRyb3AoJm11dCBzZWxmKSB7IH0KfQoKaW1wbCBGcm9tPEZvbz4gZm9yIGkzMiB7IC8vIG9yIHlvdSB1c2UgYSB0eXBlIGZyb20geW91ciBjcmF0ZSBhcwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSB0eXBlIHBhcmFtZXRlcgogICAgZm4gZnJvbShpOiBGb28pIC0+IGkzMiB7CiAgICAgICAgMAogICAgfQp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgZGVmaW5lIGEgdHJhaXQgbG9jYWxseSBhbmQgaW1wbGVtZW50IHRoYXQgaW5zdGVhZDoKCmBgYAp0cmFpdCBCYXIgewogICAgZm4gZ2V0KCZzZWxmKSAtPiB1c2l6ZTsKfQoKaW1wbCBCYXIgZm9yIHUzMiB7CiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplIHsgMCB9Cn0KYGBgCgpGb3IgaW5mb3JtYXRpb24gb24gdGhlIGRlc2lnbiBvZiB0aGUgb3JwaGFuIHJ1bGVzLCBzZWUgW1JGQyAxMDIzXS4KCltSRkMgMTAyM106IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzEwMjMtcmViYWxhbmNpbmctY29oZXJlbmNlLm1kCgAU////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////AfkJ+QkAAQD5CQD/HCaCAQAA+AEAAAD5AQAAvQIOBgAA9wECBQEEU29tZQEBAJ8OAAH4AQAAvQIOBgAC9wEAAQCoAiQGAAD2AQEBAJ8OAAIAqQISgQEAnw4FAQVFMDExNwABHwUFAAEABQCoAiQGAAD2AQEBAaQOAAH3AQAArh0mhAEAAP0BAAACAK4dJoQBAJ8OBQGcB0FuIGluaGVyZW50IGltcGxlbWVudGF0aW9uIHdhcyBkZWZpbmVkIGZvciBzb21ldGhpbmcgd2hpY2ggaXNuJ3QgYSBzdHJ1Y3Qgbm9yCmFuIGVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTE4CmltcGwgKHU4LCB1OCkgeyAvLyBlcnJvcjogbm8gYmFzZSB0eXBlIGZvdW5kIGZvciBpbmhlcmVudCBpbXBsZW1lbnRhdGlvbgogICAgZm4gZ2V0X3N0YXRlKCZzZWxmKSAtPiBTdHJpbmcgewogICAgICAgIC8vIC4uLgogICAgfQp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHBsZWFzZSBpbXBsZW1lbnQgYSB0cmFpdCBvbiB0aGUgdHlwZSBvciB3cmFwIGl0IGluIGEgc3RydWN0LgpFeGFtcGxlOgoKYGBgCi8vIHdlIGNyZWF0ZSBhIHRyYWl0IGhlcmUKdHJhaXQgTGl2ZUxvbmdBbmRQcm9zcGVyIHsKICAgIGZuIGdldF9zdGF0ZSgmc2VsZikgLT4gU3RyaW5nOwp9CgovLyBhbmQgbm93IHlvdSBjYW4gaW1wbGVtZW50IGl0IG9uICh1OCwgdTgpCmltcGwgTGl2ZUxvbmdBbmRQcm9zcGVyIGZvciAodTgsIHU4KSB7CiAgICBmbiBnZXRfc3RhdGUoJnNlbGYpIC0+IFN0cmluZyB7CiAgICAgICAgIkhlJ3MgZGVhZCwgSmltISIudG9fb3duZWQoKQogICAgfQp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBjcmVhdGUgYSBuZXd0eXBlLiBBIG5ld3R5cGUgaXMgYSB3cmFwcGluZyB0dXBsZS1zdHJ1Y3QuCkZvciBleGFtcGxlLCBgTmV3VHlwZWAgaXMgYSBuZXd0eXBlIG92ZXIgYEZvb2AgaW4gYHN0cnVjdCBOZXdUeXBlKEZvbylgLgpFeGFtcGxlOgoKYGBgCnN0cnVjdCBUeXBlV3JhcHBlcigodTgsIHU4KSk7CgppbXBsIFR5cGVXcmFwcGVyIHsKICAgIGZuIGdldF9zdGF0ZSgmc2VsZikgLT4gU3RyaW5nIHsKICAgICAgICAiRmFzY2luYXRpbmchIi50b19vd25lZCgpCiAgICB9Cn0KYGBgCgAP////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///9/nAecBwABAJwHAK4dJoQBAAD8AQAAAP0BAAC9Ag4GAAD7AQIFAQRTb21lAQEAnw4AAfwBAAC9Ag4GAAL7AQABAKgCJAYAAPoBAQEAnw4AAgCpAhKDAQCfDgUBBUUwMTE4AAEfBQUAAQAFAKgCJAYAAPoBAQEBpA4AAfsBAADdHSaGAQAAgQIAAAIA3R0mhgEAnw4FAZIJVGhlcmUgYXJlIGNvbmZsaWN0aW5nIHRyYWl0IGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIHNhbWUgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMTkKdHJhaXQgTXlUcmFpdCB7CiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplOwp9CgppbXBsPFQ+IE15VHJhaXQgZm9yIFQgewogICAgZm4gZ2V0KCZzZWxmKSAtPiB1c2l6ZSB7IDAgfQp9CgpzdHJ1Y3QgRm9vIHsKICAgIHZhbHVlOiB1c2l6ZQp9CgppbXBsIE15VHJhaXQgZm9yIEZvbyB7IC8vIGVycm9yOiBjb25mbGljdGluZyBpbXBsZW1lbnRhdGlvbnMgb2YgdHJhaXQKICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYE15VHJhaXRgIGZvciB0eXBlIGBGb29gCiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplIHsgc2VsZi52YWx1ZSB9Cn0KYGBgCgpXaGVuIGxvb2tpbmcgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHRyYWl0LCB0aGUgY29tcGlsZXIgZmluZHMKYm90aCB0aGUgYGltcGw8VD4gTXlUcmFpdCBmb3IgVGAgd2hlcmUgVCBpcyBhbGwgdHlwZXMgYW5kIHRoZSBgaW1wbApNeVRyYWl0IGZvciBGb29gLiBTaW5jZSBhIHRyYWl0IGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBtdWx0aXBsZSB0aW1lcywKdGhpcyBpcyBhbiBlcnJvci4gU28sIHdoZW4geW91IHdyaXRlOgoKYGBgCnRyYWl0IE15VHJhaXQgewogICAgZm4gZ2V0KCZzZWxmKSAtPiB1c2l6ZTsKfQoKaW1wbDxUPiBNeVRyYWl0IGZvciBUIHsKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemUgeyAwIH0KfQpgYGAKClRoaXMgbWFrZXMgdGhlIHRyYWl0IGltcGxlbWVudGVkIG9uIGFsbCB0eXBlcyBpbiB0aGUgc2NvcGUuIFNvIGlmIHlvdQp0cnkgdG8gaW1wbGVtZW50IGl0IG9uIGFub3RoZXIgb25lIGFmdGVyIHRoYXQsIHRoZSBpbXBsZW1lbnRhdGlvbnMgd2lsbApjb25mbGljdC4gRXhhbXBsZToKCmBgYAp0cmFpdCBNeVRyYWl0IHsKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemU7Cn0KCmltcGw8VD4gTXlUcmFpdCBmb3IgVCB7CiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplIHsgMCB9Cn0KCnN0cnVjdCBGb287CgpmbiBtYWluKCkgewogICAgbGV0IGYgPSBGb287CgogICAgZi5nZXQoKTsgLy8gdGhlIHRyYWl0IGlzIGltcGxlbWVudGVkIHNvIHdlIGNhbiB1c2UgaXQKfQpgYGAKABP///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//w+SCZIJAAEAkgkA3R0mhgEAAIACAAAAgQIAAL0CDgYAAP8BAgUBBFNvbWUBAQCfDgABgAIAAL0CDgYAAv8BAAEAqAIkBgAA/gEBAQCfDgACAKkCEoUBAJ8OBQEFRTAxMTkAAR8FBQABAAUAqAIkBgAA/gEBAQGkDgAB/wEAAIweJogBAACFAgAAAgCMHiaIAQCfDgUBvQVEcm9wIHdhcyBpbXBsZW1lbnRlZCBvbiBhIHRyYWl0LCB3aGljaCBpcyBub3QgYWxsb3dlZDogb25seSBzdHJ1Y3RzIGFuZAplbnVtcyBjYW4gaW1wbGVtZW50IERyb3AuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTIwCnRyYWl0IE15VHJhaXQge30KCmltcGwgRHJvcCBmb3IgTXlUcmFpdCB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQpgYGAKCkEgd29ya2Fyb3VuZCBmb3IgdGhpcyBwcm9ibGVtIGlzIHRvIHdyYXAgdGhlIHRyYWl0IHVwIGluIGEgc3RydWN0LCBhbmQgaW1wbGVtZW50CkRyb3Agb24gdGhhdDoKCmBgYAp0cmFpdCBNeVRyYWl0IHt9CnN0cnVjdCBNeVdyYXBwZXI8VDogTXlUcmFpdD4geyBmb286IFQgfQoKaW1wbCA8VDogTXlUcmFpdD4gRHJvcCBmb3IgTXlXcmFwcGVyPFQ+IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CgpgYGAKCkFsdGVybmF0aXZlbHksIHdyYXBwaW5nIHRyYWl0IG9iamVjdHMgcmVxdWlyZXMgc29tZXRoaW5nOgoKYGBgCnRyYWl0IE15VHJhaXQge30KCi8vb3IgQm94PE15VHJhaXQ+LCBpZiB5b3Ugd2FudGVkIGFuIG93bmVkIHRyYWl0IG9iamVjdApzdHJ1Y3QgTXlXcmFwcGVyPCdhPiB7IGZvbzogJidhIE15VHJhaXQgfQoKaW1wbCA8J2E+IERyb3AgZm9yIE15V3JhcHBlcjwnYT4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////H70FvQUAAQC9BQCMHiaIAQAAhAIAAACFAgAAvQIOBgAAgwICBQEEU29tZQEBAJ8OAAGEAgAAvQIOBgACgwIAAQCoAiQGAACCAgEBAJ8OAAIAqQIShwEAnw4FAQVFMDEyMAABHwUFAAEABQCoAiQGAACCAgEBAaQOAAGDAgAAux4migEAAIkCAAACALseJooBAJ8OBQHzA1RoZSB0eXBlIHBsYWNlaG9sZGVyIGBfYCB3YXMgdXNlZCB3aXRoaW4gYSB0eXBlIG9uIGFuIGl0ZW0ncyBzaWduYXR1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTIxCmZuIGZvbygpIC0+IF8geyA1IH0gLy8gZXJyb3IKCnN0YXRpYyBCQVI6IF8gPSAidGVzdCI7IC8vIGVycm9yCmBgYAoKSW4gdGhvc2UgY2FzZXMsIHlvdSBuZWVkIHRvIHByb3ZpZGUgdGhlIHR5cGUgZXhwbGljaXRseToKCmBgYApmbiBmb28oKSAtPiBpMzIgeyA1IH0gLy8gb2shCgpzdGF0aWMgQkFSOiAmc3RyID0gInRlc3QiOyAvLyBvayEKYGBgCgpUaGUgdHlwZSBwbGFjZWhvbGRlciBgX2AgY2FuIGJlIHVzZWQgb3V0c2lkZSBpdGVtJ3Mgc2lnbmF0dXJlIGFzIGZvbGxvd3M6CgpgYGAKbGV0IHggPSAiYTRhIi5zcGxpdCgnNCcpCiAgICAuY29sbGVjdDo6PFZlYzxfPj4oKTsgLy8gTm8gbmVlZCB0byBwcmVjaXNlIHRoZSBWZWMncyBnZW5lcmljIHR5cGUuCmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////A/MD8wMAAQDzAwC7HiaKAQAAiAIAAACJAgAAvQIOBgAAhwICBQEEU29tZQEBAJ8OAAGIAgAAvQIOBgAChwIAAQCoAiQGAACGAgEBAJ8OAAIAqQISiQEAnw4FAQVFMDEyMQABHwUFAAEABQCoAiQGAACGAgEBAaQOAAGHAgAA6h4mjAEAAI0CAAACAOoeJowBAJ8OBQHQAkEgc3RydWN0IHdhcyBkZWNsYXJlZCB3aXRoIHR3byBmaWVsZHMgaGF2aW5nIHRoZSBzYW1lIG5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTI0CnN0cnVjdCBGb28gewogICAgZmllbGQxOiBpMzIsCiAgICBmaWVsZDE6IGkzMiwgLy8gZXJyb3I6IGZpZWxkIGlzIGFscmVhZHkgZGVjbGFyZWQKfQpgYGAKClBsZWFzZSB2ZXJpZnkgdGhhdCB0aGUgZmllbGQgbmFtZXMgaGF2ZSBiZWVuIGNvcnJlY3RseSBzcGVsbGVkLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBGb28gewogICAgZmllbGQxOiBpMzIsCiAgICBmaWVsZDI6IGkzMiwgLy8gb2shCn0KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH//wPQAtACAAEA0AIA6h4mjAEAAIwCAAAAjQIAAL0CDgYAAIsCAgUBBFNvbWUBAQCfDgABjAIAAL0CDgYAAosCAAEAqAIkBgAAigIBAQCfDgACAKkCEosBAJ8OBQEFRTAxMjQAAR8FBQABAAUAqAIkBgAAigIBAQGkDgABiwIAAJkfJo4BAACRAgAAAgCZHyaOAQCfDgUB1wRBIHR5cGUgcGFyYW1ldGVyIHdpdGggZGVmYXVsdCB2YWx1ZSBpcyB1c2luZyBmb3J3YXJkIGRlY2xhcmVkIGlkZW50aWZpZXIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTI4CnN0cnVjdCBGb288VCA9IFUsIFUgPSAoKT4gewogICAgZmllbGQxOiBULAogICAgZmllbGQyOiBVLAp9Ci8vIGVycm9yOiB0eXBlIHBhcmFtZXRlcnMgd2l0aCBhIGRlZmF1bHQgY2Fubm90IHVzZSBmb3J3YXJkIGRlY2xhcmVkCi8vICAgICAgICBpZGVudGlmaWVycwpgYGAKClR5cGUgcGFyYW1ldGVyIGRlZmF1bHRzIGNhbiBvbmx5IHVzZSBwYXJhbWV0ZXJzIHRoYXQgb2NjdXIgYmVmb3JlIHRoZW0uIFNpbmNlCnR5cGUgcGFyYW1ldGVycyBhcmUgZXZhbHVhdGVkIGluLW9yZGVyLCB0aGlzIGlzc3VlIGNvdWxkIGJlIGZpeGVkIGJ5IGRvaW5nOgoKYGBgCnN0cnVjdCBGb288VSA9ICgpLCBUID0gVT4gewogICAgZmllbGQxOiBULAogICAgZmllbGQyOiBVLAp9CmBgYAoKUGxlYXNlIGFsc28gdmVyaWZ5IHRoYXQgdGhpcyB3YXNuJ3QgYmVjYXVzZSBvZiBhIG5hbWUtY2xhc2ggYW5kIHJlbmFtZSB0aGUgdHlwZQpwYXJhbWV0ZXIgaWYgc28uCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////A9cE1wQAAQDXBACZHyaOAQAAkAIAAACRAgAAvQIOBgAAjwICBQEEU29tZQEBAJ8OAAGQAgAAvQIOBgACjwIAAQCoAiQGAACOAgEBAJ8OAAIAqQISjQEAnw4FAQVFMDEyOAABHwUFAAEABQCoAiQGAACOAgEBAaQOAAGPAgAAyB8mkAEAAJUCAAACAMgfJpABAJ8OBQGDBEEgcGF0dGVybiB3YXMgZGVjbGFyZWQgYXMgYW4gYXJndW1lbnQgaW4gYSBmb3JlaWduIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEzMApleHRlcm4gewogICAgZm4gZm9vKChhLCBiKTogKHUzMiwgdTMyKSk7IC8vIGVycm9yOiBwYXR0ZXJucyBhcmVuJ3QgYWxsb3dlZCBpbiBmb3JlaWduCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucwp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHJlcGxhY2UgdGhlIHBhdHRlcm4gYXJndW1lbnQgd2l0aCBhIHJlZ3VsYXIgb25lLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBTb21lU3RydWN0IHsKICAgIGE6IHUzMiwKICAgIGI6IHUzMiwKfQoKZXh0ZXJuIHsKICAgIGZuIGZvbyhzOiBTb21lU3RydWN0KTsgLy8gb2shCn0KYGBgCgpPcjoKCmBgYApleHRlcm4gewogICAgZm4gZm9vKGE6ICh1MzIsIHUzMikpOyAvLyBvayEKfQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQeDBIMEAAEAgwQAyB8mkAEAAJQCAAAAlQIAAL0CDgYAAJMCAgUBBFNvbWUBAQCfDgABlAIAAL0CDgYAApMCAAEAqAIkBgAAkgIBAQCfDgACAKkCEo8BAJ8OBQEFRTAxMzAAAR8FBQABAAUAqAIkBgAAkgIBAQGkDgABkwIAAPcfJpIBAACZAgAAAgD3HyaSAQCfDgUBqwJUaGUgYG1haW5gIGZ1bmN0aW9uIHdhcyBkZWZpbmVkIHdpdGggZ2VuZXJpYyBwYXJhbWV0ZXJzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEzMQpmbiBtYWluPFQ+KCkgeyAvLyBlcnJvcjogbWFpbiBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byBoYXZlIGdlbmVyaWMgcGFyYW1ldGVycwp9CmBgYAoKSXQgaXMgbm90IHBvc3NpYmxlIHRvIGRlZmluZSB0aGUgYG1haW5gIGZ1bmN0aW9uIHdpdGggZ2VuZXJpYyBwYXJhbWV0ZXJzLgpJdCBtdXN0IG5vdCB0YWtlIGFueSBhcmd1bWVudHMuCgAF////////////Af///////////wH///////////8B////////////Af///////wGrAqsCAAEAqwIA9x8mkgEAAJgCAAAAmQIAAL0CDgYAAJcCAgUBBFNvbWUBAQCfDgABmAIAAL0CDgYAApcCAAEAqAIkBgAAlgIBAQCfDgACAKkCEpEBAJ8OBQEFRTAxMzEAAR8FBQABAAUAqAIkBgAAlgIBAQGkDgABlwIAAKYgJpQBAACdAgAAAgCmICaUAQCfDgUBkQVBIGZ1bmN0aW9uIHdpdGggdGhlIGBzdGFydGAgYXR0cmlidXRlIHdhcyBkZWNsYXJlZCB3aXRoIHR5cGUgcGFyYW1ldGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMzIKIyFbZmVhdHVyZShzdGFydCldCgojW3N0YXJ0XQpmbiBmPFQ+KCkge30KYGBgCgpJdCBpcyBub3QgcG9zc2libGUgdG8gZGVjbGFyZSB0eXBlIHBhcmFtZXRlcnMgb24gYSBmdW5jdGlvbiB0aGF0IGhhcyB0aGUgYHN0YXJ0YAphdHRyaWJ1dGUuIFN1Y2ggYSBmdW5jdGlvbiBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyB0eXBlIHNpZ25hdHVyZSAoZm9yIG1vcmUKaW5mb3JtYXRpb24sIHZpZXcgW3RoZSB1bnN0YWJsZSBib29rXVsxXSk6CgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvdW5zdGFibGUtYm9vay9sYW5ndWFnZS1mZWF0dXJlcy9sYW5nLWl0ZW1zLmh0bWwjd3JpdGluZy1hbi1leGVjdXRhYmxlLXdpdGhvdXQtc3RkbGliCgpgYGAKIyBsZXQgXzoKZm4oaXNpemUsICpjb25zdCAqY29uc3QgdTgpIC0+IGlzaXplOwpgYGAKCkV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShzdGFydCldCgojW3N0YXJ0XQpmbiBteV9zdGFydChhcmdjOiBpc2l6ZSwgYXJndjogKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemUgewogICAgMAp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//weRBZEFAAEAkQUApiAmlAEAAJwCAAAAnQIAAL0CDgYAAJsCAgUBBFNvbWUBAQCfDgABnAIAAL0CDgYAApsCAAEAqAIkBgAAmgIBAQCfDgACAKkCEpMBAJ8OBQEFRTAxMzIAAR8FBQABAAUAqAIkBgAAmgIBAQGkDgABmwIAANUgJpYBAAChAgAAAgDVICaWAQCfDgUBpgZVbnNhZmUgY29kZSB3YXMgdXNlZCBvdXRzaWRlIG9mIGFuIHVuc2FmZSBmdW5jdGlvbiBvciBibG9jay4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMzMKdW5zYWZlIGZuIGYoKSB7IHJldHVybjsgfSAvLyBUaGlzIGlzIHRoZSB1bnNhZmUgY29kZQoKZm4gbWFpbigpIHsKICAgIGYoKTsgLy8gZXJyb3I6IGNhbGwgdG8gdW5zYWZlIGZ1bmN0aW9uIHJlcXVpcmVzIHVuc2FmZSBmdW5jdGlvbiBvciBibG9jawp9CmBgYAoKVXNpbmcgdW5zYWZlIGZ1bmN0aW9uYWxpdHkgaXMgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGFuZCBkaXNhbGxvd2VkIGJ5IHNhZmV0eQpjaGVja3MuIEV4YW1wbGVzOgoKKiBEZXJlZmVyZW5jaW5nIHJhdyBwb2ludGVycwoqIENhbGxpbmcgZnVuY3Rpb25zIHZpYSBGRkkKKiBDYWxsaW5nIGZ1bmN0aW9ucyBtYXJrZWQgdW5zYWZlCgpUaGVzZSBzYWZldHkgY2hlY2tzIGNhbiBiZSByZWxheGVkIGZvciBhIHNlY3Rpb24gb2YgdGhlIGNvZGUgYnkgd3JhcHBpbmcgdGhlCnVuc2FmZSBpbnN0cnVjdGlvbnMgd2l0aCBhbiBgdW5zYWZlYCBibG9jay4gRm9yIGluc3RhbmNlOgoKYGBgCnVuc2FmZSBmbiBmKCkgeyByZXR1cm47IH0KCmZuIG1haW4oKSB7CiAgICB1bnNhZmUgeyBmKCk7IH0gLy8gb2shCn0KYGBgCgpTZWUgdGhlIFt1bnNhZmUgc2VjdGlvbl1bdW5zYWZlLXNlY3Rpb25dIG9mIHRoZSBCb29rIGZvciBtb3JlIGRldGFpbHMuCgpbdW5zYWZlLXNlY3Rpb25dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxOS0wMS11bnNhZmUtcnVzdC5odG1sCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8HpgamBgABAKYGANUgJpYBAACgAgAAAKECAAC9Ag4GAACfAgIFAQRTb21lAQEAnw4AAaACAAC9Ag4GAAKfAgABAKgCJAYAAJ4CAQEAnw4AAgCpAhKVAQCfDgUBBUUwMTMzAAEfBQUAAQAFAKgCJAYAAJ4CAQEBpA4AAZ8CAACEISaYAQAApQIAAAIAhCEmmAEAnw4FAdICTW9yZSB0aGFuIG9uZSBgbWFpbmAgZnVuY3Rpb24gd2FzIGZvdW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEzNgpmbiBtYWluKCkgewogICAgLy8gLi4uCn0KCi8vIC4uLgoKZm4gbWFpbigpIHsgLy8gZXJyb3IhCiAgICAvLyAuLi4KfQpgYGAKCkEgYmluYXJ5IGNhbiBvbmx5IGhhdmUgb25lIGVudHJ5IHBvaW50LCBhbmQgYnkgZGVmYXVsdCB0aGF0IGVudHJ5IHBvaW50IGlzIHRoZQpgbWFpbigpYCBmdW5jdGlvbi4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uLCBwbGVhc2UKcmVuYW1lIG9uZSBvZiB0aGVtLgoABv///////////wH///////////8B////////////Af///////////wH///////////8B//8P0gLSAgABANICAIQhJpgBAACkAgAAAKUCAAC9Ag4GAACjAgIFAQRTb21lAQEAnw4AAaQCAAC9Ag4GAAKjAgABAKgCJAYAAKICAQEAnw4AAgCpAhKXAQCfDgUBBUUwMTM2AAEfBQUAAQAFAKgCJAYAAKICAQEBpA4AAaMCAACzISaaAQAAqQIAAAIAsyEmmgEAnw4FAdYDTW9yZSB0aGFuIG9uZSBmdW5jdGlvbiB3YXMgZGVjbGFyZWQgd2l0aCB0aGUgYCNbbWFpbl1gIGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMzcKIyFbZmVhdHVyZShtYWluKV0KCiNbbWFpbl0KZm4gZm9vKCkge30KCiNbbWFpbl0KZm4gZigpIHt9IC8vIGVycm9yOiBtdWx0aXBsZSBmdW5jdGlvbnMgd2l0aCBhIGAjW21haW5dYCBhdHRyaWJ1dGUKYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBjb21waWxlciBmb3VuZCBtdWx0aXBsZSBmdW5jdGlvbnMgd2l0aCB0aGUKYCNbbWFpbl1gIGF0dHJpYnV0ZS4gVGhpcyBpcyBhbiBlcnJvciBiZWNhdXNlIHRoZXJlIG11c3QgYmUgYSB1bmlxdWUgZW50cnkKcG9pbnQgaW50byBhIFJ1c3QgcHJvZ3JhbS4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKG1haW4pXQoKI1ttYWluXQpmbiBmKCkge30gLy8gb2shCmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8B1gPWAwABANYDALMhJpoBAACoAgAAAKkCAAC9Ag4GAACnAgIFAQRTb21lAQEAnw4AAagCAAC9Ag4GAAKnAgABAKgCJAYAAKYCAQEAnw4AAgCpAhKZAQCfDgUBBUUwMTM3AAEfBQUAAQAFAKgCJAYAAKYCAQEBpA4AAacCAADiISacAQAArQIAAAIA4iEmnAEAnw4FAdMETW9yZSB0aGFuIG9uZSBmdW5jdGlvbiB3YXMgZGVjbGFyZWQgd2l0aCB0aGUgYCNbc3RhcnRdYCBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTM4CiMhW2ZlYXR1cmUoc3RhcnQpXQoKI1tzdGFydF0KZm4gZm9vKGFyZ2M6IGlzaXplLCBhcmd2OiAqY29uc3QgKmNvbnN0IHU4KSAtPiBpc2l6ZSB7fQoKI1tzdGFydF0KZm4gZihhcmdjOiBpc2l6ZSwgYXJndjogKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemUge30KLy8gZXJyb3I6IG11bHRpcGxlICdzdGFydCcgZnVuY3Rpb25zCmBgYAoKVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB0aGUgY29tcGlsZXIgZm91bmQgbXVsdGlwbGUgZnVuY3Rpb25zIHdpdGggdGhlCmAjW3N0YXJ0XWAgYXR0cmlidXRlLiBUaGlzIGlzIGFuIGVycm9yIGJlY2F1c2UgdGhlcmUgbXVzdCBiZSBhIHVuaXF1ZSBlbnRyeQpwb2ludCBpbnRvIGEgUnVzdCBwcm9ncmFtLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoc3RhcnQpXQoKI1tzdGFydF0KZm4gZm9vKGFyZ2M6IGlzaXplLCBhcmd2OiAqY29uc3QgKmNvbnN0IHU4KSAtPiBpc2l6ZSB7IDAgfSAvLyBvayEKYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8f0wTTBAABANMEAOIhJpwBAACsAgAAAK0CAAC9Ag4GAACrAgIFAQRTb21lAQEAnw4AAawCAAC9Ag4GAAKrAgABAKgCJAYAAKoCAQEAnw4AAgCpAhKbAQCfDgUBBUUwMTM4AAEfBQUAAQAFAKgCJAYAAKoCAQEBpA4AAasCAACRIiaeAQAAsQIAAAIAkSImngEAnw4FAeYUIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhlcmUgYXJlIHZhcmlvdXMgcmVzdHJpY3Rpb25zIG9uIHRyYW5zbXV0aW5nIGJldHdlZW4gdHlwZXMgaW4gUnVzdDsgZm9yIGV4YW1wbGUKdHlwZXMgYmVpbmcgdHJhbnNtdXRlZCBtdXN0IGhhdmUgdGhlIHNhbWUgc2l6ZS4gVG8gYXBwbHkgYWxsIHRoZXNlIHJlc3RyaWN0aW9ucywKdGhlIGNvbXBpbGVyIG11c3Qga25vdyB0aGUgZXhhY3QgdHlwZXMgdGhhdCBtYXkgYmUgdHJhbnNtdXRlZC4gV2hlbiB0eXBlCnBhcmFtZXRlcnMgYXJlIGludm9sdmVkLCB0aGlzIGNhbm5vdCBhbHdheXMgYmUgZG9uZS4KClNvLCBmb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBpcyBub3QgYWxsb3dlZDoKCmBgYAp1c2Ugc3RkOjptZW06OnRyYW5zbXV0ZTsKCnN0cnVjdCBGb288VD4oVmVjPFQ+KTsKCmZuIGZvbzxUPih4OiBWZWM8VD4pIHsKICAgIC8vIHdlIGFyZSB0cmFuc211dGluZyBiZXR3ZWVuIFZlYzxUPiBhbmQgRm9vPEY+IGhlcmUKICAgIGxldCB5OiBGb288VD4gPSB1bnNhZmUgeyB0cmFuc211dGUoeCkgfTsKICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHkKfQpgYGAKCkluIHRoaXMgc3BlY2lmaWMgY2FzZSB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgdGhhdCB0aGUgdHJhbnNtdXRlIGlzIGhhcm1sZXNzIChidXQKdGhpcyBpcyBub3QgZ3VhcmFudGVlZCBieSBSdXN0KS4gSG93ZXZlciwgd2hlbiBhbGlnbm1lbnQgYW5kIGVudW0gb3B0aW1pemF0aW9ucwpjb21lIGludG8gdGhlIHBpY3R1cmUsIGl0J3MgcXVpdGUgbGlrZWx5IHRoYXQgdGhlIHNpemVzIG1heSBvciBtYXkgbm90IG1hdGNoCndpdGggZGlmZmVyZW50IHR5cGUgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbnMuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIGNoZWNrIHRoaXMgZm9yCl9hbGxfIHBvc3NpYmxlIHR5cGVzLCBzbyBgdHJhbnNtdXRlKClgIHNpbXBseSBvbmx5IGFjY2VwdHMgdHlwZXMgd2l0aG91dCBhbnkKdW5zdWJzdGl0dXRlZCB0eXBlIHBhcmFtZXRlcnMuCgpJZiB5b3UgbmVlZCB0aGlzLCB0aGVyZSdzIGEgZ29vZCBjaGFuY2UgeW91J3JlIGRvaW5nIHNvbWV0aGluZyB3cm9uZy4gS2VlcCBpbgptaW5kIHRoYXQgUnVzdCBkb2Vzbid0IGd1YXJhbnRlZSBtdWNoIGFib3V0IHRoZSBsYXlvdXQgb2YgZGlmZmVyZW50IHN0cnVjdHMKKGV2ZW4gdHdvIHN0cnVjdHMgd2l0aCBpZGVudGljYWwgZGVjbGFyYXRpb25zIG1heSBoYXZlIGRpZmZlcmVudCBsYXlvdXRzKS4gSWYKdGhlcmUgaXMgYSBzb2x1dGlvbiB0aGF0IGF2b2lkcyB0aGUgdHJhbnNtdXRlIGVudGlyZWx5LCB0cnkgaXQgaW5zdGVhZC4KCklmIGl0J3MgcG9zc2libGUsIGhhbmQtbW9ub21vcnBoaXplIHRoZSBjb2RlIGJ5IHdyaXRpbmcgdGhlIGZ1bmN0aW9uIGZvciBlYWNoCnBvc3NpYmxlIHR5cGUgc3Vic3RpdHV0aW9uLiBJdCdzIHBvc3NpYmxlIHRvIHVzZSB0cmFpdHMgdG8gZG8gdGhpcyBjbGVhbmx5LApmb3IgZXhhbXBsZToKCmBgYAp1c2Ugc3RkOjptZW06OnRyYW5zbXV0ZTsKCnN0cnVjdCBGb288VD4oVmVjPFQ+KTsKCnRyYWl0IE15VHJhbnNtdXRhYmxlVHlwZTogU2l6ZWQgewogICAgZm4gdHJhbnNtdXRlKF86IFZlYzxTZWxmPikgLT4gRm9vPFNlbGY+Owp9CgppbXBsIE15VHJhbnNtdXRhYmxlVHlwZSBmb3IgdTggewogICAgZm4gdHJhbnNtdXRlKHg6IFZlYzx1OD4pIC0+IEZvbzx1OD4gewogICAgICAgIHVuc2FmZSB7IHRyYW5zbXV0ZSh4KSB9CiAgICB9Cn0KCmltcGwgTXlUcmFuc211dGFibGVUeXBlIGZvciBTdHJpbmcgewogICAgZm4gdHJhbnNtdXRlKHg6IFZlYzxTdHJpbmc+KSAtPiBGb288U3RyaW5nPiB7CiAgICAgICAgdW5zYWZlIHsgdHJhbnNtdXRlKHgpIH0KICAgIH0KfQoKLy8gLi4uIG1vcmUgaW1wbHMgZm9yIHRoZSB0eXBlcyB5b3UgaW50ZW5kIHRvIHRyYW5zbXV0ZQoKZm4gZm9vPFQ6IE15VHJhbnNtdXRhYmxlVHlwZT4oeDogVmVjPFQ+KSB7CiAgICBsZXQgeTogRm9vPFQ+ID0gPFQgYXMgTXlUcmFuc211dGFibGVUeXBlPjo6dHJhbnNtdXRlKHgpOwogICAgLy8gZG8gc29tZXRoaW5nIHdpdGggeQp9CmBgYAoKRWFjaCBpbXBsIHdpbGwgYmUgY2hlY2tlZCBmb3IgYSBzaXplIG1hdGNoIGluIHRoZSB0cmFuc211dGUgYXMgdXN1YWwsIGFuZCBzaW5jZQp0aGVyZSBhcmUgbm8gdW5ib3VuZCB0eXBlIHBhcmFtZXRlcnMgaW52b2x2ZWQsIHRoaXMgc2hvdWxkIGNvbXBpbGUgdW5sZXNzIHRoZXJlCmlzIGEgc2l6ZSBtaXNtYXRjaCBpbiBvbmUgb2YgdGhlIGltcGxzLgoKSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBtYW51YWxseSB0cmFuc211dGU6CgpgYGAKIyB1c2Ugc3RkOjpwdHI7CiMgbGV0IHYgPSBTb21lKCJ2YWx1ZSIpOwojIHR5cGUgU29tZVR5cGUgPSAmJ3N0YXRpYyBbdThdOwp1bnNhZmUgewogICAgcHRyOjpyZWFkKCZ2IGFzICpjb25zdCBfIGFzICpjb25zdCBTb21lVHlwZSkgLy8gYHZgIHRyYW5zbXV0ZWQgdG8gYFNvbWVUeXBlYAp9CiMgOwpgYGAKCk5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG1vdmUgYHZgICh1bmxpa2UgYHRyYW5zbXV0ZWApLCBhbmQgbWF5IG5lZWQgYQpjYWxsIHRvIGBtZW06OmZvcmdldCh2KWAgaW4gY2FzZSB5b3Ugd2FudCB0byBhdm9pZCBkZXN0cnVjdG9ycyBiZWluZyBjYWxsZWQuCgAq////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wfmFOYUAAEA5hQAkSImngEAALACAAAAsQIAAL0CDgYAAK8CAgUBBFNvbWUBAQCfDgABsAIAAL0CDgYAAq8CAAEAqAIkBgAArgIBAQCfDgACAKkCEp0BAJ8OBQEFRTAxMzkAAR8FBQABAAUAqAIkBgAArgIBAQGkDgABrwIAAMAiJqABAAC1AgAAAgDAIiagAQCfDgUBiQVBIGxhbmcgaXRlbSB3YXMgcmVkZWZpbmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE1MgojIVtmZWF0dXJlKGxhbmdfaXRlbXMpXQoKI1tsYW5nID0gIm93bmVkX2JveCJdCnN0cnVjdCBGb287IC8vIGVycm9yOiBkdXBsaWNhdGUgbGFuZyBpdGVtIGZvdW5kOiBgb3duZWRfYm94YApgYGAKCkxhbmcgaXRlbXMgYXJlIGFscmVhZHkgaW1wbGVtZW50ZWQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkuIFVubGVzcyB5b3UgYXJlCndyaXRpbmcgYSBmcmVlLXN0YW5kaW5nIGFwcGxpY2F0aW9uIChlLmcuLCBhIGtlcm5lbCksIHlvdSBkbyBub3QgbmVlZCB0byBwcm92aWRlCnRoZW0geW91cnNlbGYuCgpZb3UgY2FuIGJ1aWxkIGEgZnJlZS1zdGFuZGluZyBjcmF0ZSBieSBhZGRpbmcgYCMhW25vX3N0ZF1gIHRvIHRoZSBjcmF0ZQphdHRyaWJ1dGVzOgoKYGBgaWdub3JlIChvbmx5LWZvci1zeW50YXgtaGlnaGxpZ2h0KQojIVtub19zdGRdCmBgYAoKU2VlIGFsc28gdGhlIFt1bnN0YWJsZSBib29rXVsxXS4KClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy91bnN0YWJsZS1ib29rL2xhbmd1YWdlLWZlYXR1cmVzL2xhbmctaXRlbXMuaHRtbCN3cml0aW5nLWFuLWV4ZWN1dGFibGUtd2l0aG91dC1zdGRsaWIKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/wOJBYkFAAEAiQUAwCImoAEAALQCAAAAtQIAAL0CDgYAALMCAgUBBFNvbWUBAQCfDgABtAIAAL0CDgYAArMCAAEAqAIkBgAAsgIBAQCfDgACAKkCEp8BAJ8OBQEFRTAxNTIAAR8FBQABAAUAqAIkBgAAsgIBAQGkDgABswIAAO8iJqIBAAC5AgAAAgDvIiaiAQCfDgUBwwYjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpJbXBvcnRzIChgdXNlYCBzdGF0ZW1lbnRzKSBhcmUgbm90IGFsbG93ZWQgYWZ0ZXIgbm9uLWl0ZW0gc3RhdGVtZW50cywgc3VjaCBhcwp2YXJpYWJsZSBkZWNsYXJhdGlvbnMgYW5kIGV4cHJlc3Npb24gc3RhdGVtZW50cy4KCkhlcmUgaXMgYW4gZXhhbXBsZSB0aGF0IGRlbW9uc3RyYXRlcyB0aGUgZXJyb3I6CgpgYGAKZm4gZigpIHsKICAgIC8vIFZhcmlhYmxlIGRlY2xhcmF0aW9uIGJlZm9yZSBpbXBvcnQKICAgIGxldCB4ID0gMDsKICAgIHVzZSBzdGQ6OmlvOjpSZWFkOwogICAgLy8gLi4uCn0KYGBgCgpUaGUgc29sdXRpb24gaXMgdG8gZGVjbGFyZSB0aGUgaW1wb3J0cyBhdCB0aGUgdG9wIG9mIHRoZSBibG9jaywgZnVuY3Rpb24sIG9yCmZpbGUuCgpIZXJlIGlzIHRoZSBwcmV2aW91cyBleGFtcGxlIGFnYWluLCB3aXRoIHRoZSBjb3JyZWN0IG9yZGVyOgoKYGBgCmZuIGYoKSB7CiAgICB1c2Ugc3RkOjppbzo6UmVhZDsKICAgIGxldCB4ID0gMDsKICAgIC8vIC4uLgp9CmBgYAoKU2VlIHRoZSBbRGVjbGFyYXRpb24gU3RhdGVtZW50c11bZGVjbGFyYXRpb24tc3RhdGVtZW50c10gc2VjdGlvbiBvZiB0aGUKcmVmZXJlbmNlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgY29uc3RpdHV0ZXMgYW4gaXRlbSBkZWNsYXJhdGlvbgphbmQgd2hhdCBkb2VzIG5vdC4KCltkZWNsYXJhdGlvbi1zdGF0ZW1lbnRzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2Uvc3RhdGVtZW50cy5odG1sI2RlY2xhcmF0aW9uLXN0YXRlbWVudHMKAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BB8MGwwYAAQDDBgDvIiaiAQAAuAIAAAC5AgAAvQIOBgAAtwICBQEEU29tZQEBAJ8OAAG4AgAAvQIOBgACtwIAAQCoAiQGAAC2AgEBAJ8OAAIAqQISoQEAnw4FAQVFMDE1NAABHwUFAAEABQCoAiQGAAC2AgEBAaQOAAG3AgAAniMmpAEAAL0CAAACAJ4jJqQBAJ8OBQHIBkFuIGFzc29jaWF0ZWQgY29uc3QgaGFzIGJlZW4gcmVmZXJlbmNlZCBpbiBhIHBhdHRlcm4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTU4CmVudW0gRUZvbyB7IEEsIEIsIEMsIEQgfQoKdHJhaXQgRm9vIHsKICAgIGNvbnN0IFg6IEVGb287Cn0KCmZuIHRlc3Q8QTogRm9vPihhcmc6IEVGb28pIHsKICAgIG1hdGNoIGFyZyB7CiAgICAgICAgQTo6WCA9PiB7IC8vIGVycm9yIQogICAgICAgICAgICBwcmludGxuISgiQTo6WCIpOwogICAgICAgIH0KICAgIH0KfQpgYGAKCmBjb25zdGAgYW5kIGBzdGF0aWNgIG1lYW4gZGlmZmVyZW50IHRoaW5ncy4gQSBgY29uc3RgIGlzIGEgY29tcGlsZS10aW1lCmNvbnN0YW50LCBhbiBhbGlhcyBmb3IgYSBsaXRlcmFsIHZhbHVlLiBUaGlzIHByb3BlcnR5IG1lYW5zIHlvdSBjYW4gbWF0Y2ggaXQKZGlyZWN0bHkgd2l0aGluIGEgcGF0dGVybi4KClRoZSBgc3RhdGljYCBrZXl3b3JkLCBvbiB0aGUgb3RoZXIgaGFuZCwgZ3VhcmFudGVlcyBhIGZpeGVkIGxvY2F0aW9uIGluIG1lbW9yeS4KVGhpcyBkb2VzIG5vdCBhbHdheXMgbWVhbiB0aGF0IHRoZSB2YWx1ZSBpcyBjb25zdGFudC4gRm9yIGV4YW1wbGUsIGEgZ2xvYmFsCm11dGV4IGNhbiBiZSBkZWNsYXJlZCBgc3RhdGljYCBhcyB3ZWxsLgoKSWYgeW91IHdhbnQgdG8gbWF0Y2ggYWdhaW5zdCBhIGBzdGF0aWNgLCBjb25zaWRlciB1c2luZyBhIGd1YXJkIGluc3RlYWQ6CgpgYGAKc3RhdGljIEZPUlRZX1RXTzogaTMyID0gNDI7CgptYXRjaCBTb21lKDQyKSB7CiAgICBTb21lKHgpIGlmIHggPT0gRk9SVFlfVFdPID0+IHt9CiAgICBfID0+IHt9Cn0KYGBgCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8ByAbIBgABAMgGAJ4jJqQBAAC8AgAAAL0CAAC9Ag4GAAC7AgIFAQRTb21lAQEAnw4AAbwCAAC9Ag4GAAK7AgABAKgCJAYAALoCAQEAnw4AAgCpAhKjAQCfDgUBBUUwMTU4AAEfBQUAAQAFAKgCJAYAALoCAQEBpA4AAbsCAADNIyamAQAAwQIAAAIAzSMmpgEAnw4FAegFQSB2YWx1ZSB3YXMgbW92ZWQgd2hvc2Ugc2l6ZSB3YXMgbm90IGtub3duIGF0IGNvbXBpbGUgdGltZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxNjEKIyFbZmVhdHVyZShib3hfc3ludGF4KV0KCmZuIG1haW4oKSB7CiAgICBsZXQgYXJyYXk6ICZbaXNpemVdID0gJlsxLCAyLCAzXTsKICAgIGxldCBfeDogQm94PFtpc2l6ZV0+ID0gYm94ICphcnJheTsKICAgIC8vIGVycm9yOiBjYW5ub3QgbW92ZSBhIHZhbHVlIG9mIHR5cGUgW2lzaXplXTogdGhlIHNpemUgb2YgW2lzaXplXSBjYW5ub3QKICAgIC8vICAgICAgICBiZSBzdGF0aWNhbGx5IGRldGVybWluZWQKfQpgYGAKCkluIFJ1c3QsIHlvdSBjYW4gb25seSBtb3ZlIGEgdmFsdWUgd2hlbiBpdHMgc2l6ZSBpcyBrbm93biBhdCBjb21waWxlIHRpbWUuCgpUbyB3b3JrIGFyb3VuZCB0aGlzIHJlc3RyaWN0aW9uLCBjb25zaWRlciAiaGlkaW5nIiB0aGUgdmFsdWUgYmVoaW5kIGEgcmVmZXJlbmNlOgplaXRoZXIgYCZ4YCBvciBgJm11dCB4YC4gU2luY2UgYSByZWZlcmVuY2UgaGFzIGEgZml4ZWQgc2l6ZSwgdGhpcyBsZXRzIHlvdSBtb3ZlCml0IGFyb3VuZCBhcyB1c3VhbC4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGJveF9zeW50YXgpXQoKZm4gbWFpbigpIHsKICAgIGxldCBhcnJheTogJltpc2l6ZV0gPSAmWzEsIDIsIDNdOwogICAgbGV0IF94OiBCb3g8Jltpc2l6ZV0+ID0gYm94IGFycmF5OyAvLyBvayEKfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////H+gF6AUAAQDoBQDNIyamAQAAwAIAAADBAgAAvQIOBgAAvwICBQEEU29tZQEBAJ8OAAHAAgAAvQIOBgACvwIAAQCoAiQGAAC+AgEBAJ8OAAIAqQISpQEAnw4FAQVFMDE2MQABHwUFAAEABQCoAiQGAAC+AgEBAaQOAAG/AgAA/CMmqAEAAMUCAAACAPwjJqgBAJ8OBQHdBCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkFuIGlmLWxldCBwYXR0ZXJuIGF0dGVtcHRzIHRvIG1hdGNoIHRoZSBwYXR0ZXJuLCBhbmQgZW50ZXJzIHRoZSBib2R5IGlmIHRoZQptYXRjaCB3YXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIG1hdGNoIGlzIGlycmVmdXRhYmxlICh3aGVuIGl0IGNhbm5vdCBmYWlsIHRvCm1hdGNoKSwgdXNlIGEgcmVndWxhciBgbGV0YC1iaW5kaW5nIGluc3RlYWQuIEZvciBpbnN0YW5jZToKCmBgYApzdHJ1Y3QgSXJyZWZ1dGFibGUoaTMyKTsKbGV0IGlyciA9IElycmVmdXRhYmxlKDApOwoKLy8gVGhpcyBmYWlscyB0byBjb21waWxlIGJlY2F1c2UgdGhlIG1hdGNoIGlzIGlycmVmdXRhYmxlLgppZiBsZXQgSXJyZWZ1dGFibGUoeCkgPSBpcnIgewogICAgLy8gVGhpcyBib2R5IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkLgogICAgLy8gLi4uCn0KYGBgCgpUcnkgdGhpcyBpbnN0ZWFkOgoKYGBgCnN0cnVjdCBJcnJlZnV0YWJsZShpMzIpOwpsZXQgaXJyID0gSXJyZWZ1dGFibGUoMCk7CgpsZXQgSXJyZWZ1dGFibGUoeCkgPSBpcnI7CnByaW50bG4hKCJ7fSIsIHgpOwpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////Ad0E3QQAAQDdBAD8IyaoAQAAxAIAAADFAgAAvQIOBgAAwwICBQEEU29tZQEBAJ8OAAHEAgAAvQIOBgACwwIAAQCoAiQGAADCAgEBAJ8OAAIAqQISpwEAnw4FAQVFMDE2MgABHwUFAAEABQCoAiQGAADCAgEBAaQOAAHDAgAAqyQmqgEAAMkCAAACAKskJqoBAJ8OBQHSBFNvbWV0aGluZyB3aGljaCBpcyBuZWl0aGVyIGEgdHVwbGUgc3RydWN0IG5vciBhIHR1cGxlIHZhcmlhbnQgd2FzIHVzZWQgYXMgYQpwYXR0ZXJuLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE2NAplbnVtIEEgewogICAgQiwKICAgIEMsCn0KCmltcGwgQSB7CiAgICBmbiBuZXcoKSB7fQp9CgpmbiBiYXIoZm9vOiBBKSB7CiAgICBtYXRjaCBmb28gewogICAgICAgIEE6Om5ldygpID0+ICgpLCAvLyBlcnJvciEKICAgICAgICBfID0+IHt9CiAgICB9Cn0KYGBgCgpUaGlzIGVycm9yIG1lYW5zIHRoYXQgYW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBtYXRjaCBzb21ldGhpbmcgd2hpY2ggaXMgbmVpdGhlciBhCnR1cGxlIHN0cnVjdCBub3IgYSB0dXBsZSB2YXJpYW50LiBPbmx5IHRoZXNlIHR3byBlbGVtZW50cyBhcmUgYWxsb3dlZCBhcyBhCnBhdHRlcm46CgpgYGAKZW51bSBBIHsKICAgIEIsCiAgICBDLAp9CgppbXBsIEEgewogICAgZm4gbmV3KCkge30KfQoKZm4gYmFyKGZvbzogQSkgewogICAgbWF0Y2ggZm9vIHsKICAgICAgICBBOjpCID0+ICgpLCAvLyBvayEKICAgICAgICBfID0+IHt9CiAgICB9Cn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8P0gTSBAABANIEAKskJqoBAADIAgAAAMkCAAC9Ag4GAADHAgIFAQRTb21lAQEAnw4AAcgCAAC9Ag4GAALHAgABAKgCJAYAAMYCAQEAnw4AAgCpAhKpAQCfDgUBBUUwMTY0AAEfBQUAAQAFAKgCJAYAAMYCAQEBpA4AAccCAADaJCasAQAAzQIAAAIA2iQmrAEAnw4FAdkEIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQSB3aGlsZS1sZXQgcGF0dGVybiBhdHRlbXB0cyB0byBtYXRjaCB0aGUgcGF0dGVybiwgYW5kIGVudGVycyB0aGUgYm9keSBpZiB0aGUKbWF0Y2ggd2FzIHN1Y2Nlc3NmdWwuIElmIHRoZSBtYXRjaCBpcyBpcnJlZnV0YWJsZSAod2hlbiBpdCBjYW5ub3QgZmFpbCB0bwptYXRjaCksIHVzZSBhIHJlZ3VsYXIgYGxldGAtYmluZGluZyBpbnNpZGUgYSBgbG9vcGAgaW5zdGVhZC4gRm9yIGluc3RhbmNlOgoKYGBgbm9fcnVuCnN0cnVjdCBJcnJlZnV0YWJsZShpMzIpOwpsZXQgaXJyID0gSXJyZWZ1dGFibGUoMCk7CgovLyBUaGlzIGZhaWxzIHRvIGNvbXBpbGUgYmVjYXVzZSB0aGUgbWF0Y2ggaXMgaXJyZWZ1dGFibGUuCndoaWxlIGxldCBJcnJlZnV0YWJsZSh4KSA9IGlyciB7CiAgICAvLyAuLi4KfQpgYGAKClRyeSB0aGlzIGluc3RlYWQ6CgpgYGBub19ydW4Kc3RydWN0IElycmVmdXRhYmxlKGkzMik7CmxldCBpcnIgPSBJcnJlZnV0YWJsZSgwKTsKCmxvb3AgewogICAgbGV0IElycmVmdXRhYmxlKHgpID0gaXJyOwogICAgLy8gLi4uCn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////D9kE2QQAAQDZBADaJCasAQAAzAIAAADNAgAAvQIOBgAAywICBQEEU29tZQEBAJ8OAAHMAgAAvQIOBgACywIAAQCoAiQGAADKAgEBAJ8OAAIAqQISqwEAnw4FAQVFMDE2NQABHwUFAAEABQCoAiQGAADKAgEBAaQOAAHLAgAAiSUmrgEAANECAAACAIklJq4BAJ8OBQHcCEEgcGF0dGVybiBiaW5kaW5nIGlzIHVzaW5nIHRoZSBzYW1lIG5hbWUgYXMgb25lIG9mIHRoZSB2YXJpYW50cyBvZiBhIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTcwCiMgIyFbZGVueSh3YXJuaW5ncyldCmVudW0gTWV0aG9kIHsKICAgIEdFVCwKICAgIFBPU1QsCn0KCmZuIGlzX2VtcHR5KHM6IE1ldGhvZCkgLT4gYm9vbCB7CiAgICBtYXRjaCBzIHsKICAgICAgICBHRVQgPT4gdHJ1ZSwKICAgICAgICBfID0+IGZhbHNlCiAgICB9Cn0KCmZuIG1haW4oKSB7fQpgYGAKCkVudW0gdmFyaWFudHMgYXJlIHF1YWxpZmllZCBieSBkZWZhdWx0LiBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhpcyB0eXBlOgoKYGBgCmVudW0gTWV0aG9kIHsKICAgIEdFVCwKICAgIFBPU1QsCn0KYGBgCgpZb3Ugd291bGQgbWF0Y2ggaXQgdXNpbmc6CgpgYGAKZW51bSBNZXRob2QgewogICAgR0VULAogICAgUE9TVCwKfQoKbGV0IG0gPSBNZXRob2Q6OkdFVDsKCm1hdGNoIG0gewogICAgTWV0aG9kOjpHRVQgPT4ge30sCiAgICBNZXRob2Q6OlBPU1QgPT4ge30sCn0KYGBgCgpJZiB5b3UgZG9uJ3QgcXVhbGlmeSB0aGUgbmFtZXMsIHRoZSBjb2RlIHdpbGwgYmluZCBuZXcgdmFyaWFibGVzIG5hbWVkICJHRVQiIGFuZAoiUE9TVCIgaW5zdGVhZC4gVGhpcyBiZWhhdmlvciBpcyBsaWtlbHkgbm90IHdoYXQgeW91IHdhbnQsIHNvIGBydXN0Y2Agd2FybnMgd2hlbgp0aGF0IGhhcHBlbnMuCgpRdWFsaWZpZWQgbmFtZXMgYXJlIGdvb2QgcHJhY3RpY2UsIGFuZCBtb3N0IGNvZGUgd29ya3Mgd2VsbCB3aXRoIHRoZW0uIEJ1dCBpZgp5b3UgcHJlZmVyIHRoZW0gdW5xdWFsaWZpZWQsIHlvdSBjYW4gaW1wb3J0IHRoZSB2YXJpYW50cyBpbnRvIHNjb3BlOgoKYGBgCnVzZSBNZXRob2Q6Oio7CmVudW0gTWV0aG9kIHsgR0VULCBQT1NUIH0KIyBmbiBtYWluKCkge30KYGBgCgpJZiB5b3Ugd2FudCBvdGhlcnMgdG8gYmUgYWJsZSB0byBpbXBvcnQgdmFyaWFudHMgZnJvbSB5b3VyIG1vZHVsZSBkaXJlY3RseSwgdXNlCmBwdWIgdXNlYDoKCmBgYApwdWIgdXNlIE1ldGhvZDo6KjsKcHViIGVudW0gTWV0aG9kIHsgR0VULCBQT1NUIH0KIyBmbiBtYWluKCkge30KYGBgCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///9/3AjcCAABANwIAIklJq4BAADQAgAAANECAAC9Ag4GAADPAgIFAQRTb21lAQEAnw4AAdACAAC9Ag4GAALPAgABAKgCJAYAAM4CAQEAnw4AAgCpAhKtAQCfDgUBBUUwMTcwAAEfBQUAAQAFAKgCJAYAAM4CAQEBpA4AAc8CAAC4JSawAQAA1QIAAAIAuCUmsAEAnw4FAcgEVGhlIGArYCB0eXBlIG9wZXJhdG9yIHdhcyB1c2VkIGluIGFuIGFtYmlndW91cyBjb250ZXh0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE3OAp0cmFpdCBGb28ge30KCnN0cnVjdCBCYXI8J2E+IHsKICAgIHg6ICYnYSBGb28gKyAnYSwgICAgIC8vIGVycm9yIQogICAgeTogJidhIG11dCBGb28gKyAnYSwgLy8gZXJyb3IhCiAgICB6OiBmbigpIC0+IEZvbyArICdhLCAvLyBlcnJvciEKfQpgYGAKCkluIHR5cGVzLCB0aGUgYCtgIHR5cGUgb3BlcmF0b3IgaGFzIGxvdyBwcmVjZWRlbmNlLCBzbyBpdCBpcyBvZnRlbiBuZWNlc3NhcnkKdG8gdXNlIHBhcmVudGhlc2VzOgoKYGBgCnRyYWl0IEZvbyB7fQoKc3RydWN0IEJhcjwnYT4gewogICAgeDogJidhIChGb28gKyAnYSksICAgICAvLyBvayEKICAgIHk6ICYnYSBtdXQgKEZvbyArICdhKSwgLy8gb2shCiAgICB6OiBmbigpIC0+IChGb28gKyAnYSksIC8vIG9rIQp9CmBgYAoKTW9yZSBkZXRhaWxzIGNhbiBiZSBmb3VuZCBpbiBbUkZDIDQzOF0uCgpbUkZDIDQzOF06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9wdWxsLzQzOAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8ByATIBAABAMgEALglJrABAADUAgAAANUCAAC9Ag4GAADTAgIFAQRTb21lAQEAnw4AAdQCAAC9Ag4GAALTAgABAKgCJAYAANICAQEAnw4AAgCpAhKvAQCfDgUBBUUwMTc4AAEfBQUAAQAFAKgCJAYAANICAQEBpA4AAdMCAADnJSayAQAA2QIAAAIA5yUmsgEAnw4FAacEVGhlIGBDb3B5YCB0cmFpdCB3YXMgaW1wbGVtZW50ZWQgb24gYSB0eXBlIHdpdGggYSBgRHJvcGAgaW1wbGVtZW50YXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTg0CiNbZGVyaXZlKENvcHkpXQpzdHJ1Y3QgRm9vOyAvLyBlcnJvciEKCmltcGwgRHJvcCBmb3IgRm9vIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7CiAgICB9Cn0KYGBgCgpFeHBsaWNpdGx5IGltcGxlbWVudGluZyBib3RoIGBEcm9wYCBhbmQgYENvcHlgIHRyYWl0IG9uIGEgdHlwZSBpcyBjdXJyZW50bHkKZGlzYWxsb3dlZC4gVGhpcyBmZWF0dXJlIGNhbiBtYWtlIHNvbWUgc2Vuc2UgaW4gdGhlb3J5LCBidXQgdGhlIGN1cnJlbnQKaW1wbGVtZW50YXRpb24gaXMgaW5jb3JyZWN0IGFuZCBjYW4gbGVhZCB0byBtZW1vcnkgdW5zYWZldHkgKHNlZQpbaXNzdWUgIzIwMTI2XVtpc3MyMDEyNl0pLCBzbyBpdCBoYXMgYmVlbiBkaXNhYmxlZCBmb3Igbm93LgoKW2lzczIwMTI2XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy8yMDEyNgoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8PpwSnBAABAKcEAOclJrIBAADYAgAAANkCAAC9Ag4GAADXAgIFAQRTb21lAQEAnw4AAdgCAAC9Ag4GAALXAgABAKgCJAYAANYCAQEAnw4AAgCpAhKxAQCfDgUBBUUwMTg0AAEfBQUAAQAFAKgCJAYAANYCAQEBpA4AAdcCAACWJia0AQAA3QIAAAIAliYmtAEAnw4FAdcFQW4gYXNzb2NpYXRlZCBmdW5jdGlvbiBmb3IgYSB0cmFpdCB3YXMgZGVmaW5lZCB0byBiZSBzdGF0aWMsIGJ1dCBhbgppbXBsZW1lbnRhdGlvbiBvZiB0aGUgdHJhaXQgZGVjbGFyZWQgdGhlIHNhbWUgZnVuY3Rpb24gdG8gYmUgYSBtZXRob2QgKGkuZS4sIHRvCnRha2UgYSBgc2VsZmAgcGFyYW1ldGVyKS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxODUKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICAvLyBlcnJvciwgbWV0aG9kIGBmb29gIGhhcyBhIGAmc2VsZmAgZGVjbGFyYXRpb24gaW4gdGhlIGltcGwsIGJ1dCBub3QgaW4KICAgIC8vIHRoZSB0cmFpdAogICAgZm4gZm9vKCZzZWxmKSB7fQp9CmBgYAoKV2hlbiBhIHR5cGUgaW1wbGVtZW50cyBhIHRyYWl0J3MgYXNzb2NpYXRlZCBmdW5jdGlvbiwgaXQgaGFzIHRvIHVzZSB0aGUgc2FtZQpzaWduYXR1cmUuIFNvIGluIHRoaXMgY2FzZSwgc2luY2UgYEZvbzo6Zm9vYCBkb2VzIG5vdCB0YWtlIGFueSBhcmd1bWVudCBhbmQKZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLCBpdHMgaW1wbGVtZW50YXRpb24gb24gYEJhcmAgc2hvdWxkIGJlIHRoZSBzYW1lOgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCkge30gLy8gb2shCn0KYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8D1wXXBQABANcFAJYmJrQBAADcAgAAAN0CAAC9Ag4GAADbAgIFAQRTb21lAQEAnw4AAdwCAAC9Ag4GAALbAgABAKgCJAYAANoCAQEAnw4AAgCpAhKzAQCfDgUBBUUwMTg1AAEfBQUAAQAFAKgCJAYAANoCAQEBpA4AAdsCAADFJia2AQAA4QIAAAIAxSYmtgEAnw4FAd8FQW4gYXNzb2NpYXRlZCBmdW5jdGlvbiBmb3IgYSB0cmFpdCB3YXMgZGVmaW5lZCB0byBiZSBhIG1ldGhvZCAoaS5lLiwgdG8gdGFrZSBhCmBzZWxmYCBwYXJhbWV0ZXIpLCBidXQgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHRyYWl0IGRlY2xhcmVkIHRoZSBzYW1lIGZ1bmN0aW9uCnRvIGJlIHN0YXRpYy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxODYKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygmc2VsZik7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIC8vIGVycm9yLCBtZXRob2QgYGZvb2AgaGFzIGEgYCZzZWxmYCBkZWNsYXJhdGlvbiBpbiB0aGUgdHJhaXQsIGJ1dCBub3QgaW4KICAgIC8vIHRoZSBpbXBsCiAgICBmbiBmb28oKSB7fQp9CmBgYAoKV2hlbiBhIHR5cGUgaW1wbGVtZW50cyBhIHRyYWl0J3MgYXNzb2NpYXRlZCBmdW5jdGlvbiwgaXQgaGFzIHRvIHVzZSB0aGUgc2FtZQpzaWduYXR1cmUuIFNvIGluIHRoaXMgY2FzZSwgc2luY2UgYEZvbzo6Zm9vYCB0YWtlcyBgc2VsZmAgYXMgYXJndW1lbnQgYW5kCmRvZXMgbm90IHJldHVybiBhbnl0aGluZywgaXRzIGltcGxlbWVudGF0aW9uIG9uIGBCYXJgIHNob3VsZCBiZSB0aGUgc2FtZToKCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vKCZzZWxmKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCZzZWxmKSB7fSAvLyBvayEKfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8H3wXfBQABAN8FAMUmJrYBAADgAgAAAOECAAC9Ag4GAADfAgIFAQRTb21lAQEAnw4AAeACAAC9Ag4GAALfAgABAKgCJAYAAN4CAQEAnw4AAgCpAhK1AQCfDgUBBUUwMTg2AAEfBQUAAQAFAKgCJAYAAN4CAQEBpA4AAd8CAAD0Jia4AQAA5QIAAAIA9CYmuAEAnw4FAYgEQW4gYXNzb2NpYXRlZCB0eXBlIHdhc24ndCBzcGVjaWZpZWQgZm9yIGEgdHJhaXQgb2JqZWN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE5MQp0cmFpdCBUcmFpdCB7CiAgICB0eXBlIEJhcjsKfQoKdHlwZSBGb28gPSBUcmFpdDsgLy8gZXJyb3I6IHRoZSB2YWx1ZSBvZiB0aGUgYXNzb2NpYXRlZCB0eXBlIGBCYXJgIChmcm9tCiAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGUgdHJhaXQgYFRyYWl0YCkgbXVzdCBiZSBzcGVjaWZpZWQKYGBgCgpUcmFpdCBvYmplY3RzIG5lZWQgdG8gaGF2ZSBhbGwgYXNzb2NpYXRlZCB0eXBlcyBzcGVjaWZpZWQuIFBsZWFzZSB2ZXJpZnkgdGhhdAphbGwgYXNzb2NpYXRlZCB0eXBlcyBvZiB0aGUgdHJhaXQgd2VyZSBzcGVjaWZpZWQgYW5kIHRoZSBjb3JyZWN0IHRyYWl0IHdhcyB1c2VkLgpFeGFtcGxlOgoKYGBgCnRyYWl0IFRyYWl0IHsKICAgIHR5cGUgQmFyOwp9Cgp0eXBlIEZvbyA9IFRyYWl0PEJhcj1pMzI+OyAvLyBvayEKYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/AYgEiAQAAQCIBAD0Jia4AQAA5AIAAADlAgAAvQIOBgAA4wICBQEEU29tZQEBAJ8OAAHkAgAAvQIOBgAC4wIAAQCoAiQGAADiAgEBAJ8OAAIAqQIStwEAnw4FAQVFMDE5MQABHwUFAAEABQCoAiQGAADiAgEBAaQOAAHjAgAAoycmugEAAOkCAAACAKMnJroBAJ8OBQG/CCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCmB3aGVyZWAgY2xhdXNlcyBtdXN0IHVzZSBnZW5lcmljIHR5cGUgcGFyYW1ldGVyczogaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byB1c2UKdGhlbSBvdGhlcndpc2UuIEFuIGV4YW1wbGUgY2F1c2luZyB0aGlzIGVycm9yOgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBiYXIoJnNlbGYpOwp9CgojW2Rlcml2ZShDb3B5LENsb25lKV0Kc3RydWN0IFdyYXBwZXI8VD4gewogICAgV3JhcHBlZDogVAp9CgppbXBsIEZvbyBmb3IgV3JhcHBlcjx1MzI+IHdoZXJlIFdyYXBwZXI8dTMyPjogQ2xvbmUgewogICAgZm4gYmFyKCZzZWxmKSB7IH0KfQpgYGAKClRoaXMgdXNlIG9mIGEgYHdoZXJlYCBjbGF1c2UgaXMgc3RyYW5nZSAtIGEgbW9yZSBjb21tb24gdXNhZ2Ugd291bGQgbG9vawpzb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nOgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBiYXIoJnNlbGYpOwp9CgojW2Rlcml2ZShDb3B5LENsb25lKV0Kc3RydWN0IFdyYXBwZXI8VD4gewogICAgV3JhcHBlZDogVAp9CmltcGwgPFQ+IEZvbyBmb3IgV3JhcHBlcjxUPiB3aGVyZSBXcmFwcGVyPFQ+OiBDbG9uZSB7CiAgICBmbiBiYXIoJnNlbGYpIHsgfQp9CmBgYAoKSGVyZSwgd2UncmUgc2F5aW5nIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGV4aXN0cyBvbiBXcmFwcGVyIG9ubHkgd2hlbiB0aGUKd3JhcHBlZCB0eXBlIGBUYCBpbXBsZW1lbnRzIGBDbG9uZWAuIFRoZSBgd2hlcmVgIGNsYXVzZSBpcyBpbXBvcnRhbnQgYmVjYXVzZQpzb21lIHR5cGVzIHdpbGwgbm90IGltcGxlbWVudCBgQ2xvbmVgLCBhbmQgdGh1cyB3aWxsIG5vdCBnZXQgdGhpcyBtZXRob2QuCgpJbiBvdXIgZXJyb25lb3VzIGV4YW1wbGUsIGhvd2V2ZXIsIHdlJ3JlIHJlZmVyZW5jaW5nIGEgc2luZ2xlIGNvbmNyZXRlIHR5cGUuClNpbmNlIHdlIGtub3cgZm9yIGNlcnRhaW4gdGhhdCBgV3JhcHBlcjx1MzI+YCBpbXBsZW1lbnRzIGBDbG9uZWAsIHRoZXJlJ3Mgbm8KcmVhc29uIHRvIGFsc28gc3BlY2lmeSBpdCBpbiBhIGB3aGVyZWAgY2xhdXNlLgoAEf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////3+/CL8IAAEAvwgAoycmugEAAOgCAAAA6QIAAL0CDgYAAOcCAgUBBFNvbWUBAQCfDgAB6AIAAL0CDgYAAucCAAEAqAIkBgAA5gIBAQCfDgACAKkCErkBAJ8OBQEFRTAxOTMAAR8FBQABAAUAqAIkBgAA5gIBAQGkDgAB5wIAANInJrwBAADtAgAAAgDSJya8AQCfDgUB3gVUaGUgbGlmZXRpbWUgcGFyYW1ldGVycyBvZiB0aGUgbWV0aG9kIGRvIG5vdCBtYXRjaCB0aGUgdHJhaXQgZGVjbGFyYXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTk1CnRyYWl0IFRyYWl0IHsKICAgIGZuIGJhcjwnYSwnYjonYT4oeDogJidhIHN0ciwgeTogJidiIHN0cik7Cn0KCnN0cnVjdCBGb287CgppbXBsIFRyYWl0IGZvciBGb28gewogICAgZm4gYmFyPCdhLCdiPih4OiAmJ2Egc3RyLCB5OiAmJ2Igc3RyKSB7CiAgICAvLyBlcnJvcjogbGlmZXRpbWUgcGFyYW1ldGVycyBvciBib3VuZHMgb24gbWV0aG9kIGBiYXJgCiAgICAvLyBkbyBub3QgbWF0Y2ggdGhlIHRyYWl0IGRlY2xhcmF0aW9uCiAgICB9Cn0KYGBgCgpUaGUgbGlmZXRpbWUgY29uc3RyYWludCBgJ2JgIGZvciBgYmFyKClgIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IG1hdGNoIHRoZQp0cmFpdCBkZWNsYXJhdGlvbi4gRW5zdXJlIGxpZmV0aW1lIGRlY2xhcmF0aW9ucyBtYXRjaCBleGFjdGx5IGluIGJvdGggdHJhaXQKZGVjbGFyYXRpb24gYW5kIGltcGxlbWVudGF0aW9uLiBFeGFtcGxlOgoKYGBgCnRyYWl0IFRyYWl0IHsKICAgIGZuIHQ8J2EsJ2I6J2E+KHg6ICYnYSBzdHIsIHk6ICYnYiBzdHIpOwp9CgpzdHJ1Y3QgRm9vOwoKaW1wbCBUcmFpdCBmb3IgRm9vIHsKICAgIGZuIHQ8J2EsJ2I6J2E+KHg6ICYnYSBzdHIsIHk6ICYnYiBzdHIpIHsgLy8gb2shCiAgICB9Cn0KYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////A94F3gUAAQDeBQDSJya8AQAA7AIAAADtAgAAvQIOBgAA6wICBQEEU29tZQEBAJ8OAAHsAgAAvQIOBgAC6wIAAQCoAiQGAADqAgEBAJ8OAAIAqQISuwEAnw4FAQVFMDE5NQABHwUFAAEABQCoAiQGAADqAgEBAaQOAAHrAgAAgSgmvgEAAPECAAACAIEoJr4BAJ8OBQG7A0FuIGluaGVyZW50IGltcGxlbWVudGF0aW9uIHdhcyBtYXJrZWQgdW5zYWZlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE5NwpzdHJ1Y3QgRm9vOwoKdW5zYWZlIGltcGwgRm9vIHsgfSAvLyBlcnJvciEKYGBgCgpJbmhlcmVudCBpbXBsZW1lbnRhdGlvbnMgKG9uZSB0aGF0IGRvIG5vdCBpbXBsZW1lbnQgYSB0cmFpdCBidXQgcHJvdmlkZQptZXRob2RzIGFzc29jaWF0ZWQgd2l0aCBhIHR5cGUpIGFyZSBhbHdheXMgc2FmZSBiZWNhdXNlIHRoZXkgYXJlIG5vdAppbXBsZW1lbnRpbmcgYW4gdW5zYWZlIHRyYWl0LiBSZW1vdmluZyB0aGUgYHVuc2FmZWAga2V5d29yZCBmcm9tIHRoZSBpbmhlcmVudAppbXBsZW1lbnRhdGlvbiB3aWxsIHJlc29sdmUgdGhpcyBlcnJvci4KCmBgYApzdHJ1Y3QgRm9vOwoKaW1wbCBGb28geyB9IC8vIG9rIQpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////we7A7sDAAEAuwMAgSgmvgEAAPACAAAA8QIAAL0CDgYAAO8CAgUBBFNvbWUBAQCfDgAB8AIAAL0CDgYAAu8CAAEAqAIkBgAA7gIBAQCfDgACAKkCEr0BAJ8OBQEFRTAxOTcAAR8FBQABAAUAqAIkBgAA7gIBAQGkDgAB7wIAALAoJsABAAD1AgAAAgCwKCbAAQCfDgUBggVBIG5lZ2F0aXZlIGltcGxlbWVudGF0aW9uIHdhcyBtYXJrZWQgYXMgdW5zYWZlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE5OApzdHJ1Y3QgRm9vOwoKdW5zYWZlIGltcGwgIUNsb25lIGZvciBGb28geyB9IC8vIGVycm9yIQpgYGAKCkEgbmVnYXRpdmUgaW1wbGVtZW50YXRpb24gaXMgb25lIHRoYXQgZXhjbHVkZXMgYSB0eXBlIGZyb20gaW1wbGVtZW50aW5nIGEKcGFydGljdWxhciB0cmFpdC4gTm90IGJlaW5nIGFibGUgdG8gdXNlIGEgdHJhaXQgaXMgYWx3YXlzIGEgc2FmZSBvcGVyYXRpb24sCnNvIG5lZ2F0aXZlIGltcGxlbWVudGF0aW9ucyBhcmUgYWx3YXlzIHNhZmUgYW5kIG5ldmVyIG5lZWQgdG8gYmUgbWFya2VkIGFzCnVuc2FmZS4KClRoaXMgd2lsbCBjb21waWxlOgoKYGBgaWdub3JlIChpZ25vcmUgYXV0b190cmFpdCBmdXR1cmUgY29tcGF0aWJpbGl0eSB3YXJuaW5nKQojIVtmZWF0dXJlKG9wdGluX2J1aWx0aW5fdHJhaXRzKV0KCnN0cnVjdCBGb287CgphdXRvIHRyYWl0IEVudGVycHJpc2Uge30KCmltcGwgIUVudGVycHJpc2UgZm9yIEZvbyB7IH0KYGBgCgpQbGVhc2Ugbm90ZSB0aGF0IG5lZ2F0aXZlIGltcGxzIGFyZSBvbmx5IGFsbG93ZWQgZm9yIGF1dG8gdHJhaXRzLgoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEDggWCBQABAIIFALAoJsABAAD0AgAAAPUCAAC9Ag4GAADzAgIFAQRTb21lAQEAnw4AAfQCAAC9Ag4GAALzAgABAKgCJAYAAPICAQEAnw4AAgCpAhK/AQCfDgUBBUUwMTk4AAEfBQUAAQAFAKgCJAYAAPICAQEBpA4AAfMCAADfKCbC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IFF1dXggPSB1MzI7CgogICAgZm4gYmF6KCZzZWxmKSAtPiBib29sIHsgdHJ1ZSB9CgogICAgLy8gZXJyb3I6IGR1cGxpY2F0ZSBtZXRob2QKICAgIGZuIGJheigmc2VsZikgLT4gYm9vbCB7IHNlbGYuMCA+IDUgfQoKICAgIC8vIGVycm9yOiBkdXBsaWNhdGUgYXNzb2NpYXRlZCB0eXBlCiAgICB0eXBlIFF1dXggPSB1MzI7Cn0KYGBgCgpOb3RlLCBob3dldmVyLCB0aGF0IGl0ZW1zIHdpdGggdGhlIHNhbWUgbmFtZSBhcmUgYWxsb3dlZCBmb3IgaW5oZXJlbnQgYGltcGxgCmJsb2NrcyB0aGF0IGRvbid0IG92ZXJsYXA6CgpgYGAKc3RydWN0IEZvbzxUPihUKTsKCmltcGwgRm9vPHU4PiB7CiAgICBmbiBiYXIoJnNlbGYpIC0+IGJvb2wgeyBzZWxmLjAgPiA1IH0KfQoKaW1wbCBGb288Ym9vbD4gewogICAgZm4gYmFyKCZzZWxmKSAtPiBib29sIHsgc2VsZi4wIH0KfQpgYGAKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////A7MGswYAAQCzBgC9KSbGAQAAgAMAAACBAwAAvQIOBgAA/wICBQEEU29tZQEBAJ8OAAGAAwAAvQIOBgAC/wIAAQCoAiQGAAD+AgEBAJ8OAAIAqQISxQEAnw4FAQVFMDIwMQABHwUFAAEABQCoAiQGAAD+AgEBAaQOAAH/AgAA7CkmyAEAAIUDAAACAOwpJsgBAJ8OBQGWA0luaGVyZW50IGFzc29jaWF0ZWQgdHlwZXMgd2VyZSBwYXJ0IG9mIFtSRkMgMTk1XSBidXQgYXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQuClNlZSBbdGhlIHRyYWNraW5nIGlzc3VlXVtpc3M4OTk1XSBmb3IgdGhlIHN0YXR1cyBvZiB0aGlzIGltcGxlbWVudGF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIwMgpzdHJ1Y3QgRm9vOwoKaW1wbCBGb28gewogICAgdHlwZSBCYXIgPSBpc2l6ZTsgLy8gZXJyb3IhCn0KYGBgCgpbUkZDIDE5NV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzAxOTUtYXNzb2NpYXRlZC1pdGVtcy5tZApbaXNzODk5NV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvODk5NQoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wGWA5YDAAEAlgMA7CkmyAEAAIQDAAAAhQMAAL0CDgYAAIMDAgUBBFNvbWUBAQCfDgABhAMAAL0CDgYAAoMDAAEAqAIkBgAAggMBAQCfDgACAKkCEscBAJ8OBQEFRTAyMDIAAR8FBQABAAUAqAIkBgAAggMBAQGkDgABgwMAAJsqJsoBAACJAwAAAgCbKibKAQCfDgUB3QJIYXZpbmcgbXVsdGlwbGUgcmVsYXhlZCBkZWZhdWx0IGJvdW5kcyBpcyB1bnN1cHBvcnRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDMKc3RydWN0IEJhZDxUOiA/U2l6ZWQgKyA/U2VuZD57CiAgICBpbm5lcjogVAp9CmBgYAoKSGVyZSB0aGUgdHlwZSBgVGAgY2Fubm90IGhhdmUgYSByZWxheGVkIGJvdW5kIGZvciBtdWx0aXBsZSBkZWZhdWx0IHRyYWl0cwooYFNpemVkYCBhbmQgYFNlbmRgKS4gVGhpcyBjYW4gYmUgZml4ZWQgYnkgb25seSB1c2luZyBvbmUgcmVsYXhlZCBib3VuZC4KCmBgYApzdHJ1Y3QgR29vZDxUOiA/U2l6ZWQ+ewogICAgaW5uZXI6IFQKfQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af////8B3QLdAgABAN0CAJsqJsoBAACIAwAAAIkDAAC9Ag4GAACHAwIFAQRTb21lAQEAnw4AAYgDAAC9Ag4GAAKHAwABAKgCJAYAAIYDAQEAnw4AAgCpAhLJAQCfDgUBBUUwMjAzAAEfBQUAAQAFAKgCJAYAAIYDAQEBpA4AAYcDAADKKibMAQAAjQMAAAIAyiomzAEAnw4FAasFVGhlIGBDb3B5YCB0cmFpdCB3YXMgaW1wbGVtZW50ZWQgb24gYSB0eXBlIHdoaWNoIGNvbnRhaW5zIGEgZmllbGQgdGhhdCBkb2Vzbid0CmltcGxlbWVudCB0aGUgYENvcHlgIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIwNApzdHJ1Y3QgRm9vIHsKICAgIGZvbzogVmVjPHUzMj4sCn0KCmltcGwgQ29weSBmb3IgRm9vIHsgfSAvLyBlcnJvciEKYGBgCgpUaGUgYENvcHlgIHRyYWl0IGlzIGltcGxlbWVudGVkIGJ5IGRlZmF1bHQgb25seSBvbiBwcmltaXRpdmUgdHlwZXMuIElmIHlvdXIKdHlwZSBvbmx5IGNvbnRhaW5zIHByaW1pdGl2ZSB0eXBlcywgeW91J2xsIGJlIGFibGUgdG8gaW1wbGVtZW50IGBDb3B5YCBvbiBpdC4KT3RoZXJ3aXNlLCBpdCB3b24ndCBiZSBwb3NzaWJsZS4KCkhlcmUncyBhbm90aGVyIGV4YW1wbGUgdGhhdCB3aWxsIGZhaWw6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDQKI1tkZXJpdmUoQ29weSldIC8vIGVycm9yIQpzdHJ1Y3QgRm9vPCdhPiB7CiAgICB0eTogJidhIG11dCBib29sLAp9CmBgYAoKVGhpcyBmYWlscyBiZWNhdXNlIGAmbXV0IFRgIGlzIG5vdCBgQ29weWAsIGV2ZW4gd2hlbiBgVGAgaXMgYENvcHlgICh0aGlzCmRpZmZlcnMgZnJvbSB0aGUgYmVoYXZpb3IgZm9yIGAmVGAsIHdoaWNoIGlzIGFsd2F5cyBgQ29weWApLgoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8BqwWrBQABAKsFAMoqJswBAACMAwAAAI0DAAC9Ag4GAACLAwIFAQRTb21lAQEAnw4AAYwDAAC9Ag4GAAKLAwABAKgCJAYAAIoDAQEAnw4AAgCpAhLLAQCfDgUBBUUwMjA0AAEfBQUAAQAFAKgCJAYAAIoDAQEBpA4AAYsDAAD5KibOAQAAkQMAAAIA+SomzgEAnw4FAdoFIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQW4gYXR0ZW1wdCB0byBpbXBsZW1lbnQgdGhlIGBDb3B5YCB0cmFpdCBmb3IgYW4gZW51bSBmYWlsZWQgYmVjYXVzZSBvbmUgb2YgdGhlCnZhcmlhbnRzIGRvZXMgbm90IGltcGxlbWVudCBgQ29weWAuIFRvIGZpeCB0aGlzLCB5b3UgbXVzdCBpbXBsZW1lbnQgYENvcHlgIGZvcgp0aGUgbWVudGlvbmVkIHZhcmlhbnQuIE5vdGUgdGhhdCB0aGlzIG1heSBub3QgYmUgcG9zc2libGUsIGFzIGluIHRoZSBleGFtcGxlIG9mCgpgYGBjb21waWxlX2ZhaWwsRTAyMDQKZW51bSBGb28gewogICAgQmFyKFZlYzx1MzI+KSwKICAgIEJheiwKfQoKaW1wbCBDb3B5IGZvciBGb28geyB9CmBgYAoKVGhpcyBmYWlscyBiZWNhdXNlIGBWZWM8VD5gIGRvZXMgbm90IGltcGxlbWVudCBgQ29weWAgZm9yIGFueSBgVGAuCgpIZXJlJ3MgYW5vdGhlciBleGFtcGxlIHRoYXQgd2lsbCBmYWlsOgoKYGBgY29tcGlsZV9mYWlsLEUwMjA0CiNbZGVyaXZlKENvcHkpXQplbnVtIEZvbzwnYT4gewogICAgQmFyKCYnYSBtdXQgYm9vbCksCiAgICBCYXosCn0KYGBgCgpUaGlzIGZhaWxzIGJlY2F1c2UgYCZtdXQgVGAgaXMgbm90IGBDb3B5YCwgZXZlbiB3aGVuIGBUYCBpcyBgQ29weWAgKHRoaXMKZGlmZmVycyBmcm9tIHRoZSBiZWhhdmlvciBmb3IgYCZUYCwgd2hpY2ggaXMgYWx3YXlzIGBDb3B5YCkuCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8f2gXaBQABANoFAPkqJs4BAACQAwAAAJEDAAC9Ag4GAACPAwIFAQRTb21lAQEAnw4AAZADAAC9Ag4GAAKPAwABAKgCJAYAAI4DAQEAnw4AAgCpAhLNAQCfDgUBBUUwMjA1AAEfBQUAAQAFAKgCJAYAAI4DAQEBpA4AAY8DAACoKybQAQAAlQMAAAIAqCsm0AEAnw4FAdQDVGhlIGBDb3B5YCB0cmFpdCB3YXMgaW1wbGVtZW50ZWQgb24gYSB0eXBlIHdoaWNoIGlzIG5laXRoZXIgYSBzdHJ1Y3Qgbm9yIGFuCmVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjA2CnR5cGUgRm9vID0gW3U4OyAyNTZdOwppbXBsIENvcHkgZm9yIEZvbyB7IH0gLy8gZXJyb3IhCgojW2Rlcml2ZShDb3B5LCBDbG9uZSldCnN0cnVjdCBCYXI7CgppbXBsIENvcHkgZm9yICYnc3RhdGljIG11dCBCYXIgeyB9IC8vIGVycm9yIQpgYGAKCllvdSBjYW4gb25seSBpbXBsZW1lbnQgYENvcHlgIGZvciBhIHN0cnVjdCBvciBhbiBlbnVtLiBCb3RoIG9mIHRoZSBwcmV2aW91cwpleGFtcGxlcyB3aWxsIGZhaWwsIGJlY2F1c2UgbmVpdGhlciBgW3U4OyAyNTZdYCBub3IgYCYnc3RhdGljIG11dCBCYXJgCihtdXRhYmxlIHJlZmVyZW5jZSB0byBgQmFyYCkgaXMgYSBzdHJ1Y3Qgb3IgZW51bS4KAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8/1APUAwABANQDAKgrJtABAACUAwAAAJUDAAC9Ag4GAACTAwIFAQRTb21lAQEAnw4AAZQDAAC9Ag4GAAKTAwABAKgCJAYAAJIDAQEAnw4AAgCpAhLPAQCfDgUBBUUwMjA2AAEfBQUAAQAFAKgCJAYAAJIDAQEBpA4AAZMDAADXKybSAQAAmQMAAAIA1ysm0gEAnw4FAaMXQSB0eXBlIHBhcmFtZXRlciB0aGF0IGlzIHNwZWNpZmllZCBmb3IgYGltcGxgIGlzIG5vdCBjb25zdHJhaW5lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDcKc3RydWN0IEZvbzsKCmltcGw8VDogRGVmYXVsdD4gRm9vIHsKICAgIC8vIGVycm9yOiB0aGUgdHlwZSBwYXJhbWV0ZXIgYFRgIGlzIG5vdCBjb25zdHJhaW5lZCBieSB0aGUgaW1wbCB0cmFpdCwgc2VsZgogICAgLy8gdHlwZSwgb3IgcHJlZGljYXRlcyBbRTAyMDddCiAgICBmbiBnZXQoJnNlbGYpIC0+IFQgewogICAgICAgIDxUIGFzIERlZmF1bHQ+OjpkZWZhdWx0KCkKICAgIH0KfQpgYGAKCkFueSB0eXBlIHBhcmFtZXRlciBwYXJhbWV0ZXIgb2YgYW4gYGltcGxgIG11c3QgbWVldCBhdCBsZWFzdCBvbmUgb2YKdGhlIGZvbGxvd2luZyBjcml0ZXJpYToKCiAtIGl0IGFwcGVhcnMgaW4gdGhlIF9pbXBsZW1lbnRpbmcgdHlwZV8gb2YgdGhlIGltcGwsIGUuZy4gYGltcGw8VD4gRm9vPFQ+YAogLSBmb3IgYSB0cmFpdCBpbXBsLCBpdCBhcHBlYXJzIGluIHRoZSBfaW1wbGVtZW50ZWQgdHJhaXRfLCBlLmcuCiAgIGBpbXBsPFQ+IFNvbWVUcmFpdDxUPiBmb3IgRm9vYAogLSBpdCBpcyBib3VuZCBhcyBhbiBhc3NvY2lhdGVkIHR5cGUsIGUuZy4gYGltcGw8VCwgVT4gU29tZVRyYWl0IGZvciBUCiAgIHdoZXJlIFQ6IEFub3RoZXJUcmFpdDxBc3NvY1R5cGU9VT5gCgojIyMgRXJyb3IgZXhhbXBsZSAxCgpTdXBwb3NlIHdlIGhhdmUgYSBzdHJ1Y3QgYEZvb2AgYW5kIHdlIHdvdWxkIGxpa2UgdG8gZGVmaW5lIHNvbWUgbWV0aG9kcyBmb3IgaXQuClRoZSBwcmV2aW91cyBjb2RlIGV4YW1wbGUgaGFzIGEgZGVmaW5pdGlvbiB3aGljaCBsZWFkcyB0byBhIGNvbXBpbGVyIGVycm9yOgoKVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgcGFyYW1ldGVyIGBUYCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGltcGxlbWVudGluZyB0eXBlCihgRm9vYCkgb2YgdGhlIGltcGwuIEluIHRoaXMgY2FzZSwgd2UgY2FuIGZpeCB0aGUgZXJyb3IgYnkgbW92aW5nIHRoZSB0eXBlCnBhcmFtZXRlciBmcm9tIHRoZSBgaW1wbGAgdG8gdGhlIG1ldGhvZCBgZ2V0YDoKCgpgYGAKc3RydWN0IEZvbzsKCi8vIE1vdmUgdGhlIHR5cGUgcGFyYW1ldGVyIGZyb20gdGhlIGltcGwgdG8gdGhlIG1ldGhvZAppbXBsIEZvbyB7CiAgICBmbiBnZXQ8VDogRGVmYXVsdD4oJnNlbGYpIC0+IFQgewogICAgICAgIDxUIGFzIERlZmF1bHQ+OjpkZWZhdWx0KCkKICAgIH0KfQpgYGAKCiMjIyBFcnJvciBleGFtcGxlIDIKCkFzIGFub3RoZXIgZXhhbXBsZSwgc3VwcG9zZSB3ZSBoYXZlIGEgYE1ha2VyYCB0cmFpdCBhbmQgd2FudCB0byBlc3RhYmxpc2ggYQp0eXBlIGBGb29NYWtlcmAgdGhhdCBtYWtlcyBgRm9vYHM6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDcKdHJhaXQgTWFrZXIgewogICAgdHlwZSBJdGVtOwogICAgZm4gbWFrZSgmbXV0IHNlbGYpIC0+IFNlbGY6Okl0ZW07Cn0KCnN0cnVjdCBGb288VD4gewogICAgZm9vOiBUCn0KCnN0cnVjdCBGb29NYWtlcjsKCmltcGw8VDogRGVmYXVsdD4gTWFrZXIgZm9yIEZvb01ha2VyIHsKLy8gZXJyb3I6IHRoZSB0eXBlIHBhcmFtZXRlciBgVGAgaXMgbm90IGNvbnN0cmFpbmVkIGJ5IHRoZSBpbXBsIHRyYWl0LCBzZWxmCi8vIHR5cGUsIG9yIHByZWRpY2F0ZXMgW0UwMjA3XQogICAgdHlwZSBJdGVtID0gRm9vPFQ+OwoKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBGb288VD4gewogICAgICAgIEZvbyB7IGZvbzogPFQgYXMgRGVmYXVsdD46OmRlZmF1bHQoKSB9CiAgICB9Cn0KYGBgCgpUaGlzIGZhaWxzIHRvIGNvbXBpbGUgYmVjYXVzZSBgVGAgZG9lcyBub3QgYXBwZWFyIGluIHRoZSB0cmFpdCBvciBpbiB0aGUKaW1wbGVtZW50aW5nIHR5cGUuCgpPbmUgd2F5IHRvIHdvcmsgYXJvdW5kIHRoaXMgaXMgdG8gaW50cm9kdWNlIGEgcGhhbnRvbSB0eXBlIHBhcmFtZXRlciBpbnRvCmBGb29NYWtlcmAsIGxpa2Ugc286CgpgYGAKdXNlIHN0ZDo6bWFya2VyOjpQaGFudG9tRGF0YTsKCnRyYWl0IE1ha2VyIHsKICAgIHR5cGUgSXRlbTsKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBTZWxmOjpJdGVtOwp9CgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGZvbzogVAp9CgovLyBBZGQgYSB0eXBlIHBhcmFtZXRlciB0byBgRm9vTWFrZXJgCnN0cnVjdCBGb29NYWtlcjxUPiB7CiAgICBwaGFudG9tOiBQaGFudG9tRGF0YTxUPiwKfQoKaW1wbDxUOiBEZWZhdWx0PiBNYWtlciBmb3IgRm9vTWFrZXI8VD4gewogICAgdHlwZSBJdGVtID0gRm9vPFQ+OwoKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBGb288VD4gewogICAgICAgIEZvbyB7CiAgICAgICAgICAgIGZvbzogPFQgYXMgRGVmYXVsdD46OmRlZmF1bHQoKSwKICAgICAgICB9CiAgICB9Cn0KYGBgCgpBbm90aGVyIHdheSBpcyB0byBkbyBhd2F5IHdpdGggdGhlIGFzc29jaWF0ZWQgdHlwZSBpbiBgTWFrZXJgIGFuZCB1c2UgYW4gaW5wdXQKdHlwZSBwYXJhbWV0ZXIgaW5zdGVhZDoKCmBgYAovLyBVc2UgYSB0eXBlIHBhcmFtZXRlciBpbnN0ZWFkIG9mIGFuIGFzc29jaWF0ZWQgdHlwZSBoZXJlCnRyYWl0IE1ha2VyPEl0ZW0+IHsKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBJdGVtOwp9CgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGZvbzogVAp9CgpzdHJ1Y3QgRm9vTWFrZXI7CgppbXBsPFQ6IERlZmF1bHQ+IE1ha2VyPEZvbzxUPj4gZm9yIEZvb01ha2VyIHsKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBGb288VD4gewogICAgICAgIEZvbyB7IGZvbzogPFQgYXMgRGVmYXVsdD46OmRlZmF1bHQoKSB9CiAgICB9Cn0KYGBgCgojIyMgQWRkaXRpb25hbCBpbmZvcm1hdGlvbgoKRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgW1JGQyA0NDddLgoKW1JGQyA0NDddOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8wNDQ3LW5vLXVudXNlZC1pbXBsLXBhcmFtZXRlcnMubWQKAC////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////3+jF6MXAAEAoxcA1ysm0gEAAJgDAAAAmQMAAL0CDgYAAJcDAgUBBFNvbWUBAQCfDgABmAMAAL0CDgYAApcDAAEAqAIkBgAAlgMBAQCfDgACAKkCEtEBAJ8OBQEFRTAyMDcAAR8FBQABAAUAqAIkBgAAlgMBAQGkDgABlwMAAIYsJtQBAACdAwAAAgCGLCbUAQCfDgUBqBdUaGlzIGVycm9yIGluZGljYXRlcyBhIHZpb2xhdGlvbiBvZiBvbmUgb2YgUnVzdCdzIG9ycGhhbiBydWxlcyBmb3IgdHJhaXQKaW1wbGVtZW50YXRpb25zLiBUaGUgcnVsZSBjb25jZXJucyB0aGUgdXNlIG9mIHR5cGUgcGFyYW1ldGVycyBpbiBhbgppbXBsZW1lbnRhdGlvbiBvZiBhIGZvcmVpZ24gdHJhaXQgKGEgdHJhaXQgZGVmaW5lZCBpbiBhbm90aGVyIGNyYXRlKSwgYW5kCnN0YXRlcyB0aGF0IHR5cGUgcGFyYW1ldGVycyBtdXN0IGJlICJjb3ZlcmVkIiBieSBhIGxvY2FsIHR5cGUuCgpXaGVuIGltcGxlbWVudGluZyBhIGZvcmVpZ24gdHJhaXQgZm9yIGEgZm9yZWlnbiB0eXBlLAp0aGUgdHJhaXQgbXVzdCBoYXZlIG9uZSBvciBtb3JlIHR5cGUgcGFyYW1ldGVycy4KQSB0eXBlIGxvY2FsIHRvIHlvdXIgY3JhdGUgbXVzdCBhcHBlYXIgYmVmb3JlIGFueSB1c2Ugb2YgYW55IHR5cGUgcGFyYW1ldGVycy4KClRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIG1lYW5zLCBpdCBpcyBwZXJoYXBzIGVhc2llciB0byBjb25zaWRlciBhIGZldyBleGFtcGxlcy4KCklmIGBGb3JlaWduVHJhaXRgIGlzIGEgdHJhaXQgZGVmaW5lZCBpbiBzb21lIGV4dGVybmFsIGNyYXRlIGBmb29gLCB0aGVuIHRoZQpmb2xsb3dpbmcgdHJhaXQgYGltcGxgIGlzIGFuIGVycm9yOgoKYGBgY29tcGlsZV9mYWlsLEUwMjEwCiMgI1tjZmcoZm9yX2RlbW9uc3RyYXRpb25fb25seSldCmV4dGVybiBjcmF0ZSBmb287CiMgI1tjZmcoZm9yX2RlbW9uc3RyYXRpb25fb25seSldCnVzZSBmb286OkZvcmVpZ25UcmFpdDsKIyB1c2Ugc3RkOjpwYW5pYzo6VW53aW5kU2FmZSBhcyBGb3JlaWduVHJhaXQ7CgppbXBsPFQ+IEZvcmVpZ25UcmFpdCBmb3IgVCB7IH0gLy8gZXJyb3IKIyBmbiBtYWluKCkge30KYGBgCgpUbyB3b3JrIGFyb3VuZCB0aGlzLCBpdCBjYW4gYmUgY292ZXJlZCB3aXRoIGEgbG9jYWwgdHlwZSwgYE15VHlwZWA6CgpgYGAKIyB1c2Ugc3RkOjpwYW5pYzo6VW53aW5kU2FmZSBhcyBGb3JlaWduVHJhaXQ7CnN0cnVjdCBNeVR5cGU8VD4oVCk7CmltcGw8VD4gRm9yZWlnblRyYWl0IGZvciBNeVR5cGU8VD4geyB9IC8vIE9rCmBgYAoKUGxlYXNlIG5vdGUgdGhhdCBhIHR5cGUgYWxpYXMgaXMgbm90IHN1ZmZpY2llbnQuCgpGb3IgYW5vdGhlciBleGFtcGxlIG9mIGFuIGVycm9yLCBzdXBwb3NlIHRoZXJlJ3MgYW5vdGhlciB0cmFpdCBkZWZpbmVkIGluIGBmb29gCm5hbWVkIGBGb3JlaWduVHJhaXQyYCB0aGF0IHRha2VzIHR3byB0eXBlIHBhcmFtZXRlcnMuIFRoZW4gdGhpcyBgaW1wbGAgcmVzdWx0cwppbiB0aGUgc2FtZSBydWxlIHZpb2xhdGlvbjoKCmBgYGlnbm9yZSAoY2Fubm90LWRvY3Rlc3QtbXVsdGljcmF0ZS1wcm9qZWN0KQpzdHJ1Y3QgTXlUeXBlMjsKaW1wbDxUPiBGb3JlaWduVHJhaXQyPFQsIE15VHlwZTxUPj4gZm9yIE15VHlwZTIgeyB9IC8vIGVycm9yCmBgYAoKVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0IHRoZXJlIGFyZSB0d28gYXBwZWFyYW5jZXMgb2YgdHlwZSBwYXJhbWV0ZXIgYFRgIGluCnRoZSBgaW1wbGAgaGVhZGVyLCBib3RoIGFzIHBhcmFtZXRlcnMgZm9yIGBGb3JlaWduVHJhaXQyYC4gVGhlIGZpcnN0IGFwcGVhcmFuY2UKaXMgdW5jb3ZlcmVkLCBhbmQgc28gcnVucyBhZm91bCBvZiB0aGUgb3JwaGFuIHJ1bGUuCgpDb25zaWRlciBvbmUgbW9yZSBleGFtcGxlOgoKYGBgaWdub3JlIChjYW5ub3QtZG9jdGVzdC1tdWx0aWNyYXRlLXByb2plY3QpCmltcGw8VD4gRm9yZWlnblRyYWl0MjxNeVR5cGU8VD4sIFQ+IGZvciBNeVR5cGUyIHsgfSAvLyBPawpgYGAKClRoaXMgb25seSBkaWZmZXJzIGZyb20gdGhlIHByZXZpb3VzIGBpbXBsYCBpbiB0aGF0IHRoZSBwYXJhbWV0ZXJzIGBUYCBhbmQKYE15VHlwZTxUPmAgZm9yIGBGb3JlaWduVHJhaXQyYCBoYXZlIGJlZW4gc3dhcHBlZC4gVGhpcyBleGFtcGxlIGRvZXMgKm5vdCoKdmlvbGF0ZSB0aGUgb3JwaGFuIHJ1bGU7IGl0IGlzIHBlcm1pdHRlZC4KClRvIHNlZSB3aHkgdGhhdCBsYXN0IGV4YW1wbGUgd2FzIGFsbG93ZWQsIHlvdSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGdlbmVyYWwKcnVsZS4gVW5mb3J0dW5hdGVseSB0aGlzIHJ1bGUgaXMgYSBiaXQgdHJpY2t5IHRvIHN0YXRlLiBDb25zaWRlciBhbiBgaW1wbGA6CgpgYGBpZ25vcmUgKG9ubHktZm9yLXN5bnRheC1oaWdobGlnaHQpCmltcGw8UDEsIC4uLiwgUG0+IEZvcmVpZ25UcmFpdDxUMSwgLi4uLCBUbj4gZm9yIFQwIHsgLi4uIH0KYGBgCgp3aGVyZSBgUDEsIC4uLiwgUG1gIGFyZSB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIHRoZSBgaW1wbGAgYW5kIGBUMCwgLi4uLCBUbmAKYXJlIHR5cGVzLiBPbmUgb2YgdGhlIHR5cGVzIGBUMCwgLi4uLCBUbmAgbXVzdCBiZSBhIGxvY2FsIHR5cGUgKHRoaXMgaXMgYW5vdGhlcgpvcnBoYW4gcnVsZSwgc2VlIHRoZSBleHBsYW5hdGlvbiBmb3IgRTAxMTcpLgoKQm90aCBvZiB0aGUgZm9sbG93aW5nIG11c3QgYmUgdHJ1ZToKMS4gQXQgbGVhc3Qgb25lIG9mIHRoZSB0eXBlcyBgVDAuLj1UbmAgbXVzdCBiZSBhIGxvY2FsIHR5cGUuCkxldCBgVGlgIGJlIHRoZSBmaXJzdCBzdWNoIHR5cGUuCjIuIE5vIHVuY292ZXJlZCB0eXBlIHBhcmFtZXRlcnMgYFAxLi49UG1gIG1heSBhcHBlYXIgaW4gYFQwLi5UaWAKKGV4Y2x1ZGluZyBgVGlgKS4KCkZvciBpbmZvcm1hdGlvbiBvbiB0aGUgZGVzaWduIG9mIHRoZSBvcnBoYW4gcnVsZXMsCnNlZSBbUkZDIDI0NTFdIGFuZCBbUkZDIDEwMjNdLgoKRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBkZXNpZ24gb2YgdGhlIG9ycGhhbiBydWxlcywgc2VlIFtSRkMgMTAyM10uCgpbUkZDIDI0NTFdOiBodHRwczovL3J1c3QtbGFuZy5naXRodWIuaW8vcmZjcy8yNDUxLXJlLXJlYmFsYW5jaW5nLWNvaGVyZW5jZS5odG1sCltSRkMgMTAyM106IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzEwMjMtcmViYWxhbmNpbmctY29oZXJlbmNlLm1kCgAv////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////H6gXqBcAAQCoFwCGLCbUAQAAnAMAAACdAwAAvQIOBgAAmwMCBQEEU29tZQEBAJ8OAAGcAwAAvQIOBgACmwMAAQCoAiQGAACaAwEBAJ8OAAIAqQIS0wEAnw4FAQVFMDIxMAABHwUFAAEABQCoAiQGAACaAwEBAaQOAAGbAwAAtSwm1gEAAKEDAAACALUsJtYBAJ8OBQHTCyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCllvdSB1c2VkIGEgZnVuY3Rpb24gb3IgdHlwZSB3aGljaCBkb2Vzbid0IGZpdCB0aGUgcmVxdWlyZW1lbnRzIGZvciB3aGVyZSBpdCB3YXMKdXNlZC4gRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIGZuIHNpemVfb2Y8VD4oKTsgLy8gZXJyb3I6IGludHJpbnNpYyBoYXMgd3JvbmcgdHlwZQp9CgovLyBvcjoKCmZuIG1haW4oKSAtPiBpMzIgeyAwIH0KLy8gZXJyb3I6IG1haW4gZnVuY3Rpb24gZXhwZWN0cyB0eXBlOiBgZm4oKSB7bWFpbn1gOiBleHBlY3RlZCAoKSwgZm91bmQgaTMyCgovLyBvcjoKCmxldCB4ID0gMXU4OwptYXRjaCB4IHsKICAgIDB1OC4uPTNpOCA9PiAoKSwKICAgIC8vIGVycm9yOiBtaXNtYXRjaGVkIHR5cGVzIGluIHJhbmdlOiBleHBlY3RlZCB1OCwgZm91bmQgaTgKICAgIF8gPT4gKCkKfQoKLy8gb3I6Cgp1c2Ugc3RkOjpyYzo6UmM7CnN0cnVjdCBGb287CgppbXBsIEZvbyB7CiAgICBmbiB4KHNlbGY6IFJjPEZvbz4pIHt9CiAgICAvLyBlcnJvcjogbWlzbWF0Y2hlZCBzZWxmIHR5cGU6IGV4cGVjdGVkIGBGb29gOiBleHBlY3RlZCBzdHJ1Y3QKICAgIC8vICAgICAgICBgRm9vYCwgZm91bmQgc3RydWN0IGBhbGxvYzo6cmM6OlJjYAp9CmBgYAoKRm9yIHRoZSBmaXJzdCBjb2RlIGV4YW1wbGUsIHBsZWFzZSBjaGVjayB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGludHJpbnNpY3MpXQoKZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgZm4gc2l6ZV9vZjxUPigpIC0+IHVzaXplOyAvLyBvayEKfQpgYGAKClRoZSBzZWNvbmQgY2FzZSBleGFtcGxlIGlzIGEgYml0IHBhcnRpY3VsYXI6IHRoZSBtYWluIGZ1bmN0aW9uIG11c3QgYWx3YXlzCmhhdmUgdGhpcyBkZWZpbml0aW9uOgoKYGBgY29tcGlsZV9mYWlsCmZuIG1haW4oKTsKYGBgCgpUaGV5IG5ldmVyIHRha2UgcGFyYW1ldGVycyBhbmQgbmV2ZXIgcmV0dXJuIHR5cGVzLgoKRm9yIHRoZSB0aGlyZCBleGFtcGxlLCB3aGVuIHlvdSBtYXRjaCwgYWxsIHBhdHRlcm5zIG11c3QgaGF2ZSB0aGUgc2FtZSB0eXBlCmFzIHRoZSB0eXBlIHlvdSdyZSBtYXRjaGluZyBvbi4gRXhhbXBsZToKCmBgYApsZXQgeCA9IDF1ODsKCm1hdGNoIHggewogICAgMHU4Li49M3U4ID0+ICgpLCAvLyBvayEKICAgIF8gPT4gKCkKfQpgYGAKCkFuZCBmaW5hbGx5LCBmb3IgdGhlIGxhc3QgZXhhbXBsZSwgb25seSBgQm94PFNlbGY+YCwgYCZTZWxmYCwgYFNlbGZgLApvciBgJm11dCBTZWxmYCB3b3JrIGFzIGV4cGxpY2l0IHNlbGYgcGFyYW1ldGVycy4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vOwoKaW1wbCBGb28gewogICAgZm4geChzZWxmOiBCb3g8Rm9vPikge30gLy8gb2shCn0KYGBgCgAY////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//x/TC9MLAAEA0wsAtSwm1gEAAKADAAAAoQMAAL0CDgYAAJ8DAgUBBFNvbWUBAQCfDgABoAMAAL0CDgYAAp8DAAEAqAIkBgAAngMBAQCfDgACAKkCEtUBAJ8OBQEFRTAyMTEAAR8FBQABAAUAqAIkBgAAngMBAQGkDgABnwMAAOQsJtgBAAClAwAAAgDkLCbYAQCfDgUBmgNBIGdlbmVyaWMgdHlwZSB3YXMgZGVzY3JpYmVkIHVzaW5nIHBhcmVudGhlc2VzIHJhdGhlciB0aGFuIGFuZ2xlIGJyYWNrZXRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIxNApsZXQgdjogVmVjKCZzdHIpID0gdmVjIVsiZm9vIl07CmBgYAoKVGhpcyBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZDogYHZgIHNob3VsZCBiZSBkZWZpbmVkIGFzIGBWZWM8JnN0cj5gLgpQYXJlbnRoZXNlcyBhcmUgY3VycmVudGx5IG9ubHkgdXNlZCB3aXRoIGdlbmVyaWMgdHlwZXMgd2hlbiBkZWZpbmluZyBwYXJhbWV0ZXJzCmZvciBgRm5gLWZhbWlseSB0cmFpdHMuCgpUaGUgcHJldmlvdXMgY29kZSBleGFtcGxlIGZpeGVkOgoKYGBgCmxldCB2OiBWZWM8JnN0cj4gPSB2ZWMhWyJmb28iXTsKYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////H5oDmgMAAQCaAwDkLCbYAQAApAMAAAClAwAAvQIOBgAAowMCBQEEU29tZQEBAJ8OAAGkAwAAvQIOBgACowMAAQCoAiQGAACiAwEBAJ8OAAIAqQIS1wEAnw4FAQVFMDIxNAABHwUFAAEABQCoAiQGAACiAwEBAaQOAAGjAwAAky0m2gEAAKkDAAACAJMtJtoBAJ8OBQGJBlRoZSBhc3NvY2lhdGVkIHR5cGUgdXNlZCB3YXMgbm90IGRlZmluZWQgaW4gdGhlIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyMAp0cmFpdCBUMSB7CiAgICB0eXBlIEJhcjsKfQoKdHlwZSBGb28gPSBUMTxGPWkzMj47IC8vIGVycm9yOiBhc3NvY2lhdGVkIHR5cGUgYEZgIG5vdCBmb3VuZCBmb3IgYFQxYAoKLy8gb3I6Cgp0cmFpdCBUMiB7CiAgICB0eXBlIEJhcjsKCiAgICAvLyBlcnJvcjogQmF6IGlzIHVzZWQgYnV0IG5vdCBkZWNsYXJlZAogICAgZm4gcmV0dXJuX2Jvb2woJnNlbGYsIF86ICZTZWxmOjpCYXIsIF86ICZTZWxmOjpCYXopIC0+IGJvb2w7Cn0KYGBgCgpNYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBkZWZpbmVkIHRoZSBhc3NvY2lhdGVkIHR5cGUgaW4gdGhlIHRyYWl0IGJvZHkuCkFsc28sIHZlcmlmeSB0aGF0IHlvdSB1c2VkIHRoZSByaWdodCB0cmFpdCBvciB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZQphc3NvY2lhdGVkIHR5cGUgbmFtZS4gRXhhbXBsZToKCmBgYAp0cmFpdCBUMSB7CiAgICB0eXBlIEJhcjsKfQoKdHlwZSBGb28gPSBUMTxCYXI9aTMyPjsgLy8gb2shCgovLyBvcjoKCnRyYWl0IFQyIHsKICAgIHR5cGUgQmFyOwogICAgdHlwZSBCYXo7IC8vIHdlIGRlY2xhcmUgYEJhemAgaW4gb3VyIHRyYWl0LgoKICAgIC8vIGFuZCBub3cgd2UgY2FuIHVzZSBpdCBoZXJlOgogICAgZm4gcmV0dXJuX2Jvb2woJnNlbGYsIF86ICZTZWxmOjpCYXIsIF86ICZTZWxmOjpCYXopIC0+IGJvb2w7Cn0KYGBgCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/wOJBokGAAEAiQYAky0m2gEAAKgDAAAAqQMAAL0CDgYAAKcDAgUBBFNvbWUBAQCfDgABqAMAAL0CDgYAAqcDAAEAqAIkBgAApgMBAQCfDgACAKkCEtkBAJ8OBQEFRTAyMjAAAR8FBQABAAUAqAIkBgAApgMBAQGkDgABpwMAAMItJtwBAACtAwAAAgDCLSbcAQCfDgUBgAdBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIHJldHJpZXZlIGFuIGFzc29jaWF0ZWQgdHlwZSwgYnV0IHRoZSB0eXBlIHdhcyBhbWJpZ3VvdXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjIxCnRyYWl0IFQxIHt9CnRyYWl0IFQyIHt9Cgp0cmFpdCBGb28gewogICAgdHlwZSBBOiBUMTsKfQoKdHJhaXQgQmFyIDogRm9vIHsKICAgIHR5cGUgQTogVDI7CiAgICBmbiBkb19zb21ldGhpbmcoKSB7CiAgICAgICAgbGV0IF86IFNlbGY6OkE7CiAgICB9Cn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIGBGb29gIGRlZmluZXMgYW4gYXNzb2NpYXRlZCB0eXBlIGBBYC4gYEJhcmAgaW5oZXJpdHMgdGhhdCB0eXBlCmZyb20gYEZvb2AsIGFuZCBkZWZpbmVzIGFub3RoZXIgYXNzb2NpYXRlZCB0eXBlIG9mIHRoZSBzYW1lIG5hbWUuIEFzIGEgcmVzdWx0LAp3aGVuIHdlIGF0dGVtcHQgdG8gdXNlIGBTZWxmOjpBYCwgaXQncyBhbWJpZ3VvdXMgd2hldGhlciB3ZSBtZWFuIHRoZSBgQWAgZGVmaW5lZApieSBgRm9vYCBvciB0aGUgb25lIGRlZmluZWQgYnkgYEJhcmAuCgpUaGVyZSBhcmUgdHdvIG9wdGlvbnMgdG8gd29yayBhcm91bmQgdGhpcyBpc3N1ZS4gVGhlIGZpcnN0IGlzIHNpbXBseSB0byByZW5hbWUKb25lIG9mIHRoZSB0eXBlcy4gQWx0ZXJuYXRpdmVseSwgb25lIGNhbiBzcGVjaWZ5IHRoZSBpbnRlbmRlZCB0eXBlIHVzaW5nIHRoZQpmb2xsb3dpbmcgc3ludGF4OgoKYGBgCnRyYWl0IFQxIHt9CnRyYWl0IFQyIHt9Cgp0cmFpdCBGb28gewogICAgdHlwZSBBOiBUMTsKfQoKdHJhaXQgQmFyIDogRm9vIHsKICAgIHR5cGUgQTogVDI7CiAgICBmbiBkb19zb21ldGhpbmcoKSB7CiAgICAgICAgbGV0IF86IDxTZWxmIGFzIEJhcj46OkE7CiAgICB9Cn0KYGBgCgAP////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEAgAeABwABAIAHAMItJtwBAACsAwAAAK0DAAC9Ag4GAACrAwIFAQRTb21lAQEAnw4AAawDAAC9Ag4GAAKrAwABAKgCJAYAAKoDAQEAnw4AAgCpAhLbAQCfDgUBBUUwMjIxAAEfBQUAAQAFAKgCJAYAAKoDAQEBpA4AAasDAADxLSbeAQAAsQMAAAIA8S0m3gEAnw4FAcoKQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBjb25zdHJhaW4gYW4gYXNzb2NpYXRlZCB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyMgpwdWIgdHJhaXQgVmVoaWNsZSB7CiAgICB0eXBlIENvbG9yOwp9CgpwdWIgdHJhaXQgQm94IHsKICAgIHR5cGUgQ29sb3I7Cn0KCnB1YiB0cmFpdCBCb3hDYXIgOiBCb3ggKyBWZWhpY2xlIHt9CgpmbiBkZW50X29iamVjdDxDT0xPUj4oYzogZHluIEJveENhcjxDb2xvcj1DT0xPUj4pIHt9IC8vIEludmFsaWQgY29uc3RyYWludApgYGAKCkluIHRoaXMgZXhhbXBsZSwgYEJveENhcmAgaGFzIHR3byBzdXBlci10cmFpdHM6IGBWZWhpY2xlYCBhbmQgYEJveGAuIEJvdGggb2YKdGhlc2UgdHJhaXRzIGRlZmluZSBhbiBhc3NvY2lhdGVkIHR5cGUgYENvbG9yYC4gYEJveENhcmAgaW5oZXJpdHMgdHdvIHR5cGVzCndpdGggdGhhdCBuYW1lIGZyb20gYm90aCBzdXBlci10cmFpdHMuIEJlY2F1c2Ugb2YgdGhpcywgd2UgbmVlZCB0byB1c2UgdGhlCmZ1bGx5IHF1YWxpZmllZCBwYXRoIHN5bnRheCB0byByZWZlciB0byB0aGUgYXBwcm9wcmlhdGUgYENvbG9yYCBhc3NvY2lhdGVkCnR5cGUsIGVpdGhlciBgPEJveENhciBhcyBWZWhpY2xlPjo6Q29sb3JgIG9yIGA8Qm94Q2FyIGFzIEJveD46OkNvbG9yYCwgYnV0IHRoaXMKc3ludGF4IGlzIG5vdCBhbGxvd2VkIHRvIGJlIHVzZWQgaW4gYSBmdW5jdGlvbiBzaWduYXR1cmUuCgpJbiBvcmRlciB0byBlbmNvZGUgdGhpcyBraW5kIG9mIGNvbnN0cmFpbnQsIGEgYHdoZXJlYCBjbGF1c2UgYW5kIGEgbmV3IHR5cGUKcGFyYW1ldGVyIGFyZSBuZWVkZWQ6CgpgYGAKcHViIHRyYWl0IFZlaGljbGUgewogICAgdHlwZSBDb2xvcjsKfQoKcHViIHRyYWl0IEJveCB7CiAgICB0eXBlIENvbG9yOwp9CgpwdWIgdHJhaXQgQm94Q2FyIDogQm94ICsgVmVoaWNsZSB7fQoKLy8gSW50cm9kdWNlIGEgbmV3IGBDQVJgIHR5cGUgcGFyYW1ldGVyCmZuIGZvbzxDQVIsIENPTE9SPigKICAgIGM6IENBUiwKKSB3aGVyZQogICAgLy8gQmluZCB0aGUgdHlwZSBwYXJhbWV0ZXIgYENBUmAgdG8gdGhlIHRyYWl0IGBCb3hDYXJgCiAgICBDQVI6IEJveENhciwKICAgIC8vIEZ1cnRoZXIgcmVzdHJpY3QgYDxCb3hDYXIgYXMgVmVoaWNsZT46OkNvbG9yYCB0byBiZSB0aGUgc2FtZSBhcyB0aGUKICAgIC8vIHR5cGUgcGFyYW1ldGVyIGBDT0xPUmAKICAgIENBUjogVmVoaWNsZTxDb2xvciA9IENPTE9SPiwKICAgIC8vIFdlIGNhbiBhbHNvIHNpbXVsdGFuZW91c2x5IHJlc3RyaWN0IHRoZSBvdGhlciB0cmFpdCdzIGFzc29jaWF0ZWQgdHlwZQogICAgQ0FSOiBCb3g8Q29sb3IgPSBDT0xPUj4Ke30KYGBgCgAW////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/wfKCsoKAAEAygoA8S0m3gEAALADAAAAsQMAAL0CDgYAAK8DAgUBBFNvbWUBAQCfDgABsAMAAL0CDgYAAq8DAAEAqAIkBgAArgMBAQCfDgACAKkCEt0BAJ8OBQEFRTAyMjIAAR8FBQABAAUAqAIkBgAArgMBAQGkDgABrwMAAKAuJuABAAC1AwAAAgCgLibgAQCfDgUB7AZBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIHJldHJpZXZlIGFuIGFzc29jaWF0ZWQgdHlwZSwgYnV0IHRoZSB0eXBlIHdhcyBhbWJpZ3VvdXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjIzCnRyYWl0IE15VHJhaXQge3R5cGUgWDsgfQoKZm4gbWFpbigpIHsKICAgIGxldCBmb286IE15VHJhaXQ6Olg7Cn0KYGBgCgpUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgd2UncmUgYXR0ZW1wdGluZyB0byB0YWtlIHRoZSB0eXBlIG9mIFggZnJvbSBNeVRyYWl0LgpVbmZvcnR1bmF0ZWx5LCB0aGUgdHlwZSBvZiBYIGlzIG5vdCBkZWZpbmVkLCBiZWNhdXNlIGl0J3Mgb25seSBtYWRlIGNvbmNyZXRlIGluCmltcGxlbWVudGF0aW9ucyBvZiB0aGUgdHJhaXQuIEEgd29ya2luZyB2ZXJzaW9uIG9mIHRoaXMgY29kZSBtaWdodCBsb29rIGxpa2U6CgpgYGAKdHJhaXQgTXlUcmFpdCB7dHlwZSBYOyB9CnN0cnVjdCBNeVN0cnVjdDsKCmltcGwgTXlUcmFpdCBmb3IgTXlTdHJ1Y3QgewogICAgdHlwZSBYID0gdTMyOwp9CgpmbiBtYWluKCkgewogICAgbGV0IGZvbzogPE15U3RydWN0IGFzIE15VHJhaXQ+OjpYOwp9CmBgYAoKVGhpcyBzeW50YXggc3BlY2lmaWVzIHRoYXQgd2Ugd2FudCB0aGUgWCB0eXBlIGZyb20gTXlUcmFpdCwgYXMgbWFkZSBjb25jcmV0ZSBpbgpNeVN0cnVjdC4gVGhlIHJlYXNvbiB0aGF0IHdlIGNhbm5vdCBzaW1wbHkgdXNlIGBNeVN0cnVjdDo6WGAgaXMgdGhhdCBNeVN0cnVjdAptaWdodCBpbXBsZW1lbnQgdHdvIGRpZmZlcmVudCB0cmFpdHMgd2l0aCBpZGVudGljYWxseS1uYW1lZCBhc3NvY2lhdGVkIHR5cGVzLgpUaGlzIHN5bnRheCBhbGxvd3MgZGlzYW1iaWd1YXRpb24gYmV0d2VlbiB0aGUgdHdvLgoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8D7AbsBgABAOwGAKAuJuABAAC0AwAAALUDAAC9Ag4GAACzAwIFAQRTb21lAQEAnw4AAbQDAAC9Ag4GAAKzAwABAKgCJAYAALIDAQEAnw4AAgCpAhLfAQCfDgUBBUUwMjIzAAEfBQUAAQAFAKgCJAYAALIDAQEBpA4AAbMDAADPLibiAQAAuQMAAAIAzy4m4gEAnw4FAYgCQSB0cmFpdCBvYmplY3Qgd2FzIGRlY2xhaXJlZCB3aXRoIG5vIHRyYWl0cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjQKdHlwZSBGb28gPSBkeW4gJ3N0YXRpYyArOwpgYGAKClJ1c3QgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhpcy4KClRvIHNvbHZlIGVuc3VyZSB0aGUgdGhlIHRyYWl0IG9iamVjdCBoYXMgYXQgbGVhc3Qgb25lIHRyYWl0OgoKYGBgCnR5cGUgRm9vID0gZHluICdzdGF0aWMgKyBDb3B5OwpgYGAKAAX///////////8B////////////Af///////////wH///////////8B/wGIAogCAAEAiAIAzy4m4gEAALgDAAAAuQMAAL0CDgYAALcDAgUBBFNvbWUBAQCfDgABuAMAAL0CDgYAArcDAAEAqAIkBgAAtgMBAQCfDgACAKkCEuEBAJ8OBQEFRTAyMjQAAR8FBQABAAUAqAIkBgAAtgMBAQGkDgABtwMAAP4uJuQBAAC9AwAAAgD+LibkAQCfDgUB7wNNdWx0aXBsZSB0eXBlcyB3ZXJlIHVzZWQgYXMgYm91bmRzIGZvciBhIGNsb3N1cmUgb3IgdHJhaXQgb2JqZWN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyNQpmbiBtYWluKCkgewogICAgbGV0IF86IEJveDxkeW4gc3RkOjppbzo6UmVhZCArIHN0ZDo6aW86OldyaXRlPjsKfQpgYGAKClJ1c3QgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhpcy4KCkF1dG8gdHJhaXRzIHN1Y2ggYXMgU2VuZCBhbmQgU3luYyBhcmUgYW4gZXhjZXB0aW9uIHRvIHRoaXMgcnVsZToKSXQncyBwb3NzaWJsZSB0byBoYXZlIGJvdW5kcyBvZiBvbmUgbm9uLWJ1aWx0aW4gdHJhaXQsIHBsdXMgYW55IG51bWJlciBvZgphdXRvIHRyYWl0cy4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29tcGlsZXMgY29ycmVjdGx5OgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgXzogQm94PGR5biBzdGQ6OmlvOjpSZWFkICsgU2VuZCArIFN5bmM+Owp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8f7wPvAwABAO8DAP4uJuQBAAC8AwAAAL0DAAC9Ag4GAAC7AwIFAQRTb21lAQEAnw4AAbwDAAC9Ag4GAAK7AwABAKgCJAYAALoDAQEAnw4AAgCpAhLjAQCfDgUBBUUwMjI1AAEfBQUAAQAFAKgCJAYAALoDAQEBpA4AAbsDAACtLybmAQAAwQMAAAIArS8m5gEAnw4FAZwETW9yZSB0aGFuIG9uZSBleHBsaWNpdCBsaWZldGltZSBib3VuZCB3YXMgdXNlZCBvbiBhIHRyYWl0IG9iamVjdC4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjYKdHJhaXQgRm9vIHt9Cgp0eXBlIFQ8J2EsICdiPiA9IGR5biBGb28gKyAnYSArICdiOyAvLyBlcnJvcjogVHJhaXQgb2JqZWN0IGBhcmdgIGhhcyB0d28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGxpZmV0aW1lIGJvdW5kLCAnYSBhbmQgJ2IuCmBgYAoKSGVyZSBgVGAgaXMgYSB0cmFpdCBvYmplY3Qgd2l0aCB0d28gZXhwbGljaXQgbGlmZXRpbWUgYm91bmRzLCAnYSBhbmQgJ2IuCgpPbmx5IGEgc2luZ2xlIGV4cGxpY2l0IGxpZmV0aW1lIGJvdW5kIGlzIHBlcm1pdHRlZCBvbiB0cmFpdCBvYmplY3RzLgpUbyBmaXggdGhpcyBlcnJvciwgY29uc2lkZXIgcmVtb3Zpbmcgb25lIG9mIHRoZSBsaWZldGltZSBib3VuZHM6CgpgYGAKdHJhaXQgRm9vIHt9Cgp0eXBlIFQ8J2E+ID0gZHluIEZvbyArICdhOwpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///3+cBJwEAAEAnAQArS8m5gEAAMADAAAAwQMAAL0CDgYAAL8DAgUBBFNvbWUBAQCfDgABwAMAAL0CDgYAAr8DAAEAqAIkBgAAvgMBAQCfDgACAKkCEuUBAJ8OBQEFRTAyMjYAAR8FBQABAAUAqAIkBgAAvgMBAQGkDgABvwMAANwvJugBAADFAwAAAgDcLyboAQCfDgUBwwhUaGUgbGlmZXRpbWUgYm91bmQgZm9yIHRoaXMgb2JqZWN0IHR5cGUgY2Fubm90IGJlIGRlZHVjZWQgZnJvbSBjb250ZXh0IGFuZCBtdXN0CmJlIHNwZWNpZmllZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjgKdHJhaXQgVHJhaXQgeyB9CgpzdHJ1Y3QgVHdvQm91bmRzPCdhLCAnYiwgVDogU2l6ZWQgKyAnYSArICdiPiB7CiAgICB4OiAmJ2EgaTMyLAogICAgeTogJidiIGkzMiwKICAgIHo6IFQsCn0KCnR5cGUgRm9vPCdhLCAnYj4gPSBUd29Cb3VuZHM8J2EsICdiLCBkeW4gVHJhaXQ+OwpgYGAKCldoZW4gYSB0cmFpdCBvYmplY3QgaXMgdXNlZCBhcyBhIHR5cGUgYXJndW1lbnQgb2YgYSBnZW5lcmljIHR5cGUsIFJ1c3Qgd2lsbCB0cnkKdG8gaW5mZXIgaXRzIGxpZmV0aW1lIGlmIHVuc3BlY2lmaWVkLiBIb3dldmVyLCB0aGlzIGlzbid0IHBvc3NpYmxlIHdoZW4gdGhlCmNvbnRhaW5pbmcgdHlwZSBoYXMgbW9yZSB0aGFuIG9uZSBsaWZldGltZSBib3VuZC4KClRoZSBhYm92ZSBleGFtcGxlIGNhbiBiZSByZXNvbHZlZCBieSBlaXRoZXIgcmVkdWNpbmcgdGhlIG51bWJlciBvZiBsaWZldGltZQpib3VuZHMgdG8gb25lIG9yIGJ5IG1ha2luZyB0aGUgdHJhaXQgb2JqZWN0IGxpZmV0aW1lIGV4cGxpY2l0LCBsaWtlIHNvOgoKYGBgCnRyYWl0IFRyYWl0IHsgfQoKc3RydWN0IFR3b0JvdW5kczwnYSwgJ2IsIFQ6IFNpemVkICsgJ2EgKyAnYj4gewogICAgeDogJidhIGkzMiwKICAgIHk6ICYnYiBpMzIsCiAgICB6OiBULAp9Cgp0eXBlIEZvbzwnYSwgJ2I+ID0gVHdvQm91bmRzPCdhLCAnYiwgZHluIFRyYWl0ICsgJ2I+OwpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JGQyA1OTldIGFuZCBpdHMgYW1lbmRtZW50IFtSRkMgMTE1Nl0uCgpbUkZDIDU5OV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzA1OTktZGVmYXVsdC1vYmplY3QtYm91bmQubWQKW1JGQyAxMTU2XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMTE1Ni1hZGp1c3QtZGVmYXVsdC1vYmplY3QtYm91bmRzLm1kCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEHwwjDCAABAMMIANwvJugBAADEAwAAAMUDAAC9Ag4GAADDAwIFAQRTb21lAQEAnw4AAcQDAAC9Ag4GAALDAwABAKgCJAYAAMIDAQEAnw4AAgCpAhLnAQCfDgUBBUUwMjI4AAEfBQUAAQAFAKgCJAYAAMIDAQEBpA4AAcMDAACLMCbqAQAAyQMAAAIAizAm6gEAnw4FAc0FQW4gYXNzb2NpYXRlZCB0eXBlIGJpbmRpbmcgd2FzIGRvbmUgb3V0c2lkZSBvZiB0aGUgdHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24KYW5kIGB3aGVyZWAgY2xhdXNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyOQpwdWIgdHJhaXQgRm9vIHsKICAgIHR5cGUgQTsKICAgIGZuIGJvbygmc2VsZikgLT4gPFNlbGYgYXMgRm9vPjo6QTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBpc2l6ZSB7CiAgICB0eXBlIEEgPSB1c2l6ZTsKICAgIGZuIGJvbygmc2VsZikgLT4gdXNpemUgeyA0MiB9Cn0KCmZuIGJhejxJPih4OiAmPEkgYXMgRm9vPEE9QmFyPj46OkEpIHt9Ci8vIGVycm9yOiBhc3NvY2lhdGVkIHR5cGUgYmluZGluZ3MgYXJlIG5vdCBhbGxvd2VkIGhlcmUKYGBgCgpUbyBzb2x2ZSB0aGlzIGVycm9yLCBwbGVhc2UgbW92ZSB0aGUgdHlwZSBiaW5kaW5ncyBpbiB0aGUgdHlwZSBwYXJhbWV0ZXIKZGVjbGFyYXRpb246CgpgYGAKIyBzdHJ1Y3QgQmFyOwojIHRyYWl0IEZvbyB7IHR5cGUgQTsgfQpmbiBiYXo8STogRm9vPEE9QmFyPj4oeDogJjxJIGFzIEZvbz46OkEpIHt9IC8vIG9rIQpgYGAKCk9yIGluIHRoZSBgd2hlcmVgIGNsYXVzZToKCmBgYAojIHN0cnVjdCBCYXI7CiMgdHJhaXQgRm9vIHsgdHlwZSBBOyB9CmZuIGJhejxJPih4OiAmPEkgYXMgRm9vPjo6QSkgd2hlcmUgSTogRm9vPEE9QmFyPiB7fQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8/zQXNBQABAM0FAIswJuoBAADIAwAAAMkDAAC9Ag4GAADHAwIFAQRTb21lAQEAnw4AAcgDAAC9Ag4GAALHAwABAKgCJAYAAMYDAQEAnw4AAgCpAhLpAQCfDgUBBUUwMjI5AAEfBQUAAQAFAKgCJAYAAMYDAQEBpA4AAccDAAC6MCbsAQAAzQMAAAIAujAm7AEAnw4FAf4IVGhlIGAjW3J1c3RjX29uX3VuaW1wbGVtZW50ZWRdYCBhdHRyaWJ1dGUgbGV0cyB5b3Ugc3BlY2lmeSBhIGN1c3RvbSBlcnJvcgptZXNzYWdlIGZvciB3aGVuIGEgcGFydGljdWxhciB0cmFpdCBpc24ndCBpbXBsZW1lbnRlZCBvbiBhIHR5cGUgcGxhY2VkIGluIGEKcG9zaXRpb24gdGhhdCBuZWVkcyB0aGF0IHRyYWl0LiBGb3IgZXhhbXBsZSwgd2hlbiB0aGUgZm9sbG93aW5nIGNvZGUgaXMKY29tcGlsZWQ6CgpgYGBjb21waWxlX2ZhaWwsRTAyMzAKIyFbZmVhdHVyZShydXN0Y19hdHRycyldCgojW3J1c3RjX29uX3VuaW1wbGVtZW50ZWQgPSAiZXJyb3Igb24gYHtTZWxmfWAgd2l0aCBwYXJhbXMgYDx7QX0se0J9PmAiXSAvLyBlcnJvcgp0cmFpdCBCYWRBbm5vdGF0aW9uPEE+IHt9CmBgYAoKVGhlcmUgd2lsbCBiZSBhbiBlcnJvciBhYm91dCBgYm9vbGAgbm90IGltcGxlbWVudGluZyBgSW5kZXg8dTg+YCwgZm9sbG93ZWQgYnkgYQpub3RlIHNheWluZyAidGhlIHR5cGUgYGJvb2xgIGNhbm5vdCBiZSBpbmRleGVkIGJ5IGB1OGAiLgoKQXMgeW91IGNhbiBzZWUsIHlvdSBjYW4gc3BlY2lmeSB0eXBlIHBhcmFtZXRlcnMgaW4gY3VybHkgYnJhY2VzIGZvcgpzdWJzdGl0dXRpb24gd2l0aCB0aGUgYWN0dWFsIHR5cGVzICh1c2luZyB0aGUgcmVndWxhciBmb3JtYXQgc3RyaW5nIHN5bnRheCkgaW4KYSBnaXZlbiBzaXR1YXRpb24uIEZ1cnRoZXJtb3JlLCBge1NlbGZ9YCB3aWxsIHN1YnN0aXR1dGUgdG8gdGhlIHR5cGUgKGluIHRoaXMKY2FzZSwgYGJvb2xgKSB0aGF0IHdlIHRyaWVkIHRvIHVzZS4KClRoaXMgZXJyb3IgYXBwZWFycyB3aGVuIHRoZSBjdXJseSBicmFjZXMgY29udGFpbiBhbiBpZGVudGlmaWVyIHdoaWNoIGRvZXNuJ3QKbWF0Y2ggd2l0aCBhbnkgb2YgdGhlIHR5cGUgcGFyYW1ldGVycyBvciB0aGUgc3RyaW5nIGBTZWxmYC4gVGhpcyBtaWdodCBoYXBwZW4KaWYgeW91IG1pc3NwZWxsZWQgYSB0eXBlIHBhcmFtZXRlciwgb3IgaWYgeW91IGludGVuZGVkIHRvIHVzZSBsaXRlcmFsIGN1cmx5CmJyYWNlcy4gSWYgaXQgaXMgdGhlIGxhdHRlciwgZXNjYXBlIHRoZSBjdXJseSBicmFjZXMgd2l0aCBhIHNlY29uZCBjdXJseSBicmFjZQpvZiB0aGUgc2FtZSB0eXBlOyBlLmcuLCBhIGxpdGVyYWwgYHtgIGlzIGB7e2AuCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////z/+CP4IAAEA/ggAujAm7AEAAMwDAAAAzQMAAL0CDgYAAMsDAgUBBFNvbWUBAQCfDgABzAMAAL0CDgYAAssDAAEAqAIkBgAAygMBAQCfDgACAKkCEusBAJ8OBQEFRTAyMzAAAR8FBQABAAUAqAIkBgAAygMBAQGkDgABywMAAOkwJu4BAADRAwAAAgDpMCbuAQCfDgUB3gdUaGUgYCNbcnVzdGNfb25fdW5pbXBsZW1lbnRlZF1gIGF0dHJpYnV0ZSBsZXRzIHlvdSBzcGVjaWZ5IGEgY3VzdG9tIGVycm9yCm1lc3NhZ2UgZm9yIHdoZW4gYSBwYXJ0aWN1bGFyIHRyYWl0IGlzbid0IGltcGxlbWVudGVkIG9uIGEgdHlwZSBwbGFjZWQgaW4gYQpwb3NpdGlvbiB0aGF0IG5lZWRzIHRoYXQgdHJhaXQuIEZvciBleGFtcGxlLCB3aGVuIHRoZSBmb2xsb3dpbmcgY29kZSBpcwpjb21waWxlZDoKCmBgYGNvbXBpbGVfZmFpbCxFMDIzMQojIVtmZWF0dXJlKHJ1c3RjX2F0dHJzKV0KCiNbcnVzdGNfb25fdW5pbXBsZW1lbnRlZCA9ICJlcnJvciBvbiBge1NlbGZ9YCB3aXRoIHBhcmFtcyBgPHtBfSx7fT5gIl0gLy8gZXJyb3IhCnRyYWl0IEJhZEFubm90YXRpb248QT4ge30KYGBgCgp0aGVyZSB3aWxsIGJlIGFuIGVycm9yIGFib3V0IGBib29sYCBub3QgaW1wbGVtZW50aW5nIGBJbmRleDx1OD5gLCBmb2xsb3dlZCBieSBhCm5vdGUgc2F5aW5nICJ0aGUgdHlwZSBgYm9vbGAgY2Fubm90IGJlIGluZGV4ZWQgYnkgYHU4YCIuCgpBcyB5b3UgY2FuIHNlZSwgeW91IGNhbiBzcGVjaWZ5IHR5cGUgcGFyYW1ldGVycyBpbiBjdXJseSBicmFjZXMgZm9yCnN1YnN0aXR1dGlvbiB3aXRoIHRoZSBhY3R1YWwgdHlwZXMgKHVzaW5nIHRoZSByZWd1bGFyIGZvcm1hdCBzdHJpbmcgc3ludGF4KSBpbgphIGdpdmVuIHNpdHVhdGlvbi4gRnVydGhlcm1vcmUsIGB7U2VsZn1gIHdpbGwgc3Vic3RpdHV0ZSB0byB0aGUgdHlwZSAoaW4gdGhpcwpjYXNlLCBgYm9vbGApIHRoYXQgd2UgdHJpZWQgdG8gdXNlLgoKVGhpcyBlcnJvciBhcHBlYXJzIHdoZW4gdGhlIGN1cmx5IGJyYWNlcyBkbyBub3QgY29udGFpbiBhbiBpZGVudGlmaWVyLiBQbGVhc2UKYWRkIG9uZSBvZiB0aGUgc2FtZSBuYW1lIGFzIGEgdHlwZSBwYXJhbWV0ZXIuIElmIHlvdSBpbnRlbmRlZCB0byB1c2UgbGl0ZXJhbApicmFjZXMsIHVzZSBge3tgIGFuZCBgfX1gIHRvIGVzY2FwZSB0aGVtLgoAEP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8D3gfeBwABAN4HAOkwJu4BAADQAwAAANEDAAC9Ag4GAADPAwIFAQRTb21lAQEAnw4AAdADAAC9Ag4GAALPAwABAKgCJAYAAM4DAQEAnw4AAgCpAhLtAQCfDgUBBUUwMjMxAAEfBQUAAQAFAKgCJAYAAM4DAQEBpA4AAc8DAACYMSbwAQAA1QMAAAIAmDEm8AEAnw4FAZIFVGhlIGAjW3J1c3RjX29uX3VuaW1wbGVtZW50ZWRdYCBhdHRyaWJ1dGUgbGV0cyB5b3Ugc3BlY2lmeSBhIGN1c3RvbSBlcnJvcgptZXNzYWdlIGZvciB3aGVuIGEgcGFydGljdWxhciB0cmFpdCBpc24ndCBpbXBsZW1lbnRlZCBvbiBhIHR5cGUgcGxhY2VkIGluIGEKcG9zaXRpb24gdGhhdCBuZWVkcyB0aGF0IHRyYWl0LiBGb3IgZXhhbXBsZSwgd2hlbiB0aGUgZm9sbG93aW5nIGNvZGUgaXMKY29tcGlsZWQ6CgpgYGBjb21waWxlX2ZhaWwsRTAyMzIKIyFbZmVhdHVyZShydXN0Y19hdHRycyldCgojW3J1c3RjX29uX3VuaW1wbGVtZW50ZWQobG9yZW09IiIpXSAvLyBlcnJvciEKdHJhaXQgQmFkQW5ub3RhdGlvbiB7fQpgYGAKCnRoZXJlIHdpbGwgYmUgYW4gZXJyb3IgYWJvdXQgYGJvb2xgIG5vdCBpbXBsZW1lbnRpbmcgYEluZGV4PHU4PmAsIGZvbGxvd2VkIGJ5IGEKbm90ZSBzYXlpbmcgInRoZSB0eXBlIGBib29sYCBjYW5ub3QgYmUgaW5kZXhlZCBieSBgdThgIi4KCkZvciB0aGlzIHRvIHdvcmssIHNvbWUgbm90ZSBtdXN0IGJlIHNwZWNpZmllZC4gQW4gZW1wdHkgYXR0cmlidXRlIHdpbGwgbm90IGRvCmFueXRoaW5nLCBwbGVhc2UgcmVtb3ZlIHRoZSBhdHRyaWJ1dGUgb3IgYWRkIHNvbWUgaGVscGZ1bCBub3RlIGZvciB1c2VycyBvZiB0aGUKdHJhaXQuCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//D5IFkgUAAQCSBQCYMSbwAQAA1AMAAADVAwAAvQIOBgAA0wMCBQEEU29tZQEBAJ8OAAHUAwAAvQIOBgAC0wMAAQCoAiQGAADSAwEBAJ8OAAIAqQIS7wEAnw4FAQVFMDIzMgABHwUFAAEABQCoAiQGAADSAwEBAaQOAAHTAwAAxzEm8gEAANkDAAACAMcxJvIBAJ8OBQHjAiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgbm90IGVub3VnaCB0eXBlIHBhcmFtZXRlcnMgd2VyZSBmb3VuZCBpbiBhIHR5cGUgb3IKdHJhaXQuCgpGb3IgZXhhbXBsZSwgdGhlIGBGb29gIHN0cnVjdCBiZWxvdyBpcyBkZWZpbmVkIHRvIGJlIGdlbmVyaWMgaW4gYFRgLCBidXQgdGhlCnR5cGUgcGFyYW1ldGVyIGlzIG1pc3NpbmcgaW4gdGhlIGRlZmluaXRpb24gb2YgYEJhcmA6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDcKc3RydWN0IEZvbzxUPiB7IHg6IFQgfQoKc3RydWN0IEJhciB7IHg6IEZvbyB9CmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B/////3/jAuMCAAEA4wIAxzEm8gEAANgDAAAA2QMAAL0CDgYAANcDAgUBBFNvbWUBAQCfDgAB2AMAAL0CDgYAAtcDAAEAqAIkBgAA1gMBAQCfDgACAKkCEvEBAJ8OBQEFRTAy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LyBvayEKfQoKbW9kIGZvbyB7CiAgICBwdWIgc3RydWN0IGJhejsKfQoKbW9kIGJhciB7CiAgICBwdWIgbW9kIGJheiB7fQp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////x+oBagFAAEAqAUA1DIm+AEAAOQDAAAA5QMAAL0CDgYAAOMDAgUBBFNvbWUBAQCfDgAB5AMAAL0CDgYAAuMDAAEAqAIkBgAA4gMBAQCfDgACAKkCEvcBAJ8OBQEFRTAyNTIAAR8FBQABAAUAqAIkBgAA4gMBAQGkDgAB4wMAAIMzJvoBAADpAwAAAgCDMyb6AQCfDgUBmwNBdHRlbXB0IHdhcyBtYWRlIHRvIGltcG9ydCBhbiB1bmltcG9ydGFibGUgdmFsdWUuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRyeWluZwp0byBpbXBvcnQgYSBtZXRob2QgZnJvbSBhIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI1Mwptb2QgZm9vIHsKICAgIHB1YiB0cmFpdCBNeVRyYWl0IHsKICAgICAgICBmbiBkb19zb21ldGhpbmcoKTsKICAgIH0KfQoKdXNlIGZvbzo6TXlUcmFpdDo6ZG9fc29tZXRoaW5nOwovLyBlcnJvcjogYGRvX3NvbWV0aGluZ2AgaXMgbm90IGRpcmVjdGx5IGltcG9ydGFibGUKCmZuIG1haW4oKSB7fQpgYGAKCkl0J3MgaW52YWxpZCB0byBkaXJlY3RseSBpbXBvcnQgbWV0aG9kcyBiZWxvbmdpbmcgdG8gYSB0cmFpdCBvciBjb25jcmV0ZSB0eXBlLgoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///z+bA5sDAAEAmwMAgzMm+gEAAOgDAAAA6QMAAL0CDgYAAOcDAgUBBFNvbWUBAQCfDgAB6AMAAL0CDgYAAucDAAEAqAIkBgAA5gMBAQCfDgACAKkCEvkBAJ8OBQEFRTAyNTMAAR8FBQABAAUAqAIkBgAA5gMBAQGkDgAB5wMAALIzJvwBAADtAwAAAgCyMyb8AQCfDgUB2ARBdHRlbXB0IHdhcyBtYWRlIHRvIGltcG9ydCBhbiBpdGVtIHdoZXJlYXMgYW4gZXh0ZXJuIGNyYXRlIHdpdGggdGhpcyBuYW1lIGhhcwphbHJlYWR5IGJlZW4gaW1wb3J0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjU0CmV4dGVybiBjcmF0ZSBjb3JlOwoKbW9kIGZvbyB7CiAgICBwdWIgdHJhaXQgY29yZSB7CiAgICAgICAgZm4gZG9fc29tZXRoaW5nKCk7CiAgICB9Cn0KCnVzZSBmb286OmNvcmU7ICAvLyBlcnJvcjogYW4gZXh0ZXJuIGNyYXRlIG5hbWVkIGBjb3JlYCBoYXMgYWxyZWFkeQogICAgICAgICAgICAgICAgLy8gICAgICAgIGJlZW4gaW1wb3J0ZWQgaW4gdGhpcyBtb2R1bGUKCmZuIG1haW4oKSB7fQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCB5b3UgaGF2ZSB0byByZW5hbWUgYXQgbGVhc3Qgb25lIG9mIHRoZSB0d28gaW1wb3J0cy4KRXhhbXBsZToKCmBgYApleHRlcm4gY3JhdGUgY29yZSBhcyBsaWJjb3JlOyAvLyBvayEKCm1vZCBmb28gewogICAgcHViIHRyYWl0IGNvcmUgewogICAgICAgIGZuIGRvX3NvbWV0aGluZygpOwogICAgfQp9Cgp1c2UgZm9vOjpjb3JlOwoKZm4gbWFpbigpIHt9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wfYBNgEAAEA2AQAsjMm/AEAAOwDAAAA7QMAAL0CDgYAAOsDAgUBBFNvbWUBAQCfDgAB7AMAAL0CDgYAAusDAAEAqAIkBgAA6gMBAQCfDgACAKkCEvsBAJ8OBQEFRTAyNTQAAR8FBQABAAUAqAIkBgAA6gMBAQGkDgAB6wMAAOEzJv4BAADxAwAAAgDhMyb+AQCfDgUB3QRZb3UgY2FuJ3QgaW1wb3J0IGEgdmFsdWUgd2hvc2UgbmFtZSBpcyB0aGUgc2FtZSBhcyBhbm90aGVyIHZhbHVlIGRlZmluZWQgaW4gdGhlCm1vZHVsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNTUKdXNlIGJhcjo6Zm9vOyAvLyBlcnJvcjogYW4gaXRlbSBuYW1lZCBgZm9vYCBpcyBhbHJlYWR5IGluIHNjb3BlCgpmbiBmb28oKSB7fQoKbW9kIGJhciB7CiAgICAgcHViIGZuIGZvbygpIHt9Cn0KCmZuIG1haW4oKSB7fQpgYGAKCllvdSBjYW4gdXNlIGFsaWFzZXMgaW4gb3JkZXIgdG8gZml4IHRoaXMgZXJyb3IuIEV4YW1wbGU6CgpgYGAKdXNlIGJhcjo6Zm9vIGFzIGJhcl9mb287IC8vIG9rIQoKZm4gZm9vKCkge30KCm1vZCBiYXIgewogICAgIHB1YiBmbiBmb28oKSB7fQp9CgpmbiBtYWluKCkge30KYGBgCgpPciB5b3UgY2FuIHJlZmVyZW5jZSB0aGUgaXRlbSB3aXRoIGl0cyBwYXJlbnQ6CgpgYGAKZm4gZm9vKCkge30KCm1vZCBiYXIgewogICAgIHB1YiBmbiBmb28oKSB7fQp9CgpmbiBtYWluKCkgewogICAgYmFyOjpmb28oKTsgLy8gd2UgZ2V0IHRoZSBpdGVtIGJ5IHJlZmVycmluZyB0byBpdHMgcGFyZW50Cn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wHdBN0EAAEA3QQA4TMm/gEAAPADAAAA8QMAAL0CDgYAAO8DAgUBBFNvbWUBAQCfDgAB8AMAAL0CDgYAAu8DAAEAqAIkBgAA7gMBAQCfDgACAKkCEv0BAJ8OBQEFRTAyNTUAAR8FBQABAAUAqAIkBgAA7gMBAQGkDgAB7wMAAJA0JoACAAD1AwAAAgCQNCaAAgCfDgUB1AIjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpZb3UgY2FuJ3QgaW1wb3J0IGEgdHlwZSBvciBtb2R1bGUgd2hlbiB0aGUgbmFtZSBvZiB0aGUgaXRlbSBiZWluZyBpbXBvcnRlZCBpcwp0aGUgc2FtZSBhcyBhbm90aGVyIHR5cGUgb3Igc3VibW9kdWxlIGRlZmluZWQgaW4gdGhlIG1vZHVsZS4KCkFuIGV4YW1wbGUgb2YgdGhpcyBlcnJvcjoKCmBgYGNvbXBpbGVfZmFpbAp1c2UgZm9vOjpCYXI7IC8vIGVycm9yCgp0eXBlIEJhciA9IHUzMjsKCm1vZCBmb28gewogICAgcHViIG1vZCBCYXIgeyB9Cn0KCmZuIG1haW4oKSB7fQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af//P9QC1AIAAQDUAgCQNCaAAgAA9AMAAAD1AwAAvQIOBgAA8wMCBQEEU29tZQEBAJ8OAAH0AwAAvQIOBgAC8wMAAQCoAiQGAADyAwEBAJ8OAAIAqQIS/wEAnw4FAQVFMDI1NgABHwUFAAEABQCoAiQGAADyAwEBAaQOAAHzAwAAvzQmggIAAPkDAAACAL80JoICAJ8OBQHDA1RoZSBuYW1lIGNob3NlbiBmb3IgYW4gZXh0ZXJuYWwgY3JhdGUgY29uZmxpY3RzIHdpdGggYW5vdGhlciBleHRlcm5hbCBjcmF0ZQp0aGF0IGhhcyBiZWVuIGltcG9ydGVkIGludG8gdGhlIGN1cnJlbnQgbW9kdWxlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI1OQpleHRlcm4gY3JhdGUgY29yZTsKZXh0ZXJuIGNyYXRlIHN0ZCBhcyBjb3JlOwoKZm4gbWFpbigpIHt9CmBgYAoKVGhlIHNvbHV0aW9uIGlzIHRvIGNob29zZSBhIGRpZmZlcmVudCBuYW1lIHRoYXQgZG9lc24ndCBjb25mbGljdCB3aXRoIGFueQpleHRlcm5hbCBjcmF0ZSBpbXBvcnRlZCBpbnRvIHRoZSBjdXJyZW50IG1vZHVsZS4KCkNvcnJlY3QgZXhhbXBsZToKCmBgYApleHRlcm4gY3JhdGUgY29yZTsKZXh0ZXJuIGNyYXRlIHN0ZCBhcyBvdGhlcl9uYW1lOwoKZm4gbWFpbigpIHt9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEHwwPDAwABAMMDAL80JoICAAD4AwAAAPkDAAC9Ag4GAAD3AwIFAQRTb21lAQEAnw4AAfgDAAC9Ag4GAAL3AwABAKgCJAYAAPYDAQEAnw4AAgCpAhKBAgCfDgUBBUUwMjU5AAEfBQUAAQAFAKgCJAYAAPYDAQEBpA4AAfcDAADuNCaEAgAA/QMAAAIA7jQmhAIAnw4FAYoFVGhlIG5hbWUgZm9yIGFuIGl0ZW0gZGVjbGFyYXRpb24gY29uZmxpY3RzIHdpdGggYW4gZXh0ZXJuYWwgY3JhdGUncyBuYW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI2MApleHRlcm4gY3JhdGUgY29yZTsKCnN0cnVjdCBjb3JlOwoKZm4gbWFpbigpIHt9CmBgYAoKVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBzb2x1dGlvbnM6CgpTb2x1dGlvbiAjMTogUmVuYW1lIHRoZSBpdGVtLgoKYGBgCmV4dGVybiBjcmF0ZSBjb3JlOwoKc3RydWN0IHh5ejsKYGBgCgpTb2x1dGlvbiAjMjogSW1wb3J0IHRoZSBjcmF0ZSB3aXRoIGEgZGlmZmVyZW50IG5hbWUuCgpgYGAKZXh0ZXJuIGNyYXRlIGNvcmUgYXMgeHl6OwoKc3RydWN0IGFiYzsKYGBgCgpTZWUgdGhlIFtEZWNsYXJhdGlvbiBTdGF0ZW1lbnRzXVtkZWNsYXJhdGlvbi1zdGF0ZW1lbnRzXSBzZWN0aW9uIG9mIHRoZQpyZWZlcmVuY2UgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBjb25zdGl0dXRlcyBhbiBpdGVtIGRlY2xhcmF0aW9uCmFuZCB3aGF0IGRvZXMgbm90LgoKW2RlY2xhcmF0aW9uLXN0YXRlbWVudHNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9zdGF0ZW1lbnRzLmh0bWwjZGVjbGFyYXRpb24tc3RhdGVtZW50cwoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/B4oFigUAAQCKBQDuNCaEAgAA/AMAAAD9AwAAvQIOBgAA+wMCBQEEU29tZQEBAJ8OAAH8AwAAvQIOBgAC+wMAAQCoAiQGAAD6AwEBAJ8OAAIAqQISgwIAnw4FAQVFMDI2MAABHwUFAAEABQCoAiQGAAD6AwEBAaQOAAH7AwAAnTUmhgIAAIEEAAACAJ01JoYCAJ8OBQHlBkFuIHVuZGVjbGFyZWQgbGlmZXRpbWUgd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjYxCi8vIGVycm9yLCB1c2Ugb2YgdW5kZWNsYXJlZCBsaWZldGltZSBuYW1lIGAnYWAKZm4gZm9vKHg6ICYnYSBzdHIpIHsgfQoKc3RydWN0IEZvbyB7CiAgICAvLyBlcnJvciwgdXNlIG9mIHVuZGVjbGFyZWQgbGlmZXRpbWUgbmFtZSBgJ2FgCiAgICB4OiAmJ2Egc3RyLAp9CmBgYAoKVGhlc2UgY2FuIGJlIGZpeGVkIGJ5IGRlY2xhcmluZyBsaWZldGltZSBwYXJhbWV0ZXJzOgoKYGBgCnN0cnVjdCBGb288J2E+IHsKICAgIHg6ICYnYSBzdHIsCn0KCmZuIGZvbzwnYT4oeDogJidhIHN0cikge30KYGBgCgpJbXBsIGJsb2NrcyBkZWNsYXJlIGxpZmV0aW1lIHBhcmFtZXRlcnMgc2VwYXJhdGVseS4gWW91IG5lZWQgdG8gYWRkIGxpZmV0aW1lCnBhcmFtZXRlcnMgdG8gYW4gaW1wbCBibG9jayBpZiB5b3UncmUgaW1wbGVtZW50aW5nIGEgdHlwZSB0aGF0IGhhcyBhIGxpZmV0aW1lCnBhcmFtZXRlciBvZiBpdHMgb3duLgpGb3IgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI2MQpzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiAmJ2Egc3RyLAp9CgovLyBlcnJvciwgIHVzZSBvZiB1bmRlY2xhcmVkIGxpZmV0aW1lIG5hbWUgYCdhYAppbXBsIEZvbzwnYT4gewogICAgZm4gZm9vPCdhPih4OiAmJ2Egc3RyKSB7fQp9CmBgYAoKVGhpcyBpcyBmaXhlZCBieSBkZWNsYXJpbmcgdGhlIGltcGwgYmxvY2sgbGlrZSB0aGlzOgoKYGBgCnN0cnVjdCBGb288J2E+IHsKICAgIHg6ICYnYSBzdHIsCn0KCi8vIGNvcnJlY3QKaW1wbDwnYT4gRm9vPCdhPiB7CiAgICBmbiBmb28oeDogJidhIHN0cikge30KfQpgYGAKAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8D5QblBgABAOUGAJ01JoYCAACABAAAAIEEAAC9Ag4GAAD/AwIFAQRTb21lAQEAnw4AAYAEAAC9Ag4GAAL/AwABAKgCJAYAAP4DAQEAnw4AAgCpAhKFAgCfDgUBBUUwMjYxAAEfBQUAAQAFAKgCJAYAAP4DAQEBpA4AAf8DAADMNSaIAgAAhQQAAAIAzDUmiAIAnw4FAY4DQW4gaW52YWxpZCBuYW1lIHdhcyB1c2VkIGZvciBhIGxpZmV0aW1lIHBhcmFtZXRlci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjIKLy8gZXJyb3IsIGludmFsaWQgbGlmZXRpbWUgcGFyYW1ldGVyIG5hbWUgYCdzdGF0aWNgCmZuIGZvbzwnc3RhdGljPih4OiAmJ3N0YXRpYyBzdHIpIHsgfQpgYGAKCkRlY2xhcmluZyBjZXJ0YWluIGxpZmV0aW1lIG5hbWVzIGluIHBhcmFtZXRlcnMgaXMgZGlzYWxsb3dlZC4gRm9yIGV4YW1wbGUsCmJlY2F1c2UgdGhlIGAnc3RhdGljYCBsaWZldGltZSBpcyBhIHNwZWNpYWwgYnVpbHQtaW4gbGlmZXRpbWUgbmFtZSBkZW5vdGluZwp0aGUgbGlmZXRpbWUgb2YgdGhlIGVudGlyZSBwcm9ncmFtLCB0aGlzIGlzIGFuIGVycm9yOgoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af9/jgOOAwABAI4DAMw1JogCAACEBAAAAIUEAAC9Ag4GAACDBAIFAQRTb21lAQEAnw4AAYQEAAC9Ag4GAAKDBAABAKgCJAYAAIIEAQEAnw4AAgCpAhKHAgCfDgUBBUUwMjYyAAEfBQUAAQAFAKgCJAYAAIIEAQEBpA4AAYMEAAD7NSaKAgAAiQQAAAIA+zUmigIAnw4FAYUDQSBsaWZldGltZSB3YXMgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHNhbWUgc2NvcGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjYzCmZuIGZvbzwnYSwgJ2IsICdhPih4OiAmJ2Egc3RyLCB5OiAmJ2Igc3RyLCB6OiAmJ2Egc3RyKSB7IC8vIGVycm9yIQp9CmBgYAoKVHdvIGxpZmV0aW1lcyBjYW5ub3QgaGF2ZSB0aGUgc2FtZSBuYW1lLiBUbyBmaXggdGhpcyBleGFtcGxlLCBjaGFuZ2UKdGhlIHNlY29uZCBgJ2FgIGxpZmV0aW1lIGludG8gc29tZXRoaW5nIGVsc2UgKGAnY2AgZm9yIGV4YW1wbGUpOgoKYGBgCmZuIGZvbzwnYSwgJ2IsICdjPih4OiAmJ2Egc3RyLCB5OiAmJ2Igc3RyLCB6OiAmJ2Mgc3RyKSB7IC8vIG9rIQp9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////AR+FA4UDAAEAhQMA+zUmigIAAIgEAAAAiQQAAL0CDgYAAIcEAgUBBFNvbWUBAQCfDgABiAQAAL0CDgYAAocEAAEAqAIkBgAAhgQBAQCfDgACAKkCEokCAJ8OBQEFRTAyNjMAAR8FBQABAAUAqAIkBgAAhgQBAQGkDgABhwQAAKo2JowCAACNBAAAAgCqNiaMAgCfDgUBqgNBbiB1bmtub3duIGV4dGVybmFsIGxhbmcgaXRlbSB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjQKIyFbZmVhdHVyZShsYW5nX2l0ZW1zKV0KCmV4dGVybiAiQyIgewogICAgI1tsYW5nID0gImNha2UiXSAvLyBlcnJvcjogdW5rbm93biBleHRlcm5hbCBsYW5nIGl0ZW06IGBjYWtlYAogICAgZm4gY2FrZSgpOwp9CmBgYAoKQSBsaXN0IG9mIGF2YWlsYWJsZSBleHRlcm5hbCBsYW5nIGl0ZW1zIGlzIGF2YWlsYWJsZSBpbgpgc3JjL2xpYnJ1c3RjX21pZGRsZS9taWRkbGUvd2Vha19sYW5nX2l0ZW1zLnJzYC4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGxhbmdfaXRlbXMpXQoKZXh0ZXJuICJDIiB7CiAgICAjW2xhbmcgPSAicGFuaWNfaW1wbCJdIC8vIG9rIQogICAgZm4gY2FrZSgpOwp9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////f6oDqgMAAQCqAwCqNiaMAgAAjAQAAACNBAAAvQIOBgAAiwQCBQEEU29tZQEBAJ8OAAGMBAAAvQIOBgACiwQAAQCoAiQGAACKBAEBAJ8OAAIAqQISiwIAnw4FAQVFMDI2NAABHwUFAAEABQCoAiQGAACKBAEBAaQOAAGLBAAA2TYmjgIAAJEEAAACANk2Jo4CAJ8OBQHkA0EgbG9vcCBrZXl3b3JkIChgYnJlYWtgIG9yIGBjb250aW51ZWApIHdhcyB1c2VkIGluc2lkZSBhIGNsb3N1cmUgYnV0IG91dHNpZGUgb2YKYW55IGxvb3AuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjY3CmxldCB3ID0gfHwgeyBicmVhazsgfTsgLy8gZXJyb3I6IGBicmVha2AgaW5zaWRlIG9mIGEgY2xvc3VyZQpgYGAKCmBicmVha2AgYW5kIGBjb250aW51ZWAga2V5d29yZHMgY2FuIGJlIHVzZWQgYXMgbm9ybWFsIGluc2lkZSBjbG9zdXJlcyBhcyBsb25nIGFzCnRoZXkgYXJlIGFsc28gY29udGFpbmVkIHdpdGhpbiBhIGxvb3AuIFRvIGhhbHQgdGhlIGV4ZWN1dGlvbiBvZiBhIGNsb3N1cmUgeW91CnNob3VsZCBpbnN0ZWFkIHVzZSBhIHJldHVybiBzdGF0ZW1lbnQuIEV4YW1wbGU6CgpgYGAKbGV0IHcgPSB8fCB7CiAgICBmb3IgXyBpbiAwLi4xMCB7CiAgICAgICAgYnJlYWs7CiAgICB9Cn07Cgp3KCk7CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wHkA+QDAAEA5AMA2TYmjgIAAJAEAAAAkQQAAL0CDgYAAI8EAgUBBFNvbWUBAQCfDgABkAQAAL0CDgYAAo8EAAEAqAIkBgAAjgQBAQCfDgACAKkCEo0CAJ8OBQEFRTAyNjcAAR8FBQABAAUAqAIkBgAAjgQBAQGkDgABjwQAAIg3JpACAACVBAAAAgCINyaQAgCfDgUBpwNBIGxvb3Aga2V5d29yZCAoYGJyZWFrYCBvciBgY29udGludWVgKSB3YXMgdXNlZCBvdXRzaWRlIG9mIGEgbG9vcC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjgKZm4gc29tZV9mdW5jKCkgewogICAgYnJlYWs7IC8vIGVycm9yOiBgYnJlYWtgIG91dHNpZGUgb2YgYSBsb29wCn0KYGBgCgpXaXRob3V0IGEgbG9vcCB0byBicmVhayBvdXQgb2Ygb3IgY29udGludWUgaW4sIG5vIHNlbnNpYmxlIGFjdGlvbiBjYW4gYmUgdGFrZW4uClBsZWFzZSB2ZXJpZnkgdGhhdCB5b3UgYXJlIHVzaW5nIGBicmVha2AgYW5kIGBjb250aW51ZWAgb25seSBpbiBsb29wcy4gRXhhbXBsZToKCmBgYApmbiBzb21lX2Z1bmMoKSB7CiAgICBmb3IgXyBpbiAwLi4xMCB7CiAgICAgICAgYnJlYWs7IC8vIG9rIQogICAgfQp9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////D6cDpwMAAQCnAwCINyaQAgAAlAQAAACVBAAAvQIOBgAAkwQCBQEEU29tZQEBAJ8OAAGUBAAAvQIOBgACkwQAAQCoAiQGAACSBAEBAJ8OAAIAqQISjwIAnw4FAQVFMDI2OAABHwUFAAEABQCoAiQGAACSBAEBAaQOAAGTBAAAtzcmkgIAAJkEAAACALc3JpICAJ8OBQGcD0EgdHlwZSBtaXNtYXRjaGVkIGFuIGFzc29jaWF0ZWQgdHlwZSBvZiBhIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI3MQp0cmFpdCBUcmFpdCB7IHR5cGUgQXNzb2NpYXRlZFR5cGU7IH0KCmZuIGZvbzxUPih0OiBUKSB3aGVyZSBUOiBUcmFpdDxBc3NvY2lhdGVkVHlwZT11MzI+IHsKLy8gICAgICAgICAgICAgICAgICAgIH5+fn5+fn5+IH5+fn5+fn5+fn5+fn5+fn5+fgovLyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Ci8vICAgICAgICAgVGhpcyBzYXlzIGBmb29gIGNhbiAgICAgICAgIHwKLy8gICAgICAgICAgIG9ubHkgYmUgdXNlZCB3aXRoICAgICAgICAgfAovLyAgICAgICAgICAgICAgc29tZSB0eXBlIHRoYXQgICAgICAgICB8Ci8vICAgICAgICAgaW1wbGVtZW50cyBgVHJhaXRgLiAgICAgICAgIHwKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzYXlzIG5vdCBvbmx5IG11c3QKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBUYCBiZSBhbiBpbXBsIG9mIGBUcmFpdGAKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBhbHNvIHRoYXQgdGhlIGltcGwKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYXNzaWduIHRoZSB0eXBlIGB1MzJgCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgYXNzb2NpYXRlZCB0eXBlLgogICAgcHJpbnRsbiEoImluIGZvbyIpOwp9CgppbXBsIFRyYWl0IGZvciBpOCB7IHR5cGUgQXNzb2NpYXRlZFR5cGUgPSAmJ3N0YXRpYyBzdHI7IH0KLy9+fn5+fn5+fn5+fn5+fn4gICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgovLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLy8gYGk4YCBkb2VzIGhhdmUgICAgICAgICAgICAgICAgICAgICB8Ci8vIGltcGxlbWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgfAovLyBvZiBgVHJhaXRgLi4uICAgICAgICAgICAgICAgICAgICAgIHwKLy8gICAgICAgICAgICAgICAgICAgICAuLi4gYnV0IGl0IGlzIGFuIGltcGxlbWVudGF0aW9uCi8vICAgICAgICAgICAgICAgICAgICAgdGhhdCBhc3NpZ25zIGAmJ3N0YXRpYyBzdHJgIHRvCi8vICAgICAgICAgICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgdHlwZS4KCmZvbygzX2k4KTsKLy8gSGVyZSwgd2UgaW52b2tlIGBmb29gIHdpdGggYW4gYGk4YCwgd2hpY2ggZG9lcyBub3Qgc2F0aXNmeQovLyB0aGUgY29uc3RyYWludCBgPGk4IGFzIFRyYWl0Pjo6QXNzb2NpYXRlZFR5cGU9dTMyYCwgYW5kCi8vIHRoZXJlZm9yZSB0aGUgdHlwZS1jaGVja2VyIGNvbXBsYWlucyB3aXRoIHRoaXMgZXJyb3IgY29kZS4KYGBgCgpUaGUgaXNzdWUgY2FuIGJlIHJlc29sdmVkIGJ5IGNoYW5naW5nIHRoZSBhc3NvY2lhdGVkIHR5cGU6CjEpIGluIHRoZSBgZm9vYCBpbXBsZW1lbnRhdGlvbjoKYGBgCnRyYWl0IFRyYWl0IHsgdHlwZSBBc3NvY2lhdGVkVHlwZTsgfQoKZm4gZm9vPFQ+KHQ6IFQpIHdoZXJlIFQ6IFRyYWl0PEFzc29jaWF0ZWRUeXBlID0gJidzdGF0aWMgc3RyPiB7CiAgICBwcmludGxuISgiaW4gZm9vIik7Cn0KCmltcGwgVHJhaXQgZm9yIGk4IHsgdHlwZSBBc3NvY2lhdGVkVHlwZSA9ICYnc3RhdGljIHN0cjsgfQoKZm9vKDNfaTgpOwpgYGAKCjIpIGluIHRoZSBgVHJhaXRgIGltcGxlbWVudGF0aW9uIGZvciBgaThgOgpgYGAKdHJhaXQgVHJhaXQgeyB0eXBlIEFzc29jaWF0ZWRUeXBlOyB9CgpmbiBmb288VD4odDogVCkgd2hlcmUgVDogVHJhaXQ8QXNzb2NpYXRlZFR5cGUgPSB1MzI+IHsKICAgIHByaW50bG4hKCJpbiBmb28iKTsKfQoKaW1wbCBUcmFpdCBmb3IgaTggeyB0eXBlIEFzc29jaWF0ZWRUeXBlID0gdTMyOyB9Cgpmb28oM19pOCk7CmBgYAoAH////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///3+cD5wPAAEAnA8AtzcmkgIAAJgEAAAAmQQAAL0CDgYAAJcEAgUBBFNvbWUBAQCfDgABmAQAAL0CDgYAApcEAAEAqAIkBgAAlgQBAQCfDgACAKkCEpECAJ8OBQEFRTAyNzEAAR8FBQABAAUAqAIkBgAAlgQBAQGkDgABlwQAAOY3JpQCAACdBAAAAgDmNyaUAgCfDgUB4QVBbiBldmFsdWF0aW9uIG9mIGEgdHJhaXQgcmVxdWlyZW1lbnQgb3ZlcmZsb3dlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNzUKdHJhaXQgRm9vIHt9CgpzdHJ1Y3QgQmFyPFQ+KFQpOwoKaW1wbDxUPiBGb28gZm9yIFQgd2hlcmUgQmFyPFQ+OiBGb28ge30KYGBgCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIHRoZXJlIHdhcyBhIHJlY3Vyc2l2ZSB0cmFpdCByZXF1aXJlbWVudCB0aGF0IG92ZXJmbG93ZWQKYmVmb3JlIGl0IGNvdWxkIGJlIGV2YWx1YXRlZC4gVGhpcyBvZnRlbiBtZWFucyB0aGF0IHRoZXJlIGlzIGFuIHVuYm91bmRlZApyZWN1cnNpb24gaW4gcmVzb2x2aW5nIHNvbWUgdHlwZSBib3VuZHMuCgpUbyBkZXRlcm1pbmUgaWYgYSBgVGAgaXMgYEZvb2AsIHdlIG5lZWQgdG8gY2hlY2sgaWYgYEJhcjxUPmAgaXMgYEZvb2AuIEhvd2V2ZXIsCnRvIGRvIHRoaXMgY2hlY2ssIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoYXQgYEJhcjxCYXI8VD4+YCBpcyBgRm9vYC4gVG8KZGV0ZXJtaW5lIHRoaXMsIHdlIGNoZWNrIGlmIGBCYXI8QmFyPEJhcjxUPj4+YCBpcyBgRm9vYCwgYW5kIHNvIG9uLiBUaGlzIGlzCmNsZWFybHkgYSByZWN1cnNpdmUgcmVxdWlyZW1lbnQgdGhhdCBjYW4ndCBiZSByZXNvbHZlZCBkaXJlY3RseS4KCkNvbnNpZGVyIGNoYW5naW5nIHlvdXIgdHJhaXQgYm91bmRzIHNvIHRoYXQgdGhleSdyZSBsZXNzIHNlbGYtcmVmZXJlbnRpYWwuCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////H+EF4QUAAQDhBQDmNyaUAgAAnAQAAACdBAAAvQIOBgAAmwQCBQEEU29tZQEBAJ8OAAGcBAAAvQIOBgACmwQAAQCoAiQGAACaBAEBAJ8OAAIAqQISkwIAnw4FAQVFMDI3NQABHwUFAAEABQCoAiQGAACaBAEBAaQOAAGbBAAAlTgmlgIAAKEEAAACAJU4JpYCAJ8OBQG3BEEgdHJhaXQgaW1wbGVtZW50YXRpb24gaGFzIHN0cmljdGVyIHJlcXVpcmVtZW50cyB0aGFuIHRoZSB0cmFpdCBkZWZpbml0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI3Ngp0cmFpdCBGb28gewogICAgZm4gZm9vPFQ+KHg6IFQpOwp9CgppbXBsIEZvbyBmb3IgYm9vbCB7CiAgICBmbiBmb288VD4oeDogVCkgd2hlcmUgVDogQ29weSB7fQp9CmBgYAoKSGVyZSwgYWxsIHR5cGVzIGltcGxlbWVudGluZyBgRm9vYCBtdXN0IGhhdmUgYSBtZXRob2QgYGZvbzxUPih4OiBUKWAgd2hpY2ggY2FuCnRha2UgYW55IHR5cGUgYFRgLiBIb3dldmVyLCBpbiB0aGUgYGltcGxgIGZvciBgYm9vbGAsIHdlIGhhdmUgYWRkZWQgYW4gZXh0cmEKYm91bmQgdGhhdCBgVGAgaXMgYENvcHlgLCB3aGljaCBpc24ndCBjb21wYXRpYmxlIHdpdGggdGhlIG9yaWdpbmFsIHRyYWl0LgoKQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIGJvdW5kIGZyb20gdGhlIG1ldGhvZCBvciBhZGRpbmcgdGhlIGJvdW5kIHRvIHRoZSBvcmlnaW5hbAptZXRob2QgZGVmaW5pdGlvbiBpbiB0aGUgdHJhaXQuCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////P7cEtwQAAQC3BACVOCaWAgAAoAQAAAChBAAAvQIOBgAAnwQCBQEEU29tZQEBAJ8OAAGgBAAAvQIOBgACnwQAAQCoAiQGAACeBAEBAJ8OAAIAqQISlQIAnw4FAQVFMDI3NgABHwUFAAEABQCoAiQGAACeBAEBAaQOAAGfBAAAxDgmmAIAAKUEAAACAMQ4JpgCAJ8OBQHzEFlvdSB0cmllZCB0byB1c2UgYSB0eXBlIHdoaWNoIGRvZXNuJ3QgaW1wbGVtZW50IHNvbWUgdHJhaXQgaW4gYSBwbGFjZSB3aGljaApleHBlY3RlZCB0aGF0IHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI3NwovLyBoZXJlIHdlIGRlY2xhcmUgdGhlIEZvbyB0cmFpdCB3aXRoIGEgYmFyIG1ldGhvZAp0cmFpdCBGb28gewogICAgZm4gYmFyKCZzZWxmKTsKfQoKLy8gd2Ugbm93IGRlY2xhcmUgYSBmdW5jdGlvbiB3aGljaCB0YWtlcyBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHRoZSBGb28gdHJhaXQKZm4gc29tZV9mdW5jPFQ6IEZvbz4oZm9vOiBUKSB7CiAgICBmb28uYmFyKCk7Cn0KCmZuIG1haW4oKSB7CiAgICAvLyB3ZSBub3cgY2FsbCB0aGUgbWV0aG9kIHdpdGggdGhlIGkzMiB0eXBlLCB3aGljaCBkb2Vzbid0IGltcGxlbWVudAogICAgLy8gdGhlIEZvbyB0cmFpdAogICAgc29tZV9mdW5jKDVpMzIpOyAvLyBlcnJvcjogdGhlIHRyYWl0IGJvdW5kIGBpMzIgOiBGb29gIGlzIG5vdCBzYXRpc2ZpZWQKfQpgYGAKCkluIG9yZGVyIHRvIGZpeCB0aGlzIGVycm9yLCB2ZXJpZnkgdGhhdCB0aGUgdHlwZSB5b3UncmUgdXNpbmcgZG9lcyBpbXBsZW1lbnQKdGhlIHRyYWl0LiBFeGFtcGxlOgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBiYXIoJnNlbGYpOwp9CgpmbiBzb21lX2Z1bmM8VDogRm9vPihmb286IFQpIHsKICAgIGZvby5iYXIoKTsgLy8gd2UgY2FuIG5vdyB1c2UgdGhpcyBtZXRob2Qgc2luY2UgaTMyIGltcGxlbWVudHMgdGhlCiAgICAgICAgICAgICAgIC8vIEZvbyB0cmFpdAp9CgovLyB3ZSBpbXBsZW1lbnQgdGhlIHRyYWl0IG9uIHRoZSBpMzIgdHlwZQppbXBsIEZvbyBmb3IgaTMyIHsKICAgIGZuIGJhcigmc2VsZikge30KfQoKZm4gbWFpbigpIHsKICAgIHNvbWVfZnVuYyg1aTMyKTsgLy8gb2shCn0KYGBgCgpPciBpbiBhIGdlbmVyaWMgY29udGV4dCwgYW4gZXJyb25lb3VzIGNvZGUgZXhhbXBsZSB3b3VsZCBsb29rIGxpa2U6CgpgYGBjb21waWxlX2ZhaWwsRTAyNzcKZm4gc29tZV9mdW5jPFQ+KGZvbzogVCkgewogICAgcHJpbnRsbiEoIns6P30iLCBmb28pOyAvLyBlcnJvcjogdGhlIHRyYWl0IGBjb3JlOjpmbXQ6OkRlYnVnYCBpcyBub3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGltcGxlbWVudGVkIGZvciB0aGUgdHlwZSBgVGAKfQoKZm4gbWFpbigpIHsKICAgIC8vIFdlIG5vdyBjYWxsIHRoZSBtZXRob2Qgd2l0aCB0aGUgaTMyIHR5cGUsCiAgICAvLyB3aGljaCAqZG9lcyogaW1wbGVtZW50IHRoZSBEZWJ1ZyB0cmFpdC4KICAgIHNvbWVfZnVuYyg1aTMyKTsKfQpgYGAKCk5vdGUgdGhhdCB0aGUgZXJyb3IgaGVyZSBpcyBpbiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZ2VuZXJpYyBmdW5jdGlvbjogQWx0aG91Z2gKd2Ugb25seSBjYWxsIGl0IHdpdGggYSBwYXJhbWV0ZXIgdGhhdCBkb2VzIGltcGxlbWVudCBgRGVidWdgLCB0aGUgY29tcGlsZXIKc3RpbGwgcmVqZWN0cyB0aGUgZnVuY3Rpb246IEl0IG11c3Qgd29yayB3aXRoIGFsbCBwb3NzaWJsZSBpbnB1dCB0eXBlcy4gSW4Kb3JkZXIgdG8gbWFrZSB0aGlzIGV4YW1wbGUgY29tcGlsZSwgd2UgbmVlZCB0byByZXN0cmljdCB0aGUgZ2VuZXJpYyB0eXBlIHdlJ3JlCmFjY2VwdGluZzoKCmBgYAp1c2Ugc3RkOjpmbXQ7CgovLyBSZXN0cmljdCB0aGUgaW5wdXQgdHlwZSB0byB0eXBlcyB0aGF0IGltcGxlbWVudCBEZWJ1Zy4KZm4gc29tZV9mdW5jPFQ6IGZtdDo6RGVidWc+KGZvbzogVCkgewogICAgcHJpbnRsbiEoIns6P30iLCBmb28pOwp9CgpmbiBtYWluKCkgewogICAgLy8gQ2FsbGluZyB0aGUgbWV0aG9kIGlzIHN0aWxsIGZpbmUsIGFzIGkzMiBpbXBsZW1lbnRzIERlYnVnLgogICAgc29tZV9mdW5jKDVpMzIpOwoKICAgIC8vIFRoaXMgd291bGQgZmFpbCB0byBjb21waWxlIG5vdzoKICAgIC8vIHN0cnVjdCBXaXRob3V0RGVidWc7CiAgICAvLyBzb21lX2Z1bmMoV2l0aG91dERlYnVnKTsKfQpgYGAKClJ1c3Qgb25seSBsb29rcyBhdCB0aGUgc2lnbmF0dXJlIG9mIHRoZSBjYWxsZWQgZnVuY3Rpb24sIGFzIHN1Y2ggaXQgbXVzdAphbHJlYWR5IHNwZWNpZnkgYWxsIHJlcXVpcmVtZW50cyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgZXZlcnkgdHlwZSBwYXJhbWV0ZXIuCgAi////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////wPzEPMQAAEA8xAAxDgmmAIAAKQEAAAApQQAAL0CDgYAAKMEAgUBBFNvbWUBAQCfDgABpAQAAL0CDgYAAqMEAAEAqAIkBgAAogQBAQCfDgACAKkCEpcCAJ8OBQEFRTAyNzcAAR8FBQABAAUAqAIkBgAAogQBAQGkDgABowQAAPM4JpoCAACpBAAAAgDzOCaaAgCfDgUBrwUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpZb3UgdHJpZWQgdG8gc3VwcGx5IGEgdHlwZSB3aGljaCBkb2Vzbid0IGltcGxlbWVudCBzb21lIHRyYWl0IGluIGEgbG9jYXRpb24Kd2hpY2ggZXhwZWN0ZWQgdGhhdCB0cmFpdC4gVGhpcyBlcnJvciB0eXBpY2FsbHkgb2NjdXJzIHdoZW4gd29ya2luZyB3aXRoCmBGbmAtYmFzZWQgdHlwZXMuIEVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKZm4gZm9vPEY6IEZuKHVzaXplKT4oeDogRikgeyB9CgpmbiBtYWluKCkgewogICAgLy8gdHlwZSBtaXNtYXRjaDogLi4uIGltcGxlbWVudHMgdGhlIHRyYWl0IGBjb3JlOjpvcHM6OkZuPChTdHJpbmcsKT5gLAogICAgLy8gYnV0IHRoZSB0cmFpdCBgY29yZTo6b3BzOjpGbjwodXNpemUsKT5gIGlzIHJlcXVpcmVkCiAgICAvLyBbRTAyODFdCiAgICBmb28ofHk6IFN0cmluZ3wgeyB9KTsKfQpgYGAKClRoZSBpc3N1ZSBpbiB0aGlzIGNhc2UgaXMgdGhhdCBgZm9vYCBpcyBkZWZpbmVkIGFzIGFjY2VwdGluZyBhIGBGbmAgd2l0aCBvbmUKYXJndW1lbnQgb2YgdHlwZSBgU3RyaW5nYCwgYnV0IHRoZSBjbG9zdXJlIHdlIGF0dGVtcHRlZCB0byBwYXNzIHRvIGl0IHJlcXVpcmVzCm9uZSBhcmd1bWVudHMgb2YgdHlwZSBgdXNpemVgLgoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8frwWvBQABAK8FAPM4JpoCAACoBAAAAKkEAAC9Ag4GAACnBAIFAQRTb21lAQEAnw4AAagEAAC9Ag4GAAKnBAABAKgCJAYAAKYEAQEAnw4AAgCpAhKZAgCfDgUBBUUwMjgxAAEfBQUAAQAFAKgCJAYAAKYEAQEBpA4AAacEAACiOSacAgAArQQAAAIAojkmnAIAnw4FAeoPVGhlIGNvbXBpbGVyIGNvdWxkIG5vdCBpbmZlciBhIHR5cGUgYW5kIGFza2VkIGZvciBhIHR5cGUgYW5ub3RhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyODIKbGV0IHggPSAiaGVsbG8iLmNoYXJzKCkucmV2KCkuY29sbGVjdCgpOwpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdHlwZSBpbmZlcmVuY2UgZGlkIG5vdCByZXN1bHQgaW4gb25lIHVuaXF1ZSBwb3NzaWJsZQp0eXBlLCBhbmQgZXh0cmEgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQuIEluIG1vc3QgY2FzZXMgdGhpcyBjYW4gYmUgcHJvdmlkZWQKYnkgYWRkaW5nIGEgdHlwZSBhbm5vdGF0aW9uLiBTb21ldGltZXMgeW91IG5lZWQgdG8gc3BlY2lmeSBhIGdlbmVyaWMgdHlwZQpwYXJhbWV0ZXIgbWFudWFsbHkuCgpBIGNvbW1vbiBleGFtcGxlIGlzIHRoZSBgY29sbGVjdGAgbWV0aG9kIG9uIGBJdGVyYXRvcmAuIEl0IGhhcyBhIGdlbmVyaWMgdHlwZQpwYXJhbWV0ZXIgd2l0aCBhIGBGcm9tSXRlcmF0b3JgIGJvdW5kLCB3aGljaCBmb3IgYSBgY2hhcmAgaXRlcmF0b3IgaXMKaW1wbGVtZW50ZWQgYnkgYFZlY2AgYW5kIGBTdHJpbmdgIGFtb25nIG90aGVycy4gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBzbmlwcGV0CnRoYXQgcmV2ZXJzZXMgdGhlIGNoYXJhY3RlcnMgb2YgYSBzdHJpbmc6CgpJbiB0aGUgZmlyc3QgY29kZSBleGFtcGxlLCB0aGUgY29tcGlsZXIgY2Fubm90IGluZmVyIHdoYXQgdGhlIHR5cGUgb2YgYHhgIHNob3VsZApiZTogYFZlYzxjaGFyPmAgYW5kIGBTdHJpbmdgIGFyZSBib3RoIHN1aXRhYmxlIGNhbmRpZGF0ZXMuIFRvIHNwZWNpZnkgd2hpY2ggdHlwZQp0byB1c2UsIHlvdSBjYW4gdXNlIGEgdHlwZSBhbm5vdGF0aW9uIG9uIGB4YDoKCmBgYApsZXQgeDogVmVjPGNoYXI+ID0gImhlbGxvIi5jaGFycygpLnJldigpLmNvbGxlY3QoKTsKYGBgCgpJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGFubm90YXRlIHRoZSBmdWxsIHR5cGUuIE9uY2UgdGhlIGFtYmlndWl0eSBpcyByZXNvbHZlZCwKdGhlIGNvbXBpbGVyIGNhbiBpbmZlciB0aGUgcmVzdDoKCmBgYApsZXQgeDogVmVjPF8+ID0gImhlbGxvIi5jaGFycygpLnJldigpLmNvbGxlY3QoKTsKYGBgCgpBbm90aGVyIHdheSB0byBwcm92aWRlIHRoZSBjb21waWxlciB3aXRoIGVub3VnaCBpbmZvcm1hdGlvbiwgaXMgdG8gc3BlY2lmeSB0aGUKZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcjoKCmBgYApsZXQgeCA9ICJoZWxsbyIuY2hhcnMoKS5yZXYoKS5jb2xsZWN0Ojo8VmVjPGNoYXI+PigpOwpgYGAKCkFnYWluLCB5b3UgbmVlZCBub3Qgc3BlY2lmeSB0aGUgZnVsbCB0eXBlIGlmIHRoZSBjb21waWxlciBjYW4gaW5mZXIgaXQ6CgpgYGAKbGV0IHggPSAiaGVsbG8iLmNoYXJzKCkucmV2KCkuY29sbGVjdDo6PFZlYzxfPj4oKTsKYGBgCgpBcGFydCBmcm9tIGEgbWV0aG9kIG9yIGZ1bmN0aW9uIHdpdGggYSBnZW5lcmljIHR5cGUgcGFyYW1ldGVyLCB0aGlzIGVycm9yIGNhbgpvY2N1ciB3aGVuIGEgdHlwZSBwYXJhbWV0ZXIgb2YgYSBzdHJ1Y3Qgb3IgdHJhaXQgY2Fubm90IGJlIGluZmVycmVkLiBJbiB0aGF0CmNhc2UgaXQgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byB1c2UgYSB0eXBlIGFubm90YXRpb24sIGJlY2F1c2UgYWxsIGNhbmRpZGF0ZXMKaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZS4gRm9yIGluc3RhbmNlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjgyCnN0cnVjdCBGb288VD4gewogICAgbnVtOiBULAp9CgppbXBsPFQ+IEZvbzxUPiB7CiAgICBmbiBiYXIoKSAtPiBpMzIgewogICAgICAgIDAKICAgIH0KCiAgICBmbiBiYXooKSB7CiAgICAgICAgbGV0IG51bWJlciA9IEZvbzo6YmFyKCk7CiAgICB9Cn0KYGBgCgpUaGlzIHdpbGwgZmFpbCBiZWNhdXNlIHRoZSBjb21waWxlciBkb2VzIG5vdCBrbm93IHdoaWNoIGluc3RhbmNlIG9mIGBGb29gIHRvCmNhbGwgYGJhcmAgb24uIENoYW5nZSBgRm9vOjpiYXIoKWAgdG8gYEZvbzo6PFQ+OjpiYXIoKWAgdG8gcmVzb2x2ZSB0aGUgZXJyb3IuCgAg////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////f+oP6g8AAQDqDwCiOSacAgAArAQAAACtBAAAvQIOBgAAqwQCBQEEU29tZQEBAJ8OAAGsBAAAvQIOBgACqwQAAQCoAiQGAACqBAEBAJ8OAAIAqQISmwIAnw4FAQVFMDI4MgABHwUFAAEABQCoAiQGAACqBAEBAaQOAAGrBAAA0TkmngIAALEEAAACANE5Jp4CAJ8OBQHtB0FuIGltcGxlbWVudGF0aW9uIGNhbm5vdCBiZSBjaG9zZW4gdW5hbWJpZ3VvdXNseSBiZWNhdXNlIG9mIGxhY2sgb2YgaW5mb3JtYXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjgzCnRyYWl0IEdlbmVyYXRvciB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzI7Cn0KCnN0cnVjdCBJbXBsOwoKaW1wbCBHZW5lcmF0b3IgZm9yIEltcGwgewogICAgZm4gY3JlYXRlKCkgLT4gdTMyIHsgMSB9Cn0KCnN0cnVjdCBBbm90aGVySW1wbDsKCmltcGwgR2VuZXJhdG9yIGZvciBBbm90aGVySW1wbCB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzIgeyAyIH0KfQoKZm4gbWFpbigpIHsKICAgIGxldCBjb250OiB1MzIgPSBHZW5lcmF0b3I6OmNyZWF0ZSgpOwogICAgLy8gZXJyb3IsIGltcG9zc2libGUgdG8gY2hvb3NlIG9uZSBvZiBHZW5lcmF0b3IgdHJhaXQgaW1wbGVtZW50YXRpb24KICAgIC8vIFNob3VsZCBpdCBiZSBJbXBsIG9yIEFub3RoZXJJbXBsLCBtYXliZSBzb21ldGhpbmcgZWxzZT8KfQpgYGAKClRoaXMgZXJyb3IgY2FuIGJlIHNvbHZlZCBieSBhZGRpbmcgdHlwZSBhbm5vdGF0aW9ucyB0aGF0IHByb3ZpZGUgdGhlIG1pc3NpbmcKaW5mb3JtYXRpb24gdG8gdGhlIGNvbXBpbGVyLiBJbiB0aGlzIGNhc2UsIHRoZSBzb2x1dGlvbiBpcyB0byB1c2UgYSBjb25jcmV0ZQp0eXBlOgoKYGBgCnRyYWl0IEdlbmVyYXRvciB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzI7Cn0KCnN0cnVjdCBBbm90aGVySW1wbDsKCmltcGwgR2VuZXJhdG9yIGZvciBBbm90aGVySW1wbCB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzIgeyAyIH0KfQoKZm4gbWFpbigpIHsKICAgIGxldCBnZW4xID0gQW5vdGhlckltcGw6OmNyZWF0ZSgpOwoKICAgIC8vIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBtZXRob2RzIHdpdGggc2FtZSBuYW1lIChkaWZmZXJlbnQgdHJhaXRzKQogICAgbGV0IGdlbjIgPSA8QW5vdGhlckltcGwgYXMgR2VuZXJhdG9yPjo6Y3JlYXRlKCk7Cn0KYGBgCgAQ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////B+0H7QcAAQDtBwDROSaeAgAAsAQAAACxBAAAvQIOBgAArwQCBQEEU29tZQEBAJ8OAAGwBAAAvQIOBgACrwQAAQCoAiQGAACuBAEBAJ8OAAIAqQISnQIAnw4FAQVFMDI4MwABHwUFAAEABQCoAiQGAACuBAEBAaQOAAGvBAAAgDomoAIAALUEAAACAIA6JqACAJ8OBQHDClRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gdGhlIGNvbXBpbGVyIGlzIHVuYWJsZSB0byB1bmFtYmlndW91c2x5IGluZmVyIHRoZQpyZXR1cm4gdHlwZSBvZiBhIGZ1bmN0aW9uIG9yIG1ldGhvZCB3aGljaCBpcyBnZW5lcmljIG9uIHJldHVybiB0eXBlLCBzdWNoCmFzIHRoZSBgY29sbGVjdGAgbWV0aG9kIGZvciBgSXRlcmF0b3Jgcy4KCkZvciBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjg0CmZuIGZvbygpIC0+IFJlc3VsdDxib29sLCAoKT4gewogICAgbGV0IHJlc3VsdHMgPSBbT2sodHJ1ZSksIE9rKGZhbHNlKSwgRXJyKCgpKV0uaXRlcigpLmNsb25lZCgpOwogICAgbGV0IHY6IFZlYzxib29sPiA9IHJlc3VsdHMuY29sbGVjdCgpPzsKICAgIC8vIERvIHRoaW5ncyB3aXRoIHYuLi4KICAgIE9rKHRydWUpCn0KYGBgCgpIZXJlIHdlIGhhdmUgYW4gaXRlcmF0b3IgYHJlc3VsdHNgIG92ZXIgYFJlc3VsdDxib29sLCAoKT5gLgpIZW5jZSwgYHJlc3VsdHMuY29sbGVjdCgpYCBjYW4gcmV0dXJuIGFueSB0eXBlIGltcGxlbWVudGluZwpgRnJvbUl0ZXJhdG9yPFJlc3VsdDxib29sLCAoKT4+YC4gT24gdGhlIG90aGVyIGhhbmQsIHRoZQpgP2Agb3BlcmF0b3IgY2FuIGFjY2VwdCBhbnkgdHlwZSBpbXBsZW1lbnRpbmcgYFRyeWAuCgpUaGUgYXV0aG9yIG9mIHRoaXMgY29kZSBwcm9iYWJseSB3YW50cyBgY29sbGVjdCgpYCB0byByZXR1cm4gYQpgUmVzdWx0PFZlYzxib29sPiwgKCk+YCwgYnV0IHRoZSBjb21waWxlciBjYW4ndCBiZSBzdXJlCnRoYXQgdGhlcmUgaXNuJ3QgYW5vdGhlciB0eXBlIGBUYCBpbXBsZW1lbnRpbmcgYm90aCBgVHJ5YCBhbmQKYEZyb21JdGVyYXRvcjxSZXN1bHQ8Ym9vbCwgKCk+PmAgaW4gc2NvcGUgc3VjaCB0aGF0CmBUOjpPayA9PSBWZWM8Ym9vbD5gLiBIZW5jZSwgdGhpcyBjb2RlIGlzIGFtYmlndW91cyBhbmQgYW4gZXJyb3IKaXMgcmV0dXJuZWQuCgpUbyByZXNvbHZlIHRoaXMgZXJyb3IsIHVzZSBhIGNvbmNyZXRlIHR5cGUgZm9yIHRoZSBpbnRlcm1lZGlhdGUgZXhwcmVzc2lvbjoKCmBgYApmbiBmb28oKSAtPiBSZXN1bHQ8Ym9vbCwgKCk+IHsKICAgIGxldCByZXN1bHRzID0gW09rKHRydWUpLCBPayhmYWxzZSksIEVycigoKSldLml0ZXIoKS5jbG9uZWQoKTsKICAgIGxldCB2ID0gewogICAgICAgIGxldCB0ZW1wOiBSZXN1bHQ8VmVjPGJvb2w+LCAoKT4gPSByZXN1bHRzLmNvbGxlY3QoKTsKICAgICAgICB0ZW1wPwogICAgfTsKICAgIC8vIERvIHRoaW5ncyB3aXRoIHYuLi4KICAgIE9rKHRydWUpCn0KYGBgCgpOb3RlIHRoYXQgdGhlIHR5cGUgb2YgYHZgIGNhbiBub3cgYmUgaW5mZXJyZWQgZnJvbSB0aGUgdHlwZSBvZiBgdGVtcGAuCgAW////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BB8MKwwoAAQDDCgCAOiagAgAAtAQAAAC1BAAAvQIOBgAAswQCBQEEU29tZQEBAJ8OAAG0BAAAvQIOBgACswQAAQCoAiQGAACyBAEBAJ8OAAIAqQISnwIAnw4FAQVFMDI4NAABHwUFAAEABQCoAiQGAACyBAEBAaQOAAGzBAAArzomogIAALkEAAACAK86JqICAJ8OBQGQBiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClBhdHRlcm5zIHVzZWQgdG8gYmluZCBuYW1lcyBtdXN0IGJlIGlycmVmdXRhYmxlLiBUaGF0IGlzLCB0aGV5IG11c3QgZ3VhcmFudGVlCnRoYXQgYSBuYW1lIHdpbGwgYmUgZXh0cmFjdGVkIGluIGFsbCBjYXNlcy4gSW5zdGVhZCBvZiBwYXR0ZXJuIG1hdGNoaW5nIHRoZQpsb29wIHZhcmlhYmxlLCBjb25zaWRlciB1c2luZyBhIGBtYXRjaGAgb3IgYGlmIGxldGAgaW5zaWRlIHRoZSBsb29wIGJvZHkuIEZvcgppbnN0YW5jZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAwNQpsZXQgeHMgOiBWZWM8T3B0aW9uPGkzMj4+ID0gdmVjIVtTb21lKDEpLCBOb25lXTsKCi8vIFRoaXMgZmFpbHMgYmVjYXVzZSBgTm9uZWAgaXMgbm90IGNvdmVyZWQuCmZvciBTb21lKHgpIGluIHhzIHsKICAgIC8vIC4uLgp9CmBgYAoKTWF0Y2ggaW5zaWRlIHRoZSBsb29wIGluc3RlYWQ6CgpgYGAKbGV0IHhzIDogVmVjPE9wdGlvbjxpMzI+PiA9IHZlYyFbU29tZSgxKSwgTm9uZV07Cgpmb3IgaXRlbSBpbiB4cyB7CiAgICBtYXRjaCBpdGVtIHsKICAgICAgICBTb21lKHgpID0+IHt9LAogICAgICAgIE5vbmUgPT4ge30sCiAgICB9Cn0KYGBgCgpPciB1c2UgYGlmIGxldGA6CgpgYGAKbGV0IHhzIDogVmVjPE9wdGlvbjxpMzI+PiA9IHZlYyFbU29tZSgxKSwgTm9uZV07Cgpmb3IgaXRlbSBpbiB4cyB7CiAgICBpZiBsZXQgU29tZSh4KSA9IGl0ZW0gewogICAgICAgIC8vIC4uLgogICAgfQp9CmBgYAoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//A5AGkAYAAQCQBgCvOiaiAgAAuAQAAAC5BAAAvQIOBgAAtwQCBQEEU29tZQEBAJ8OAAG4BAAAvQIOBgACtwQAAQCoAiQGAAC2BAEBAJ8OAAIAqQISoQIAnw4FAQVFMDI5NwABHwUFAAEABQCoAiQGAAC2BAEBAaQOAAG3BAAA3jompAIAAL0EAAACAN46JqQCAJ8OBQHyBCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCk11dGFibGUgYm9ycm93cyBhcmUgbm90IGFsbG93ZWQgaW4gcGF0dGVybiBndWFyZHMsIGJlY2F1c2UgbWF0Y2hpbmcgY2Fubm90IGhhdmUKc2lkZSBlZmZlY3RzLiBTaWRlIGVmZmVjdHMgY291bGQgYWx0ZXIgdGhlIG1hdGNoZWQgb2JqZWN0IG9yIHRoZSBlbnZpcm9ubWVudApvbiB3aGljaCB0aGUgbWF0Y2ggZGVwZW5kcyBpbiBzdWNoIGEgd2F5LCB0aGF0IHRoZSBtYXRjaCB3b3VsZCBub3QgYmUKZXhoYXVzdGl2ZS4gRm9yIGluc3RhbmNlLCB0aGUgZm9sbG93aW5nIHdvdWxkIG5vdCBtYXRjaCBhbnkgYXJtIGlmIG11dGFibGUKYm9ycm93cyB3ZXJlIGFsbG93ZWQ6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTYKbWF0Y2ggU29tZSgoKSkgewogICAgTm9uZSA9PiB7IH0sCiAgICBvcHRpb24gaWYgb3B0aW9uLnRha2UoKS5pc19ub25lKCkgPT4gewogICAgICAgIC8qIGltcG9zc2libGUsIG9wdGlvbiBpcyBgU29tZWAgKi8KICAgIH0sCiAgICBTb21lKF8pID0+IHsgfSAvLyBXaGVuIHRoZSBwcmV2aW91cyBtYXRjaCBmYWlsZWQsIHRoZSBvcHRpb24gYmVjYW1lIGBOb25lYC4KfQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////AfIE8gQAAQDyBADeOiakAgAAvAQAAAC9BAAAvQIOBgAAuwQCBQEEU29tZQEBAJ8OAAG8BAAAvQIOBgACuwQAAQCoAiQGAAC6BAEBAJ8OAAIAqQISowIAnw4FAQVFMDMwMQABHwUFAAEABQCoAiQGAAC6BAEBAaQOAAG7BAAAjTsmpgIAAMEEAAACAI07JqYCAJ8OBQG8BCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkFzc2lnbm1lbnRzIGFyZSBub3QgYWxsb3dlZCBpbiBwYXR0ZXJuIGd1YXJkcywgYmVjYXVzZSBtYXRjaGluZyBjYW5ub3QgaGF2ZQpzaWRlIGVmZmVjdHMuIFNpZGUgZWZmZWN0cyBjb3VsZCBhbHRlciB0aGUgbWF0Y2hlZCBvYmplY3Qgb3IgdGhlIGVudmlyb25tZW50Cm9uIHdoaWNoIHRoZSBtYXRjaCBkZXBlbmRzIGluIHN1Y2ggYSB3YXksIHRoYXQgdGhlIG1hdGNoIHdvdWxkIG5vdCBiZQpleGhhdXN0aXZlLiBGb3IgaW5zdGFuY2UsIHRoZSBmb2xsb3dpbmcgd291bGQgbm90IG1hdGNoIGFueSBhcm0gaWYgYXNzaWdubWVudHMKd2VyZSBhbGxvd2VkOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk0Cm1hdGNoIFNvbWUoKCkpIHsKICAgIE5vbmUgPT4geyB9LAogICAgb3B0aW9uIGlmIHsgb3B0aW9uID0gTm9uZTsgZmFsc2UgfSA9PiB7IH0sCiAgICBTb21lKF8pID0+IHsgfSAvLyBXaGVuIHRoZSBwcmV2aW91cyBtYXRjaCBmYWlsZWQsIHRoZSBvcHRpb24gYmVjYW1lIGBOb25lYC4KfQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////D7wEvAQAAQC8BACNOyamAgAAwAQAAADBBAAAvQIOBgAAvwQCBQEEU29tZQEBAJ8OAAHABAAAvQIOBgACvwQAAQCoAiQGAAC+BAEBAJ8OAAIAqQISpQIAnw4FAQVFMDMwMgABHwUFAAEABQCoAiQGAAC+BAEBAaQOAAG/BAAAvDsmqAIAAMUEAAACALw7JqgCAJ8OBQH/BiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClN1Yi1iaW5kaW5ncywgZS5nLiBgcmVmIHggQCBTb21lKHJlZiB5KWAgYXJlIG5vdyBhbGxvd2VkIHVuZGVyCmAjIVtmZWF0dXJlKGJpbmRpbmdzX2FmdGVyX2F0KV1gIGFuZCBjaGVja2VkIHRvIG1ha2Ugc3VyZSB0aGF0Cm1lbW9yeSBzYWZldHkgaXMgdXBoZWxkLgoKLS0tLS0tLS0tLS0tLS0KCkluIGNlcnRhaW4gY2FzZXMgaXQgaXMgcG9zc2libGUgZm9yIHN1Yi1iaW5kaW5ncyB0byB2aW9sYXRlIG1lbW9yeSBzYWZldHkuClVwZGF0ZXMgdG8gdGhlIGJvcnJvdyBjaGVja2VyIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUnVzdCBtYXkgcmVtb3ZlIHRoaXMKcmVzdHJpY3Rpb24sIGJ1dCBmb3Igbm93IHBhdHRlcm5zIG11c3QgYmUgcmV3cml0dGVuIHdpdGhvdXQgc3ViLWJpbmRpbmdzLgoKQmVmb3JlOgoKYGBgY29tcGlsZV9mYWlsCm1hdGNoIFNvbWUoImhpIi50b19zdHJpbmcoKSkgewogICAgcmVmIG9wX3N0cmluZ19yZWYgQCBTb21lKHMpID0+IHt9LAogICAgTm9uZSA9PiB7fSwKfQpgYGAKCkFmdGVyOgoKYGBgCm1hdGNoIFNvbWUoImhpIi50b19zdHJpbmcoKSkgewogICAgU29tZShyZWYgcykgPT4gewogICAgICAgIGxldCBvcF9zdHJpbmdfcmVmID0gJlNvbWUocyk7CiAgICAgICAgLy8gLi4uCiAgICB9LAogICAgTm9uZSA9PiB7fSwKfQpgYGAKClRoZSBgb3Bfc3RyaW5nX3JlZmAgYmluZGluZyBoYXMgdHlwZSBgJk9wdGlvbjwmU3RyaW5nPmAgaW4gYm90aCBjYXNlcy4KClNlZSBhbHNvIFtJc3N1ZSAxNDU4N11baXNzdWUtMTQ1ODddLgoKW2lzc3VlLTE0NTg3XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy8xNDU4NwoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////3//Bv8GAAEA/wYAvDsmqAIAAMQEAAAAxQQAAL0CDgYAAMMEAgUBBFNvbWUBAQCfDgABxAQAAL0CDgYAAsMEAAEAqAIkBgAAwgQBAQCfDgACAKkCEqcCAJ8OBQEFRTAzMDMAAR8FBQABAAUAqAIkBgAAwgQBAQGkDgABwwQAAOs7JqoCAADJBAAAAgDrOyaqAgCfDgUB6g9UaGUgYHNlbGZgIHBhcmFtZXRlciBpbiBhIG1ldGhvZCBoYXMgYW4gaW52YWxpZCAicmVjZWl2ZXIgdHlwZSIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzA3CnN0cnVjdCBGb287CnN0cnVjdCBCYXI7Cgp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpOwp9CgppbXBsIFRyYWl0IGZvciBGb28gewogICAgZm4gZm9vKHNlbGY6ICZCYXIpIHt9Cn0KYGBgCgpNZXRob2RzIHRha2UgYSBzcGVjaWFsIGZpcnN0IHBhcmFtZXRlciwgb2Ygd2hpY2ggdGhlcmUgYXJlIHRocmVlIHZhcmlhbnRzOgpgc2VsZmAsIGAmc2VsZmAsIGFuZCBgJm11dCBzZWxmYC4gVGhlc2UgYXJlIHN5bnRhY3RpYyBzdWdhciBmb3IKYHNlbGY6IFNlbGZgLCBgc2VsZjogJlNlbGZgLCBhbmQgYHNlbGY6ICZtdXQgU2VsZmAgcmVzcGVjdGl2ZWx5LgoKYGBgCiMgc3RydWN0IEZvbzsKdHJhaXQgVHJhaXQgewogICAgZm4gZm9vKCZzZWxmKTsKLy8gICAgICAgICBeXl5eXiBgc2VsZmAgaGVyZSBpcyBhIHJlZmVyZW5jZSB0byB0aGUgcmVjZWl2ZXIgb2JqZWN0Cn0KCmltcGwgVHJhaXQgZm9yIEZvbyB7CiAgICBmbiBmb28oJnNlbGYpIHt9Ci8vICAgICAgICAgXl5eXl4gdGhlIHJlY2VpdmVyIHR5cGUgaXMgYCZGb29gCn0KYGBgCgpUaGUgdHlwZSBgU2VsZmAgYWN0cyBhcyBhbiBhbGlhcyB0byB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCB0cmFpdAppbXBsZW1lbnRlciwgb3IgInJlY2VpdmVyIHR5cGUiLiBCZXNpZGVzIHRoZSBhbHJlYWR5IG1lbnRpb25lZCBgU2VsZmAsCmAmU2VsZmAgYW5kIGAmbXV0IFNlbGZgIHZhbGlkIHJlY2VpdmVyIHR5cGVzLCB0aGUgZm9sbG93aW5nIGFyZSBhbHNvIHZhbGlkOgpgc2VsZjogQm94PFNlbGY+YCwgYHNlbGY6IFJjPFNlbGY+YCwgYHNlbGY6IEFyYzxTZWxmPmAsIGFuZCBgc2VsZjogUGluPFA+YAood2hlcmUgUCBpcyBvbmUgb2YgdGhlIHByZXZpb3VzIHR5cGVzIGV4Y2VwdCBgU2VsZmApLiBOb3RlIHRoYXQgYFNlbGZgIGNhbgphbHNvIGJlIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGluZyB0eXBlLCBsaWtlIGBGb29gIGluIHRoZSBmb2xsb3dpbmcKZXhhbXBsZToKCmBgYAojIHN0cnVjdCBGb287CiMgdHJhaXQgVHJhaXQgewojICAgICBmbiBmb28oJnNlbGYpOwojIH0KaW1wbCBUcmFpdCBmb3IgRm9vIHsKICAgIGZuIGZvbyhzZWxmOiAmRm9vKSB7fQp9CmBgYAoKVGhpcyBlcnJvciB3aWxsIGJlIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyIHdoZW4gdXNpbmcgYW4gaW52YWxpZCByZWNlaXZlciB0eXBlLApsaWtlIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMwNwojIHN0cnVjdCBGb287CiMgc3RydWN0IEJhcjsKIyB0cmFpdCBUcmFpdCB7CiMgICAgIGZuIGZvbygmc2VsZik7CiMgfQppbXBsIFRyYWl0IGZvciBGb28gewogICAgZm4gZm9vKHNlbGY6ICZCYXIpIHt9Cn0KYGBgCgpUaGUgbmlnaHRseSBmZWF0dXJlIFtBcmJpdHJhcnkgc2VsZiB0eXBlc11bQVNUXSBleHRlbmRzIHRoZSBhY2NlcHRlZApzZXQgb2YgcmVjZWl2ZXIgdHlwZXMgdG8gYWxzbyBpbmNsdWRlIGFueSB0eXBlIHRoYXQgY2FuIGRlcmVmZXJlbmNlIHRvCmBTZWxmYDoKCmBgYAojIVtmZWF0dXJlKGFyYml0cmFyeV9zZWxmX3R5cGVzKV0KCnN0cnVjdCBGb287CnN0cnVjdCBCYXI7CgovLyBCZWNhdXNlIHlvdSBjYW4gZGVyZWZlcmVuY2UgYEJhcmAgaW50byBgRm9vYC4uLgppbXBsIHN0ZDo6b3BzOjpEZXJlZiBmb3IgQmFyIHsKICAgIHR5cGUgVGFyZ2V0ID0gRm9vOwoKICAgIGZuIGRlcmVmKCZzZWxmKSAtPiAmRm9vIHsKICAgICAgICAmRm9vCiAgICB9Cn0KCmltcGwgRm9vIHsKICAgIGZuIGZvbyhzZWxmOiBCYXIpIHt9Ci8vICAgICAgICAgXl5eXl5eXl5eIC4uLml0IGNhbiBiZSB1c2VkIGFzIHRoZSByZWNlaXZlciB0eXBlCn0KYGBgCgpbQVNUXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy91bnN0YWJsZS1ib29rL2xhbmd1YWdlLWZlYXR1cmVzL2FyYml0cmFyeS1zZWxmLXR5cGVzLmh0bWwKACD///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////9/6g/qDwABAOoPAOs7JqoCAADIBAAAAMkEAAC9Ag4GAADHBAIFAQRTb21lAQEAnw4AAcgEAAC9Ag4GAALHBAABAKgCJAYAAMYEAQEAnw4AAgCpAhKpAgCfDgUBBUUwMzA3AAEfBQUAAQAFAKgCJAYAAMYEAQEBpA4AAccEAACaPCasAgAAzQQAAAIAmjwmrAIAnw4FAbwERXhwZWN0ZWQgdHlwZSBkaWQgbm90IG1hdGNoIHRoZSByZWNlaXZlZCB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMwOApsZXQgeDogaTMyID0gIkkgYW0gbm90IGEgbnVtYmVyISI7Ci8vICAgICB+fn4gICB+fn5+fn5+fn5+fn5+fn5+fn5+fgovLyAgICAgIHwgICAgICAgICAgICAgfAovLyAgICAgIHwgICAgaW5pdGlhbGl6aW5nIGV4cHJlc3Npb247Ci8vICAgICAgfCAgICBjb21waWxlciBpbmZlcnMgdHlwZSBgJnN0cmAKLy8gICAgICB8Ci8vICAgIHR5cGUgYGkzMmAgYXNzaWduZWQgdG8gdmFyaWFibGUgYHhgCmBgYAoKVGhpcyBlcnJvciBvY2N1cnMgd2hlbiB0aGUgY29tcGlsZXIgaXMgdW5hYmxlIHRvIGluZmVyIHRoZSBjb25jcmV0ZSB0eXBlIG9mIGEKdmFyaWFibGUuIEl0IGNhbiBvY2N1ciBpbiBzZXZlcmFsIGNhc2VzLCB0aGUgbW9zdCBjb21tb24gYmVpbmcgYSBtaXNtYXRjaApiZXR3ZWVuIHR3byB0eXBlczogdGhlIHR5cGUgdGhlIGF1dGhvciBleHBsaWNpdGx5IGFzc2lnbmVkLCBhbmQgdGhlIHR5cGUgdGhlCmNvbXBpbGVyIGluZmVycmVkLgoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8PvAS8BAABALwEAJo8JqwCAADMBAAAAM0EAAC9Ag4GAADLBAIFAQRTb21lAQEAnw4AAcwEAAC9Ag4GAALLBAABAKgCJAYAAMoEAQEAnw4AAgCpAhKrAgCfDgUBBUUwMzA4AAEfBQUAAQAFAKgCJAYAAMoEAQEBpA4AAcsEAADJPCauAgAA0QQAAAIAyTwmrgIAnw4FAdsJQSBwYXJhbWV0ZXIgdHlwZSBpcyBtaXNzaW5nIGFuIGV4cGxpY2l0IGxpZmV0aW1lIGJvdW5kIGFuZCBtYXkgbm90IGxpdmUgbG9uZwplbm91Z2guCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzA5Ci8vIFRoaXMgd29uJ3QgY29tcGlsZSBiZWNhdXNlIHRoZSBhcHBsaWNhYmxlIGltcGwgb2YKLy8gYFNvbWVUcmFpdGAgKGJlbG93KSByZXF1aXJlcyB0aGF0IGBUOiAnYWAsIGJ1dCB0aGUgc3RydWN0IGRvZXMKLy8gbm90IGhhdmUgYSBtYXRjaGluZyB3aGVyZS1jbGF1c2UuCnN0cnVjdCBGb288J2EsIFQ+IHsKICAgIGZvbzogPFQgYXMgU29tZVRyYWl0PCdhPj46Ok91dHB1dCwKfQoKdHJhaXQgU29tZVRyYWl0PCdhPiB7CiAgICB0eXBlIE91dHB1dDsKfQoKaW1wbDwnYSwgVD4gU29tZVRyYWl0PCdhPiBmb3IgVAp3aGVyZQogICAgVDogJ2EsCnsKICAgIHR5cGUgT3V0cHV0ID0gdTMyOwp9CmBgYAoKVGhlIHR5cGUgZGVmaW5pdGlvbiBjb250YWlucyBzb21lIGZpZWxkIHdob3NlIHR5cGUgcmVxdWlyZXMgYW4gb3V0bGl2ZXMKYW5ub3RhdGlvbi4gT3V0bGl2ZXMgYW5ub3RhdGlvbnMgKGUuZy4sIGBUOiAnYWApIGFyZSB1c2VkIHRvIGd1YXJhbnRlZSB0aGF0IGFsbAp0aGUgZGF0YSBpbiBUIGlzIHZhbGlkIGZvciBhdCBsZWFzdCB0aGUgbGlmZXRpbWUgYCdhYC4gVGhpcyBzY2VuYXJpbyBtb3N0CmNvbW1vbmx5IGFyaXNlcyB3aGVuIHRoZSB0eXBlIGNvbnRhaW5zIGFuIGFzc29jaWF0ZWQgdHlwZSByZWZlcmVuY2UgbGlrZQpgPFQgYXMgU29tZVRyYWl0PCdhPj46Ok91dHB1dGAsIGFzIHNob3duIGluIHRoZSBwcmV2aW91cyBjb2RlLgoKVGhlcmUsIHRoZSB3aGVyZSBjbGF1c2UgYFQ6ICdhYCB0aGF0IGFwcGVhcnMgb24gdGhlIGltcGwgaXMgbm90IGtub3duIHRvIGJlCnNhdGlzZmllZCBvbiB0aGUgc3RydWN0LiBUbyBtYWtlIHRoaXMgZXhhbXBsZSBjb21waWxlLCB5b3UgaGF2ZSB0byBhZGQgYQp3aGVyZS1jbGF1c2UgbGlrZSBgVDogJ2FgIHRvIHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbjoKCmBgYApzdHJ1Y3QgRm9vPCdhLCBUPgp3aGVyZQogICAgVDogJ2EsCnsKICAgIGZvbzogPFQgYXMgU29tZVRyYWl0PCdhPj46Ok91dHB1dAp9Cgp0cmFpdCBTb21lVHJhaXQ8J2E+IHsKICAgIHR5cGUgT3V0cHV0Owp9CgppbXBsPCdhLCBUPiBTb21lVHJhaXQ8J2E+IGZvciBUCndoZXJlCiAgICBUOiAnYSwKewogICAgdHlwZSBPdXRwdXQgPSB1MzI7Cn0KYGBgCgAU////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///z/bCdsJAAEA2wkAyTwmrgIAANAEAAAA0QQAAL0CDgYAAM8EAgUBBFNvbWUBAQCfDgAB0AQAAL0CDgYAAs8EAAEAqAIkBgAAzgQBAQCfDgACAKkCEq0CAJ8OBQEFRTAzMDkAAR8FBQABAAUAqAIkBgAAzgQBAQGkDgABzwQAAPg8JrACAADVBAAAAgD4PCawAgCfDgUBtQVBIHBhcmFtZXRlciB0eXBlIGlzIG1pc3NpbmcgYSBsaWZldGltZSBjb25zdHJhaW50IG9yIGhhcyBhIGxpZmV0aW1lIHRoYXQKZG9lcyBub3QgbGl2ZSBsb25nIGVub3VnaC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMTAKLy8gVGhpcyB3b24ndCBjb21waWxlIGJlY2F1c2UgVCBpcyBub3QgY29uc3RyYWluZWQgdG8gdGhlIHN0YXRpYyBsaWZldGltZQovLyB0aGUgcmVmZXJlbmNlIG5lZWRzCnN0cnVjdCBGb288VD4gewogICAgZm9vOiAmJ3N0YXRpYyBUCn0KYGBgCgpUeXBlIHBhcmFtZXRlcnMgaW4gdHlwZSBkZWZpbml0aW9ucyBoYXZlIGxpZmV0aW1lcyBhc3NvY2lhdGVkIHdpdGggdGhlbSB0aGF0CnJlcHJlc2VudCBob3cgbG9uZyB0aGUgZGF0YSBzdG9yZWQgd2l0aGluIHRoZW0gaXMgZ3VhcmFudGVlZCB0byBsaXZlLiBUaGlzCmxpZmV0aW1lIG11c3QgYmUgYXMgbG9uZyBhcyB0aGUgZGF0YSBuZWVkcyB0byBiZSBhbGl2ZSwgYW5kIG1pc3NpbmcgdGhlCmNvbnN0cmFpbnQgdGhhdCBkZW5vdGVzIHRoaXMgd2lsbCBjYXVzZSB0aGlzIGVycm9yLgoKVGhpcyB3aWxsIGNvbXBpbGUsIGJlY2F1c2UgaXQgaGFzIHRoZSBjb25zdHJhaW50IG9uIHRoZSB0eXBlIHBhcmFtZXRlcjoKCmBgYApzdHJ1Y3QgRm9vPFQ6ICdzdGF0aWM+IHsKICAgIGZvbzogJidzdGF0aWMgVAp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////D7UFtQUAAQC1BQD4PCawAgAA1AQAAADVBAAAvQIOBgAA0wQCBQEEU29tZQEBAJ8OAAHUBAAAvQIOBgAC0wQAAQCoAiQGAADSBAEBAJ8OAAIAqQISrwIAnw4FAQVFMDMxMAABHwUFAAEABQCoAiQGAADSBAEBAaQOAAHTBAAApz0msgIAANkEAAACAKc9JrICAJ8OBQHABlJlZmVyZW5jZSdzIGxpZmV0aW1lIG9mIGJvcnJvd2VkIGNvbnRlbnQgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgbGlmZXRpbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzEyCnB1YiBmbiBvcHRfc3RyPCdhPihtYXliZXN0cjogJidhIE9wdGlvbjxTdHJpbmc+KSAtPiAmJ3N0YXRpYyBzdHIgewogICAgaWYgbWF5YmVzdHIuaXNfbm9uZSgpIHsKICAgICAgICAiKG5vbmUpIgogICAgfSBlbHNlIHsKICAgICAgICBsZXQgczogJidhIHN0ciA9IG1heWJlc3RyLmFzX3JlZigpLnVud3JhcCgpOwogICAgICAgIHMgIC8vIEludmFsaWQgbGlmZXRpbWUhCiAgICB9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZWl0aGVyIGxlc3NlbiB0aGUgZXhwZWN0ZWQgbGlmZXRpbWUgb3IgZmluZCBhIHdheSB0byBub3QgaGF2ZQp0byB1c2UgdGhpcyByZWZlcmVuY2Ugb3V0c2lkZSBvZiBpdHMgY3VycmVudCBzY29wZSAoYnkgcnVubmluZyB0aGUgY29kZSBkaXJlY3RseQppbiB0aGUgc2FtZSBibG9jayBmb3IgZXhhbXBsZT8pOgoKYGBgCi8vIEluIHRoaXMgY2FzZSwgd2UgY2FuIGZpeCB0aGUgaXNzdWUgYnkgc3dpdGNoaW5nIGZyb20gInN0YXRpYyIgbGlmZXRpbWUgdG8gJ2EKcHViIGZuIG9wdF9zdHI8J2E+KG1heWJlc3RyOiAmJ2EgT3B0aW9uPFN0cmluZz4pIC0+ICYnYSBzdHIgewogICAgaWYgbWF5YmVzdHIuaXNfbm9uZSgpIHsKICAgICAgICAiKG5vbmUpIgogICAgfSBlbHNlIHsKICAgICAgICBsZXQgczogJidhIHN0ciA9IG1heWJlc3RyLmFzX3JlZigpLnVud3JhcCgpOwogICAgICAgIHMgIC8vIE9rIQogICAgfQp9CmBgYAoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEAwAbABgABAMAGAKc9JrICAADYBAAAANkEAAC9Ag4GAADXBAIFAQRTb21lAQEAnw4AAdgEAAC9Ag4GAALXBAABAKgCJAYAANYEAQEAnw4AAgCpAhKxAgCfDgUBBUUwMzEyAAEfBQUAAQAFAKgCJAYAANYEAQEBpA4AAdcEAADWPSa0AgAA3QQAAAIA1j0mtAIAnw4FAZUFQW4gYGlmYCBleHByZXNzaW9uIGlzIG1pc3NpbmcgYW4gYGVsc2VgIGJsb2NrLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMxNwpsZXQgeCA9IDU7CmxldCBhID0gaWYgeCA9PSA1IHsKICAgIDEKfTsKYGBgCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGBpZmAgZXhwcmVzc2lvbiB3aXRob3V0IGFuIGBlbHNlYCBibG9jayBpcyB1c2VkIGluIGEKY29udGV4dCB3aGVyZSBhIHR5cGUgb3RoZXIgdGhhbiBgKClgIGlzIGV4cGVjdGVkLiBJbiB0aGUgcHJldmlvdXMgY29kZSBleGFtcGxlLAp0aGUgYGxldGAgZXhwcmVzc2lvbiB3YXMgZXhwZWN0aW5nIGEgdmFsdWUgYnV0IHNpbmNlIHRoZXJlIHdhcyBubyBgZWxzZWAsIG5vCnZhbHVlIHdhcyByZXR1cm5lZC4KCkFuIGBpZmAgZXhwcmVzc2lvbiB3aXRob3V0IGFuIGBlbHNlYCBibG9jayBoYXMgdGhlIHR5cGUgYCgpYCwgc28gdGhpcyBpcyBhIHR5cGUKZXJyb3IuIFRvIHJlc29sdmUgaXQsIGFkZCBhbiBgZWxzZWAgYmxvY2sgaGF2aW5nIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGBpZmAKYmxvY2suCgpTbyB0byBmaXggdGhlIHByZXZpb3VzIGNvZGUgZXhhbXBsZToKCmBgYApsZXQgeCA9IDU7CmxldCBhID0gaWYgeCA9PSA1IHsKICAgIDEKfSBlbHNlIHsKICAgIDIKfTsKYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//f5UFlQUAAQCVBQDWPSa0AgAA3AQAAADdBAAAvQIOBgAA2wQCBQEEU29tZQEBAJ8OAAHcBAAAvQIOBgAC2wQAAQCoAiQGAADaBAEBAJ8OAAIAqQISswIAnw4FAQVFMDMxNwABHwUFAAEABQCoAiQGAADaBAEBAaQOAAHbBAAAhT4mtgIAAOEEAAACAIU+JrYCAJ8OBQHvBEEgY3Jvc3MtY3JhdGUgb3B0LW91dCB0cmFpdCB3YXMgaW1wbGVtZW50ZWQgb24gc29tZXRoaW5nIHdoaWNoIHdhc24ndCBhIHN0cnVjdApvciBlbnVtIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzIxCiMhW2ZlYXR1cmUob3B0aW5fYnVpbHRpbl90cmFpdHMpXQoKc3RydWN0IEZvbzsKCmltcGwgIVN5bmMgZm9yIEZvbyB7fQoKdW5zYWZlIGltcGwgU2VuZCBmb3IgJidzdGF0aWMgRm9vIHt9Ci8vIGVycm9yOiBjcm9zcy1jcmF0ZSB0cmFpdHMgd2l0aCBhIGRlZmF1bHQgaW1wbCwgbGlrZSBgY29yZTo6bWFya2VyOjpTZW5kYCwKLy8gICAgICAgIGNhbiBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBhIHN0cnVjdC9lbnVtIHR5cGUsIG5vdAovLyAgICAgICAgYCYnc3RhdGljIEZvb2AKYGBgCgpPbmx5IHN0cnVjdHMgYW5kIGVudW1zIGFyZSBwZXJtaXR0ZWQgdG8gaW1wbCBTZW5kLCBTeW5jLCBhbmQgb3RoZXIgb3B0LW91dAp0cmFpdCwgYW5kIHRoZSBzdHJ1Y3Qgb3IgZW51bSBtdXN0IGJlIGxvY2FsIHRvIHRoZSBjdXJyZW50IGNyYXRlLiBTbywgZm9yCmV4YW1wbGUsIGB1bnNhZmUgaW1wbCBTZW5kIGZvciBSYzxGb28+YCBpcyBub3QgYWxsb3dlZC4KAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8f7wTvBAABAO8EAIU+JrYCAADgBAAAAOEEAAC9Ag4GAADfBAIFAQRTb21lAQEAnw4AAeAEAAC9Ag4GAALfBAABAKgCJAYAAN4EAQEAnw4AAgCpAhK1AgCfDgUBBUUwMzIxAAEfBQUAAQAFAKgCJAYAAN4EAQEBpA4AAd8EAAC0Pia4AgAA5QQAAAIAtD4muAIAnw4FAZcDVGhlIGBTaXplZGAgdHJhaXQgd2FzIGltcGxlbWVudGVkIGV4cGxpY2l0bHkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzIyCnN0cnVjdCBGb287CgppbXBsIFNpemVkIGZvciBGb28ge30gLy8gZXJyb3IhCmBgYAoKVGhlIGBTaXplZGAgdHJhaXQgaXMgYSBzcGVjaWFsIHRyYWl0IGJ1aWx0LWluIHRvIHRoZSBjb21waWxlciBmb3IgdHlwZXMgd2l0aCBhCmNvbnN0YW50IHNpemUga25vd24gYXQgY29tcGlsZS10aW1lLiBUaGlzIHRyYWl0IGlzIGF1dG9tYXRpY2FsbHkgaW1wbGVtZW50ZWQKZm9yIHR5cGVzIGFzIG5lZWRlZCBieSB0aGUgY29tcGlsZXIsIGFuZCBpdCBpcyBjdXJyZW50bHkgZGlzYWxsb3dlZCB0bwpleHBsaWNpdGx5IGltcGxlbWVudCBpdCBmb3IgYSB0eXBlLgoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wOXA5cDAAEAlwMAtD4muAIAAOQEAAAA5QQAAL0CDgYAAOMEAgUBBFNvbWUBAQCfDgAB5AQAAL0CDgYAAuMEAAEAqAIkBgAA4gQBAQCfDgACAKkCErcCAJ8OBQEFRTAzMjIAAR8FBQABAAUAqAIkBgAA4gQBAQGkDgAB4wQAAOM+JroCAADpBAAAAgDjPia6AgCfDgUB9gRBbiBhc3NvY2lhdGVkIGNvbnN0IHdhcyBpbXBsZW1lbnRlZCB3aGVuIGFub3RoZXIgdHJhaXQgaXRlbSB3YXMgZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzIzCnRyYWl0IEZvbyB7CiAgICB0eXBlIE47Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGNvbnN0IE4gOiB1MzIgPSAwOwogICAgLy8gZXJyb3I6IGl0ZW0gYE5gIGlzIGFuIGFzc29jaWF0ZWQgY29uc3QsIHdoaWNoIGRvZXNuJ3QgbWF0Y2ggaXRzCiAgICAvLyAgICAgICAgdHJhaXQgYDxCYXIgYXMgRm9vPmAKfQpgYGAKClBsZWFzZSB2ZXJpZnkgdGhhdCB0aGUgYXNzb2NpYXRlZCBjb25zdCB3YXNuJ3QgbWlzc3BlbGxlZCBhbmQgdGhlIGNvcnJlY3QgdHJhaXQKd2FzIGltcGxlbWVudGVkLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgdHlwZSBOOwp9CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIHR5cGUgTiA9IHUzMjsgLy8gb2shCn0KYGBgCgpPcjoKCmBgYApzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIGNvbnN0IE4gOiB1MzI7Cn0KCmltcGwgRm9vIGZvciBCYXIgewogICAgY29uc3QgTiA6IHUzMiA9IDA7IC8vIG9rIQp9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8f9gT2BAABAPYEAOM+JroCAADoBAAAAOkEAAC9Ag4GAADnBAIFAQRTb21lAQEAnw4AAegEAAC9Ag4GAALnBAABAKgCJAYAAOYEAQEAnw4AAgCpAhK5AgCfDgUBBUUwMzIzAAEfBQUAAQAFAKgCJAYAAOYEAQEBpA4AAecEAACSPya8AgAA7QQAAAIAkj8mvAIAnw4FAdsEQSBtZXRob2Qgd2FzIGltcGxlbWVudGVkIHdoZW4gYW5vdGhlciB0cmFpdCBpdGVtIHdhcyBleHBlY3RlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMjQKc3RydWN0IEJhcjsKCnRyYWl0IEZvbyB7CiAgICBjb25zdCBOIDogdTMyOwoKICAgIGZuIE0oKTsKfQoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBOKCkge30KICAgIC8vIGVycm9yOiBpdGVtIGBOYCBpcyBhbiBhc3NvY2lhdGVkIG1ldGhvZCwgd2hpY2ggZG9lc24ndCBtYXRjaCBpdHMKICAgIC8vICAgICAgICB0cmFpdCBgPEJhciBhcyBGb28+YAp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHBsZWFzZSB2ZXJpZnkgdGhhdCB0aGUgbWV0aG9kIG5hbWUgd2Fzbid0IG1pc3NwZWxsZWQgYW5kCnZlcmlmeSB0aGF0IHlvdSBhcmUgaW5kZWVkIGltcGxlbWVudGluZyB0aGUgY29ycmVjdCB0cmFpdCBpdGVtcy4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIGNvbnN0IE4gOiB1MzI7CgogICAgZm4gTSgpOwp9CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGNvbnN0IE4gOiB1MzIgPSAwOwoKICAgIGZuIE0oKSB7fSAvLyBvayEKfQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8/2wTbBAABANsEAJI/JrwCAADsBAAAAO0EAAC9Ag4GAADrBAIFAQRTb21lAQEAnw4AAewEAAC9Ag4GAALrBAABAKgCJAYAAOoEAQEAnw4AAgCpAhK7AgCfDgUBBUUwMzI0AAEfBQUAAQAFAKgCJAYAAOoEAQEBpA4AAesEAADBPya+AgAA8QQAAAIAwT8mvgIAnw4FAZAFQW4gYXNzb2NpYXRlZCB0eXBlIHdhcyBpbXBsZW1lbnRlZCB3aGVuIGFub3RoZXIgdHJhaXQgaXRlbSB3YXMgZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzI1CnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgY29uc3QgTiA6IHUzMjsKfQoKaW1wbCBGb28gZm9yIEJhciB7CiAgICB0eXBlIE4gPSB1MzI7CiAgICAvLyBlcnJvcjogaXRlbSBgTmAgaXMgYW4gYXNzb2NpYXRlZCB0eXBlLCB3aGljaCBkb2Vzbid0IG1hdGNoIGl0cwogICAgLy8gICAgICAgIHRyYWl0IGA8QmFyIGFzIEZvbz5gCn0KYGBgCgpQbGVhc2UgdmVyaWZ5IHRoYXQgdGhlIGFzc29jaWF0ZWQgdHlwZSBuYW1lIHdhc24ndCBtaXNzcGVsbGVkIGFuZCB5b3VyCmltcGxlbWVudGF0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSB0cmFpdCBkZWZpbml0aW9uLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgdHlwZSBOOwp9CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIHR5cGUgTiA9IHUzMjsgLy8gb2shCn0KYGBgCgpPcjoKCmBgYApzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIGNvbnN0IE4gOiB1MzI7Cn0KCmltcGwgRm9vIGZvciBCYXIgewogICAgY29uc3QgTiA6IHUzMiA9IDA7IC8vIG9rIQp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wOQBZAFAAEAkAUAwT8mvgIAAPAEAAAA8QQAAL0CDgYAAO8EAgUBBFNvbWUBAQCfDgAB8AQAAL0CDgYAAu8EAAEAqAIkBgAA7gQBAQCfDgACAKkCEr0CAJ8OBQEFRTAzMjUAAR8FBQABAAUAqAIkBgAA7gQBAQGkDgAB7wQAAPA/JsACAAD1BAAAAgDwPybAAgCfDgUB5AJBbiBpbXBsZW1lbnRhdGlvbiBvZiBhIHRyYWl0IGRvZXNuJ3QgbWF0Y2ggdGhlIHR5cGUgY29uc3RyYWludC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMjYKdHJhaXQgRm9vIHsKICAgIGNvbnN0IEJBUjogYm9vbDsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgY29uc3QgQkFSOiB1MzIgPSA1OyAvLyBlcnJvciwgZXhwZWN0ZWQgYm9vbCwgZm91bmQgdTMyCn0KYGBgCgpUaGUgdHlwZXMgb2YgYW55IGFzc29jaWF0ZWQgY29uc3RhbnRzIGluIGEgdHJhaXQgaW1wbGVtZW50YXRpb24gbXVzdCBtYXRjaCB0aGUKdHlwZXMgaW4gdGhlIHRyYWl0IGRlZmluaXRpb24uCgAG////////////Af///////////wH///////////8B////////////Af///////////wH//////wHkAuQCAAEA5AIA8D8mwAIAAPQEAAAA9QQAAL0CDgYAAPMEAgUBBFNvbWUBAQCfDgAB9AQAAL0CDgYAAvMEAAEAqAIkBgAA8gQBAQCfDgACAKkCEr8CAJ8OBQEFRTAzMjYAAR8FBQABAAUAqAIkBgAA8gQBAQGkDgAB8wQAAJ9AJsICAAD5BAAAAgCfQCbCAgCfDgUBzgZUaGUgVW5zaXplIHRyYWl0IHNob3VsZCBub3QgYmUgaW1wbGVtZW50ZWQgZGlyZWN0bHkuIEFsbCBpbXBsZW1lbnRhdGlvbnMgb2YKVW5zaXplIGFyZSBwcm92aWRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb21waWxlci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMjgKIyFbZmVhdHVyZSh1bnNpemUpXQoKdXNlIHN0ZDo6bWFya2VyOjpVbnNpemU7CgpwdWIgc3RydWN0IE15VHlwZTsKCmltcGw8VD4gVW5zaXplPFQ+IGZvciBNeVR5cGUge30KYGBgCgpJZiB5b3UgYXJlIGRlZmluaW5nIHlvdXIgb3duIHNtYXJ0IHBvaW50ZXIgdHlwZSBhbmQgd291bGQgbGlrZSB0byBlbmFibGUKY29udmVyc2lvbiBmcm9tIGEgc2l6ZWQgdG8gYW4gdW5zaXplZCB0eXBlIHdpdGggdGhlCltEU1QgY29lcmNpb24gc3lzdGVtXVtSRkMgOTgyXSwgdXNlIFtgQ29lcmNlVW5zaXplZGBdIGluc3RlYWQuCgpgYGAKIyFbZmVhdHVyZShjb2VyY2VfdW5zaXplZCldCgp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpwdWIgc3RydWN0IE15VHlwZTxUOiA/U2l6ZWQ+IHsKICAgIGZpZWxkX3dpdGhfdW5zaXplZF90eXBlOiBULAp9CgppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8TXlUeXBlPFU+PiBmb3IgTXlUeXBlPFQ+CiAgICB3aGVyZSBUOiBDb2VyY2VVbnNpemVkPFU+IHt9CmBgYAoKW1JGQyA5ODJdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8wOTgyLWRzdC1jb2VyY2lvbi5tZApbYENvZXJjZVVuc2l6ZWRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGQvb3BzL3RyYWl0LkNvZXJjZVVuc2l6ZWQuaHRtbAoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/f84GzgYAAQDOBgCfQCbCAgAA+AQAAAD5BAAAvQIOBgAA9wQCBQEEU29tZQEBAJ8OAAH4BAAAvQIOBgAC9wQAAQCoAiQGAAD2BAEBAJ8OAAIAqQISwQIAnw4FAQVFMDMyOAABHwUFAAEABQCoAiQGAAD2BAEBAaQOAAH3BAAAzkAmxAIAAP0EAAACAM5AJsQCAJ8OBQG5BSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gYWNjZXNzIGFuIGFzc29jaWF0ZWQgY29uc3RhbnQgdGhyb3VnaCBlaXRoZXIgYSBnZW5lcmljCnR5cGUgcGFyYW1ldGVyIG9yIGBTZWxmYC4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkIHlldC4gQW4gZXhhbXBsZSBjYXVzaW5nIHRoaXMKZXJyb3IgaXMgc2hvd24gYmVsb3c6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGNvbnN0IEJBUjogZjY0Owp9CgpzdHJ1Y3QgTXlTdHJ1Y3Q7CgppbXBsIEZvbyBmb3IgTXlTdHJ1Y3QgewogICAgY29uc3QgQkFSOiBmNjQgPSAwZjY0Owp9CgpmbiBnZXRfYmFyX2JhZDxGOiBGb28+KHQ6IEYpIC0+IGY2NCB7CiAgICBGOjpCQVIKfQpgYGAKCkN1cnJlbnRseSwgdGhlIHZhbHVlIG9mIGBCQVJgIGZvciBhIHBhcnRpY3VsYXIgdHlwZSBjYW4gb25seSBiZSBhY2Nlc3NlZAp0aHJvdWdoIGEgY29uY3JldGUgdHlwZSwgYXMgc2hvd24gYmVsb3c6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGNvbnN0IEJBUjogZjY0Owp9CgpzdHJ1Y3QgTXlTdHJ1Y3Q7CgppbXBsIEZvbyBmb3IgTXlTdHJ1Y3QgewogICAgY29uc3QgQkFSOiBmNjQgPSAwZjY0Owp9CgpmbiBnZXRfYmFyX2dvb2QoKSAtPiBmNjQgewogICAgPE15U3RydWN0IGFzIEZvbz46OkJBUgp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wG5BbkFAAEAuQUAzkAmxAIAAPwEAAAA/QQAAL0CDgYAAPsEAgUBBFNvbWUBAQCfDgAB/AQAAL0CDgYAAvsEAAEAqAIkBgAA+gQBAQCfDgACAKkCEsMCAJ8OBQEFRTAzMjkAAR8FBQABAAUAqAIkBgAA+gQBAQGkDgAB+wQAAP1AJsYCAACBBQAAAgD9QCbGAgCfDgUBqQVQcml2YXRlIGl0ZW1zIGNhbm5vdCBiZSBwdWJsaWNseSByZS1leHBvcnRlZC4gVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB5b3UKYXR0ZW1wdGVkIHRvIGBwdWIgdXNlYCBhIHR5cGUgb3IgdmFsdWUgdGhhdCB3YXMgbm90IGl0c2VsZiBwdWJsaWMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzY0Cm1vZCBhIHsKICAgIGZuIGZvbygpIHt9CgogICAgbW9kIGEgewogICAgICAgIHB1YiB1c2Ugc3VwZXI6OmZvbzsgLy8gZXJyb3IhCiAgICB9Cn0KYGBgCgpUaGUgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBpdGVtcyB0aGF0IHlvdSBhcmUKcmUtZXhwb3J0aW5nIGFyZSB0aGVtc2VsdmVzIG1hcmtlZCB3aXRoIGBwdWJgOgoKYGBgCm1vZCBhIHsKICAgIHB1YiBmbiBmb28oKSB7fSAvLyBvayEKCiAgICBtb2QgYSB7CiAgICAgICAgcHViIHVzZSBzdXBlcjo6Zm9vOwogICAgfQp9CmBgYAoKU2VlIHRoZSBbVXNlIERlY2xhcmF0aW9uc11bdXNlLWRlY2xhcmF0aW9uc10gc2VjdGlvbiBvZiB0aGUgcmVmZXJlbmNlIGZvcgptb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgdG9waWMuCgpbdXNlLWRlY2xhcmF0aW9uc106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2l0ZW1zL3VzZS1kZWNsYXJhdGlvbnMuaHRtbAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////z+pBakFAAEAqQUA/UAmxgIAAIAFAAAAgQUAAL0CDgYAAP8EAgUBBFNvbWUBAQCfDgABgAUAAL0CDgYAAv8EAAEAqAIkBgAA/gQBAQCfDgACAKkCEsUCAJ8OBQEFRTAzNjQAAR8FBQABAAUAqAIkBgAA/gQBAQGkDgAB/wQAAKxBJsgCAACFBQAAAgCsQSbIAgCfDgUBkQVQcml2YXRlIG1vZHVsZXMgY2Fubm90IGJlIHB1YmxpY2x5IHJlLWV4cG9ydGVkLiBUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHlvdQphdHRlbXB0ZWQgdG8gYHB1YiB1c2VgIGEgbW9kdWxlIHRoYXQgd2FzIG5vdCBpdHNlbGYgcHVibGljLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM2NQptb2QgZm9vIHsKICAgIHB1YiBjb25zdCBYOiB1MzIgPSAxOwp9CgpwdWIgdXNlIGZvbyBhcyBmb28yOwoKZm4gbWFpbigpIHt9CmBgYAoKVGhlIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcyB0byBlbnN1cmUgdGhhdCB0aGUgbW9kdWxlIHRoYXQgeW91IGFyZQpyZS1leHBvcnRpbmcgaXMgaXRzZWxmIG1hcmtlZCB3aXRoIGBwdWJgOgoKYGBgCnB1YiBtb2QgZm9vIHsKICAgIHB1YiBjb25zdCBYOiB1MzIgPSAxOwp9CgpwdWIgdXNlIGZvbyBhcyBmb28yOwoKZm4gbWFpbigpIHt9CmBgYAoKU2VlIHRoZSBbVXNlIERlY2xhcmF0aW9uc11bdXNlLWRlY2xhcmF0aW9uc10gc2VjdGlvbiBvZiB0aGUgcmVmZXJlbmNlIGZvcgptb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgdG9waWMuCgpbdXNlLWRlY2xhcmF0aW9uc106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2l0ZW1zL3VzZS1kZWNsYXJhdGlvbnMuaHRtbAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//weRBZEFAAEAkQUArEEmyAIAAIQFAAAAhQUAAL0CDgYAAIMFAgUBBFNvbWUBAQCfDgABhAUAAL0CDgYAAoMFAAEAqAIkBgAAggUBAQCfDgACAKkCEscCAJ8OBQEFRTAzNjUAAR8FBQABAAUAqAIkBgAAggUBAQGkDgABgwUAANtBJsoCAACJBQAAAgDbQSbKAgCfDgUBjARBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIGltcGxlbWVudCBgRHJvcGAgb24gYSBjb25jcmV0ZSBzcGVjaWFsaXphdGlvbiBvZiBhCmdlbmVyaWMgdHlwZS4gQW4gZXhhbXBsZSBpcyBzaG93biBiZWxvdzoKCmBgYGNvbXBpbGVfZmFpbCxFMDM2NgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIHQ6IFQKfQoKaW1wbCBEcm9wIGZvciBGb288dTMyPiB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQpgYGAKClRoaXMgY29kZSBpcyBub3QgbGVnYWw6IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBzcGVjaWFsaXplIGBEcm9wYCB0byBhIHN1YnNldCBvZgppbXBsZW1lbnRhdGlvbnMgb2YgYSBnZW5lcmljIHR5cGUuIE9uZSB3b3JrYXJvdW5kIGZvciB0aGlzIGlzIHRvIHdyYXAgdGhlCmdlbmVyaWMgdHlwZSwgYXMgc2hvd24gYmVsb3c6CgpgYGAKc3RydWN0IEZvbzxUPiB7CiAgICB0OiBUCn0KCnN0cnVjdCBCYXIgewogICAgdDogRm9vPHUzMj4KfQoKaW1wbCBEcm9wIGZvciBCYXIgewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/H4wEjAQAAQCMBADbQSbKAgAAiAUAAACJBQAAvQIOBgAAhwUCBQEEU29tZQEBAJ8OAAGIBQAAvQIOBgAChwUAAQCoAiQGAACGBQEBAJ8OAAIAqQISyQIAnw4FAQVFMDM2NgABHwUFAAEABQCoAiQGAACGBQEBAaQOAAGHBQAAikImzAIAAI0FAAACAIpCJswCAJ8OBQHYBUFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gaW1wbGVtZW50IGBEcm9wYCBvbiBhIHNwZWNpYWxpemF0aW9uIG9mIGEgZ2VuZXJpYyB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM2Nwp0cmFpdCBGb28ge30KCnN0cnVjdCBNeVN0cnVjdDxUPiB7CiAgICB0OiBUCn0KCmltcGw8VDogRm9vPiBEcm9wIGZvciBNeVN0cnVjdDxUPiB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQpgYGAKClRoaXMgY29kZSBpcyBub3QgbGVnYWw6IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBzcGVjaWFsaXplIGBEcm9wYCB0byBhIHN1YnNldCBvZgppbXBsZW1lbnRhdGlvbnMgb2YgYSBnZW5lcmljIHR5cGUuIEluIG9yZGVyIGZvciB0aGlzIGNvZGUgdG8gd29yaywgYE15U3RydWN0YAptdXN0IGFsc28gcmVxdWlyZSB0aGF0IGBUYCBpbXBsZW1lbnRzIGBGb29gLiBBbHRlcm5hdGl2ZWx5LCBhbm90aGVyIG9wdGlvbiBpcwp0byB3cmFwIHRoZSBnZW5lcmljIHR5cGUgaW4gYW5vdGhlciB0aGF0IHNwZWNpYWxpemVzIGFwcHJvcHJpYXRlbHk6CgpgYGAKdHJhaXQgRm9ve30KCnN0cnVjdCBNeVN0cnVjdDxUPiB7CiAgICB0OiBUCn0KCnN0cnVjdCBNeVN0cnVjdFdyYXBwZXI8VDogRm9vPiB7CiAgICB0OiBNeVN0cnVjdDxUPgp9CgppbXBsIDxUOiBGb28+IERyb3AgZm9yIE15U3RydWN0V3JhcHBlcjxUPiB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wfYBdgFAAEA2AUAikImzAIAAIwFAAAAjQUAAL0CDgYAAIsFAgUBBFNvbWUBAQCfDgABjAUAAL0CDgYAAosFAAEAqAIkBgAAigUBAQCfDgACAKkCEssCAJ8OBQEFRTAzNjcAAR8FBQABAAUAqAIkBgAAigUBAQGkDgABiwUAALlCJs4CAACRBQAAAgC5QibOAgCfDgUBvglBIGJpbmFyeSBhc3NpZ25tZW50IG9wZXJhdG9yIGxpa2UgYCs9YCBvciBgXj1gIHdhcyBhcHBsaWVkIHRvIGEgdHlwZSB0aGF0CmRvZXNuJ3Qgc3VwcG9ydCBpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNjgKbGV0IG11dCB4ID0gMTJmMzI7IC8vIGVycm9yOiBiaW5hcnkgb3BlcmF0aW9uIGA8PGAgY2Fubm90IGJlIGFwcGxpZWQgdG8KICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0eXBlIGBmMzJgCgp4IDw8PSAyOwpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgY2hlY2sgdGhhdCB0aGlzIHR5cGUgaW1wbGVtZW50cyB0aGlzIGJpbmFyeQpvcGVyYXRpb24uIEV4YW1wbGU6CgpgYGAKbGV0IG11dCB4ID0gMTJ1MzI7IC8vIHRoZSBgdTMyYCB0eXBlIGRvZXMgaW1wbGVtZW50IHRoZSBgU2hsQXNzaWduYCB0cmFpdAoKeCA8PD0gMjsgLy8gb2shCmBgYAoKSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBvdmVybG9hZCBtb3N0IG9wZXJhdG9ycyBmb3IgeW91ciBvd24gdHlwZSBieQppbXBsZW1lbnRpbmcgdGhlIGBbT1BdQXNzaWduYCB0cmFpdHMgZnJvbSBgc3RkOjpvcHNgLgoKQW5vdGhlciBwcm9ibGVtIHlvdSBtaWdodCBiZSBmYWNpbmcgaXMgdGhpczogc3VwcG9zZSB5b3UndmUgb3ZlcmxvYWRlZCB0aGUgYCtgCm9wZXJhdG9yIGZvciBzb21lIHR5cGUgYEZvb2AgYnkgaW1wbGVtZW50aW5nIHRoZSBgc3RkOjpvcHM6OkFkZGAgdHJhaXQgZm9yCmBGb29gLCBidXQgeW91IGZpbmQgdGhhdCB1c2luZyBgKz1gIGRvZXMgbm90IHdvcmssIGFzIGluIHRoaXMgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM2OAp1c2Ugc3RkOjpvcHM6OkFkZDsKCnN0cnVjdCBGb28odTMyKTsKCmltcGwgQWRkIGZvciBGb28gewogICAgdHlwZSBPdXRwdXQgPSBGb287CgogICAgZm4gYWRkKHNlbGYsIHJoczogRm9vKSAtPiBGb28gewogICAgICAgIEZvbyhzZWxmLjAgKyByaHMuMCkKICAgIH0KfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgeDogRm9vID0gRm9vKDUpOwogICAgeCArPSBGb28oNyk7IC8vIGVycm9yLCBgKz0gY2Fubm90IGJlIGFwcGxpZWQgdG8gdGhlIHR5cGUgYEZvb2AKfQpgYGAKClRoaXMgaXMgYmVjYXVzZSBgQWRkQXNzaWduYCBpcyBub3QgYXV0b21hdGljYWxseSBpbXBsZW1lbnRlZCwgc28geW91IG5lZWQgdG8KbWFudWFsbHkgaW1wbGVtZW50IGl0IGZvciB5b3VyIHR5cGUuCgAT////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8/vgm+CQABAL4JALlCJs4CAACQBQAAAJEFAAC9Ag4GAACPBQIFAQRTb21lAQEAnw4AAZAFAAC9Ag4GAAKPBQABAKgCJAYAAI4FAQEAnw4AAgCpAhLNAgCfDgUBBUUwMzY4AAEfBQUAAQAFAKgCJAYAAI4FAQEBpA4AAY8FAADoQibQAgAAlQUAAAIA6EIm0AIAnw4FAfsGQSBiaW5hcnkgb3BlcmF0aW9uIHdhcyBhdHRlbXB0ZWQgb24gYSB0eXBlIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNjkKbGV0IHggPSAxMmYzMjsgLy8gZXJyb3I6IGJpbmFyeSBvcGVyYXRpb24gYDw8YCBjYW5ub3QgYmUgYXBwbGllZCB0bwogICAgICAgICAgICAgICAvLyAgICAgICAgdHlwZSBgZjMyYAoKeCA8PCAyOwpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgY2hlY2sgdGhhdCB0aGlzIHR5cGUgaW1wbGVtZW50cyB0aGlzIGJpbmFyeQpvcGVyYXRpb24uIEV4YW1wbGU6CgpgYGAKbGV0IHggPSAxMnUzMjsgLy8gdGhlIGB1MzJgIHR5cGUgZG9lcyBpbXBsZW1lbnQgaXQ6CiAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RhYmxlL3N0ZC9vcHMvdHJhaXQuU2hsLmh0bWwKCnggPDwgMjsgLy8gb2shCmBgYAoKSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBvdmVybG9hZCBtb3N0IG9wZXJhdG9ycyBmb3IgeW91ciBvd24gdHlwZSBieQppbXBsZW1lbnRpbmcgdHJhaXRzIGZyb20gYHN0ZDo6b3BzYC4KClN0cmluZyBjb25jYXRlbmF0aW9uIGFwcGVuZHMgdGhlIHN0cmluZyBvbiB0aGUgcmlnaHQgdG8gdGhlIHN0cmluZyBvbiB0aGUKbGVmdCBhbmQgbWF5IHJlcXVpcmUgcmVhbGxvY2F0aW9uLiBUaGlzIHJlcXVpcmVzIG93bmVyc2hpcCBvZiB0aGUgc3RyaW5nCm9uIHRoZSBsZWZ0LiBJZiBzb21ldGhpbmcgc2hvdWxkIGJlIGFkZGVkIHRvIGEgc3RyaW5nIGxpdGVyYWwsIG1vdmUgdGhlCmxpdGVyYWwgdG8gdGhlIGhlYXAgYnkgYWxsb2NhdGluZyBpdCB3aXRoIGB0b19vd25lZCgpYCBsaWtlIGluCmAiWW91ciB0ZXh0Ii50b19vd25lZCgpYC4KAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8H+wb7BgABAPsGAOhCJtACAACUBQAAAJUFAAC9Ag4GAACTBQIFAQRTb21lAQEAnw4AAZQFAAC9Ag4GAAKTBQABAKgCJAYAAJIFAQEAnw4AAgCpAhLPAgCfDgUBBUUwMzY5AAEfBQUAAQAFAKgCJAYAAJIFAQEBpA4AAZMFAACXQybSAgAAmQUAAAIAl0Mm0gIAnw4FAbwFVGhlIG1heGltdW0gdmFsdWUgb2YgYW4gZW51bSB3YXMgcmVhY2hlZCwgc28gaXQgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkKc2V0IGluIHRoZSBuZXh0IGVudW0gdmFsdWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzcwCiNbcmVwcihpNjQpXQplbnVtIEZvbyB7CiAgICBYID0gMHg3ZmZmZmZmZmZmZmZmZmZmLAogICAgWSwgLy8gZXJyb3I6IGVudW0gZGlzY3JpbWluYW50IG92ZXJmbG93ZWQgb24gdmFsdWUgYWZ0ZXIKICAgICAgIC8vICAgICAgICA5MjIzMzcyMDM2ODU0Nzc1ODA3OiBpNjQ7IHNldCBleHBsaWNpdGx5IHZpYQogICAgICAgLy8gICAgICAgIFkgPSAtOTIyMzM3MjAzNjg1NDc3NTgwOCBpZiB0aGF0IGlzIGRlc2lyZWQgb3V0Y29tZQp9CmBgYAoKVG8gZml4IHRoaXMsIHBsZWFzZSBzZXQgbWFudWFsbHkgdGhlIG5leHQgZW51bSB2YWx1ZSBvciBwdXQgdGhlIGVudW0gdmFyaWFudAp3aXRoIHRoZSBtYXhpbXVtIHZhbHVlIGF0IHRoZSBlbmQgb2YgdGhlIGVudW0uIEV4YW1wbGVzOgoKYGBgCiNbcmVwcihpNjQpXQplbnVtIEZvbyB7CiAgICBYID0gMHg3ZmZmZmZmZmZmZmZmZmZmLAogICAgWSA9IDAsIC8vIG9rIQp9CmBgYAoKT3I6CgpgYGAKI1tyZXByKGk2NCldCmVudW0gRm9vIHsKICAgIFkgPSAwLCAvLyBvayEKICAgIFggPSAweDdmZmZmZmZmZmZmZmZmZmYsCn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////D7wFvAUAAQC8BQCXQybSAgAAmAUAAACZBQAAvQIOBgAAlwUCBQEEU29tZQEBAJ8OAAGYBQAAvQIOBgAClwUAAQCoAiQGAACWBQEBAJ8OAAIAqQIS0QIAnw4FAQVFMDM3MAABHwUFAAEABQCoAiQGAACWBQEBAaQOAAGXBQAAxkMm1AIAAJ0FAAACAMZDJtQCAJ8OBQHdBUEgdHJhaXQgd2FzIGltcGxlbWVudGVkIG9uIGFub3RoZXIgd2hpY2ggYWxyZWFkeSBhdXRvbWF0aWNhbGx5IGltcGxlbWVudGVkIGl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzEKdHJhaXQgRm9vIHsgZm4gZm9vKCZzZWxmKSB7IH0gfQp0cmFpdCBCYXI6IEZvbyB7IH0KdHJhaXQgQmF6OiBCYXIgeyB9CgppbXBsIEJhciBmb3IgQmF6IHsgfSAvLyBlcnJvciwgYEJhemAgaW1wbGVtZW50cyBgQmFyYCBieSBkZWZpbml0aW9uCmltcGwgRm9vIGZvciBCYXogeyB9IC8vIGVycm9yLCBgQmF6YCBpbXBsZW1lbnRzIGBCYXJgIHdoaWNoIGltcGxlbWVudHMgYEZvb2AKaW1wbCBCYXogZm9yIEJheiB7IH0gLy8gZXJyb3IsIGBCYXpgICh0cml2aWFsbHkpIGltcGxlbWVudHMgYEJhemAKaW1wbCBCYXogZm9yIEJhciB7IH0gLy8gTm90ZTogVGhpcyBpcyBPSwpgYGAKCldoZW4gYFRyYWl0MmAgaXMgYSBzdWJ0cmFpdCBvZiBgVHJhaXQxYCAoZm9yIGV4YW1wbGUsIHdoZW4gYFRyYWl0MmAgaGFzIGEKZGVmaW5pdGlvbiBsaWtlIGB0cmFpdCBUcmFpdDI6IFRyYWl0MSB7IC4uLiB9YCksIGl0IGlzIG5vdCBhbGxvd2VkIHRvIGltcGxlbWVudApgVHJhaXQxYCBmb3IgYFRyYWl0MmAuIFRoaXMgaXMgYmVjYXVzZSBgVHJhaXQyYCBhbHJlYWR5IGltcGxlbWVudHMgYFRyYWl0MWAgYnkKZGVmaW5pdGlvbiwgc28gaXQgaXMgbm90IHVzZWZ1bCB0byBkbyB0aGlzLgoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wHdBd0FAAEA3QUAxkMm1AIAAJwFAAAAnQUAAL0CDgYAAJsFAgUBBFNvbWUBAQCfDgABnAUAAL0CDgYAApsFAAEAqAIkBgAAmgUBAQCfDgACAKkCEtMCAJ8OBQEFRTAzNzEAAR8FBQABAAUAqAIkBgAAmgUBAQGkDgABmwUAAPVDJtYCAAChBQAAAgD1QybWAgCfDgUBuAxBIGNhcHR1cmVkIHZhcmlhYmxlIGluIGEgY2xvc3VyZSBtYXkgbm90IGxpdmUgbG9uZyBlbm91Z2guCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzczCmZuIGZvbygpIC0+IEJveDxGbih1MzIpIC0+IHUzMj4gewogICAgbGV0IHggPSAwdTMyOwogICAgQm94OjpuZXcofHl8IHggKyB5KQp9CmBgYAoKVGhpcyBlcnJvciBvY2N1cnMgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gdXNlIGRhdGEgY2FwdHVyZWQgYnkgYSBjbG9zdXJlLAp3aGVuIHRoYXQgZGF0YSBtYXkgbm8gbG9uZ2VyIGV4aXN0LiBJdCdzIG1vc3QgY29tbW9ubHkgc2VlbiB3aGVuIGF0dGVtcHRpbmcgdG8KcmV0dXJuIGEgY2xvc3VyZSBhcyBzaG93biBpbiB0aGUgcHJldmlvdXMgY29kZSBleGFtcGxlLgoKTm90aWNlIHRoYXQgYHhgIGlzIHN0YWNrLWFsbG9jYXRlZCBieSBgZm9vKClgLiBCeSBkZWZhdWx0LCBSdXN0IGNhcHR1cmVzCmNsb3NlZC1vdmVyIGRhdGEgYnkgcmVmZXJlbmNlLiBUaGlzIG1lYW5zIHRoYXQgb25jZSBgZm9vKClgIHJldHVybnMsIGB4YCBubwpsb25nZXIgZXhpc3RzLiBBbiBhdHRlbXB0IHRvIGFjY2VzcyBgeGAgd2l0aGluIHRoZSBjbG9zdXJlIHdvdWxkIHRodXMgYmUKdW5zYWZlLgoKQW5vdGhlciBzaXR1YXRpb24gd2hlcmUgdGhpcyBtaWdodCBiZSBlbmNvdW50ZXJlZCBpcyB3aGVuIHNwYXduaW5nIHRocmVhZHM6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzMKZm4gZm9vKCkgewogICAgbGV0IHggPSAwdTMyOwogICAgbGV0IHkgPSAxdTMyOwoKICAgIGxldCB0aHIgPSBzdGQ6OnRocmVhZDo6c3Bhd24ofHwgewogICAgICAgIHggKyB5CiAgICB9KTsKfQpgYGAKClNpbmNlIG91ciBuZXcgdGhyZWFkIHJ1bnMgaW4gcGFyYWxsZWwsIHRoZSBzdGFjayBmcmFtZSBjb250YWluaW5nIGB4YCBhbmQgYHlgCm1heSB3ZWxsIGhhdmUgZGlzYXBwZWFyZWQgYnkgdGhlIHRpbWUgd2UgdHJ5IHRvIHVzZSB0aGVtLiBFdmVuIGlmIHdlIGNhbGwKYHRoci5qb2luKClgIHdpdGhpbiBmb28gKHdoaWNoIGJsb2NrcyB1bnRpbCBgdGhyYCBoYXMgY29tcGxldGVkLCBlbnN1cmluZyB0aGUKc3RhY2sgZnJhbWUgd29uJ3QgZGlzYXBwZWFyKSwgd2Ugd2lsbCBub3Qgc3VjY2VlZDogdGhlIGNvbXBpbGVyIGNhbm5vdCBwcm92ZQp0aGF0IHRoaXMgYmVoYXZpb3IgaXMgc2FmZSwgYW5kIHNvIHdvbid0IGxldCB1cyBkbyBpdC4KClRoZSBzb2x1dGlvbiB0byB0aGlzIHByb2JsZW0gaXMgdXN1YWxseSB0byBzd2l0Y2ggdG8gdXNpbmcgYSBgbW92ZWAgY2xvc3VyZS4KVGhpcyBhcHByb2FjaCBtb3ZlcyAob3IgY29waWVzLCB3aGVyZSBwb3NzaWJsZSkgZGF0YSBpbnRvIHRoZSBjbG9zdXJlLCByYXRoZXIKdGhhbiB0YWtpbmcgcmVmZXJlbmNlcyB0byBpdC4gRm9yIGV4YW1wbGU6CgpgYGAKZm4gZm9vKCkgLT4gQm94PEZuKHUzMikgLT4gdTMyPiB7CiAgICBsZXQgeCA9IDB1MzI7CiAgICBCb3g6Om5ldyhtb3ZlIHx5fCB4ICsgeSkKfQpgYGAKCk5vdyB0aGF0IHRoZSBjbG9zdXJlIGhhcyBpdHMgb3duIGNvcHkgb2YgdGhlIGRhdGEsIHRoZXJlJ3Mgbm8gbmVlZCB0byB3b3JyeQphYm91dCBzYWZldHkuCgAZ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////3+4DLgMAAEAuAwA9UMm1gIAAKAFAAAAoQUAAL0CDgYAAJ8FAgUBBFNvbWUBAQCfDgABoAUAAL0CDgYAAp8FAAEAqAIkBgAAngUBAQCfDgACAKkCEtUCAJ8OBQEFRTAzNzMAAR8FBQABAAUAqAIkBgAAngUBAQGkDgABnwUAAKREJtgCAAClBQAAAgCkRCbYAgCfDgUB0QxgQ29lcmNlVW5zaXplZGAgd2FzIGltcGxlbWVudGVkIG9uIGEgc3RydWN0IHdoaWNoIGRvZXMgbm90IGNvbnRhaW4gYSBmaWVsZCB3aXRoCmFuIHVuc2l6ZWQgdHlwZS4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzQKIyFbZmVhdHVyZShjb2VyY2VfdW5zaXplZCldCnVzZSBzdGQ6Om9wczo6Q29lcmNlVW5zaXplZDsKCnN0cnVjdCBGb288VDogP1NpemVkPiB7CiAgICBhOiBpMzIsCn0KCi8vIGVycm9yOiBTdHJ1Y3QgYEZvb2AgaGFzIG5vIHVuc2l6ZWQgZmllbGRzIHRoYXQgbmVlZCBgQ29lcmNlVW5zaXplZGAuCmltcGw8VCwgVT4gQ29lcmNlVW5zaXplZDxGb288VT4+IGZvciBGb288VD4KICAgIHdoZXJlIFQ6IENvZXJjZVVuc2l6ZWQ8VT4ge30KYGBgCgpBbiBbdW5zaXplZCB0eXBlXVsxXSBpcyBhbnkgdHlwZSB3aGVyZSB0aGUgY29tcGlsZXIgZG9lcyBub3Qga25vdyB0aGUgbGVuZ3RoIG9yCmFsaWdubWVudCBvZiBhdCBjb21waWxlIHRpbWUuIEFueSBzdHJ1Y3QgY29udGFpbmluZyBhbiB1bnNpemVkIHR5cGUgaXMgYWxzbwp1bnNpemVkLgoKWzFdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxOS0wNC1hZHZhbmNlZC10eXBlcy5odG1sI2R5bmFtaWNhbGx5LXNpemVkLXR5cGVzLWFuZC10aGUtc2l6ZWQtdHJhaXQKCmBDb2VyY2VVbnNpemVkYCBpcyB1c2VkIHRvIGNvZXJjZSBvbmUgc3RydWN0IGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlCmludG8gYW5vdGhlciBzdHJ1Y3QgY29udGFpbmluZyBhIGRpZmZlcmVudCB1bnNpemVkIHR5cGUuIElmIHRoZSBzdHJ1Y3QKZG9lc24ndCBoYXZlIGFueSBmaWVsZHMgb2YgdW5zaXplZCB0eXBlcyB0aGVuIHlvdSBkb24ndCBuZWVkIGV4cGxpY2l0CmNvZXJjaW9uIHRvIGdldCB0aGUgdHlwZXMgeW91IHdhbnQuIFRvIGZpeCB0aGlzIHlvdSBjYW4gZWl0aGVyCm5vdCB0cnkgdG8gaW1wbGVtZW50IGBDb2VyY2VVbnNpemVkYCBvciB5b3UgY2FuIGFkZCBhIGZpZWxkIHRoYXQgaXMKdW5zaXplZCB0byB0aGUgc3RydWN0LgoKRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGNvZXJjZV91bnNpemVkKV0KdXNlIHN0ZDo6b3BzOjpDb2VyY2VVbnNpemVkOwoKLy8gV2UgZG9uJ3QgbmVlZCB0byBpbXBsIGBDb2VyY2VVbnNpemVkYCBoZXJlLgpzdHJ1Y3QgRm9vIHsKICAgIGE6IGkzMiwKfQoKLy8gV2UgYWRkIHRoZSB1bnNpemVkIHR5cGUgZmllbGQgdG8gdGhlIHN0cnVjdC4Kc3RydWN0IEJhcjxUOiA/U2l6ZWQ+IHsKICAgIGE6IGkzMiwKICAgIGI6IFQsCn0KCi8vIFRoZSBzdHJ1Y3QgaGFzIGFuIHVuc2l6ZWQgZmllbGQgc28gd2UgY2FuIGltcGxlbWVudAovLyBgQ29lcmNlVW5zaXplZGAgZm9yIGl0LgppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8QmFyPFU+PiBmb3IgQmFyPFQ+CiAgICB3aGVyZSBUOiBDb2VyY2VVbnNpemVkPFU+IHt9CmBgYAoKTm90ZSB0aGF0IGBDb2VyY2VVbnNpemVkYCBpcyBtYWlubHkgdXNlZCBieSBzbWFydCBwb2ludGVycyBsaWtlIGBCb3hgLCBgUmNgCmFuZCBgQXJjYCB0byBiZSBhYmxlIHRvIG1hcmsgdGhhdCB0aGV5IGNhbiBjb2VyY2UgdW5zaXplZCB0eXBlcyB0aGF0IHRoZXkKYXJlIHBvaW50aW5nIGF0LgoAGv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wfRDNEMAAEA0QwApEQm2AIAAKQFAAAApQUAAL0CDgYAAKMFAgUBBFNvbWUBAQCfDgABpAUAAL0CDgYAAqMFAAEAqAIkBgAAogUBAQCfDgACAKkCEtcCAJ8OBQEFRTAzNzQAAR8FBQABAAUAqAIkBgAAogUBAQGkDgABowUAANNEJtoCAACpBQAAAgDTRCbaAgCfDgUBmg5gQ29lcmNlVW5zaXplZGAgd2FzIGltcGxlbWVudGVkIG9uIGEgc3RydWN0IHdoaWNoIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgZmllbGQKd2l0aCBhbiB1bnNpemVkIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzc1CiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ6ID9TaXplZCwgVTogP1NpemVkPiB7CiAgICBhOiBpMzIsCiAgICBiOiBULAogICAgYzogVSwKfQoKLy8gZXJyb3I6IFN0cnVjdCBgRm9vYCBoYXMgbW9yZSB0aGFuIG9uZSB1bnNpemVkIGZpZWxkLgppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8Rm9vPFUsIFQ+PiBmb3IgRm9vPFQsIFU+IHt9CmBgYAoKQSBzdHJ1Y3Qgd2l0aCBtb3JlIHRoYW4gb25lIGZpZWxkIGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlIGNhbm5vdCBpbXBsZW1lbnQKYENvZXJjZVVuc2l6ZWRgLiBUaGlzIG9ubHkgb2NjdXJzIHdoZW4geW91IGFyZSB0cnlpbmcgdG8gY29lcmNlIG9uZSBvZiB0aGUKdHlwZXMgaW4geW91ciBzdHJ1Y3QgdG8gYW5vdGhlciB0eXBlIGluIHRoZSBzdHJ1Y3QuIEluIHRoaXMgY2FzZSB3ZSB0cnkgdG8KaW1wbCBgQ29lcmNlVW5zaXplZGAgZnJvbSBgVGAgdG8gYFVgIHdoaWNoIGFyZSBib3RoIHR5cGVzIHRoYXQgdGhlIHN0cnVjdAp0YWtlcy4gQW4gW3Vuc2l6ZWQgdHlwZV1bMV0gaXMgYW55IHR5cGUgdGhhdCB0aGUgY29tcGlsZXIgZG9lc24ndCBrbm93IHRoZQpsZW5ndGggb3IgYWxpZ25tZW50IG9mIGF0IGNvbXBpbGUgdGltZS4gQW55IHN0cnVjdCBjb250YWluaW5nIGFuIHVuc2l6ZWQgdHlwZQppcyBhbHNvIHVuc2l6ZWQuCgpgQ29lcmNlVW5zaXplZGAgb25seSBhbGxvd3MgZm9yIGNvZXJjaW9uIGZyb20gYSBzdHJ1Y3R1cmUgd2l0aCBhIHNpbmdsZQp1bnNpemVkIHR5cGUgZmllbGQgdG8gYW5vdGhlciBzdHJ1Y3Qgd2l0aCBhIHNpbmdsZSB1bnNpemVkIHR5cGUgZmllbGQuCkluIGZhY3QgUnVzdCBvbmx5IGFsbG93cyBmb3IgYSBzdHJ1Y3QgdG8gaGF2ZSBvbmUgdW5zaXplZCB0eXBlIGluIGEgc3RydWN0CmFuZCB0aGF0IHVuc2l6ZWQgdHlwZSBtdXN0IGJlIHRoZSBsYXN0IGZpZWxkIGluIHRoZSBzdHJ1Y3QuIFNvIGhhdmluZyB0d28KdW5zaXplZCB0eXBlcyBpbiBhIHNpbmdsZSBzdHJ1Y3QgaXMgbm90IGFsbG93ZWQgYnkgdGhlIGNvbXBpbGVyLiBUbyBmaXggdGhpcwp1c2Ugb25seSBvbmUgZmllbGQgY29udGFpbmluZyBhbiB1bnNpemVkIHR5cGUgaW4gdGhlIHN0cnVjdCBhbmQgdGhlbiB1c2UKbXVsdGlwbGUgc3RydWN0cyB0byBtYW5hZ2UgZWFjaCB1bnNpemVkIHR5cGUgZmllbGQgeW91IG5lZWQuCgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ6ID9TaXplZD4gewogICAgYTogaTMyLAogICAgYjogVCwKfQoKaW1wbCA8VCwgVT4gQ29lcmNlVW5zaXplZDxGb288VT4+IGZvciBGb288VD4KICAgIHdoZXJlIFQ6IENvZXJjZVVuc2l6ZWQ8VT4ge30KCmZuIGNvZXJjZV9mb288VDogQ29lcmNlVW5zaXplZDxVPiwgVT4odDogVCkgLT4gRm9vPFU+IHsKICAgIEZvbyB7IGE6IDEyaTMyLCBiOiB0IH0gLy8gd2UgdXNlIGNvZXJjaW9uIHRvIGdldCB0aGUgYEZvbzxVPmAgdHlwZSB3ZSBuZWVkCn0KYGBgCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDE5LTA0LWFkdmFuY2VkLXR5cGVzLmh0bWwjZHluYW1pY2FsbHktc2l6ZWQtdHlwZXMtYW5kLXRoZS1zaXplZC10cmFpdAoAHf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8fmg6aDgABAJoOANNEJtoCAACoBQAAAKkFAAC9Ag4GAACnBQIFAQRTb21lAQEAnw4AAagFAAC9Ag4GAAKnBQABAKgCJAYAAKYFAQEAnw4AAgCpAhLZAgCfDgUBBUUwMzc1AAEfBQUAAQAFAKgCJAYAAKYFAQEBpA4AAacFAACCRSbcAgAArQUAAAIAgkUm3AIAnw4FAfoKYENvZXJjZVVuc2l6ZWRgIHdhcyBpbXBsZW1lbnRlZCBvbiBzb21ldGhpbmcgdGhhdCBpc24ndCBhIHN0cnVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzYKIyFbZmVhdHVyZShjb2VyY2VfdW5zaXplZCldCnVzZSBzdGQ6Om9wczo6Q29lcmNlVW5zaXplZDsKCnN0cnVjdCBGb288VDogP1NpemVkPiB7CiAgICBhOiBULAp9CgovLyBlcnJvcjogVGhlIHR5cGUgYFVgIGlzIG5vdCBhIHN0cnVjdAppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8VT4gZm9yIEZvbzxUPiB7fQpgYGAKCmBDb2VyY2VVbnNpemVkYCBjYW4gb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgYSBzdHJ1Y3QuIFVuc2l6ZWQgdHlwZXMgYXJlCmFscmVhZHkgYWJsZSB0byBiZSBjb2VyY2VkIHdpdGhvdXQgYW4gaW1wbGVtZW50YXRpb24gb2YgYENvZXJjZVVuc2l6ZWRgCndoZXJlYXMgYSBzdHJ1Y3QgY29udGFpbmluZyBhbiB1bnNpemVkIHR5cGUgbmVlZHMgdG8ga25vdyB0aGUgdW5zaXplZCB0eXBlCmZpZWxkIGl0J3MgY29udGFpbmluZyBpcyBhYmxlIHRvIGJlIGNvZXJjZWQuIEFuIFt1bnNpemVkIHR5cGVdWzFdCmlzIGFueSB0eXBlIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXNuJ3Qga25vdyB0aGUgbGVuZ3RoIG9yIGFsaWdubWVudCBvZiBhdApjb21waWxlIHRpbWUuIEFueSBzdHJ1Y3QgY29udGFpbmluZyBhbiB1bnNpemVkIHR5cGUgaXMgYWxzbyB1bnNpemVkLgoKWzFdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxOS0wNC1hZHZhbmNlZC10eXBlcy5odG1sI2R5bmFtaWNhbGx5LXNpemVkLXR5cGVzLWFuZC10aGUtc2l6ZWQtdHJhaXQKClRoZSBgQ29lcmNlVW5zaXplZGAgdHJhaXQgdGFrZXMgYSBzdHJ1Y3QgdHlwZS4gTWFrZSBzdXJlIHRoZSB0eXBlIHlvdSBhcmUKcHJvdmlkaW5nIHRvIGBDb2VyY2VVbnNpemVkYCBpcyBhIHN0cnVjdCB3aXRoIG9ubHkgdGhlIGxhc3QgZmllbGQgY29udGFpbmluZyBhbgp1bnNpemVkIHR5cGUuCgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGE6IFQsCn0KCi8vIFRoZSBgRm9vPFU+YCBpcyBhIHN0cnVjdCBzbyBgQ29lcmNlVW5zaXplZGAgY2FuIGJlIGltcGxlbWVudGVkCmltcGw8VCwgVT4gQ29lcmNlVW5zaXplZDxGb288VT4+IGZvciBGb288VD4gd2hlcmUgVDogQ29lcmNlVW5zaXplZDxVPiB7fQpgYGAKCk5vdGUgdGhhdCBpbiBSdXN0LCBzdHJ1Y3RzIGNhbiBvbmx5IGNvbnRhaW4gYW4gdW5zaXplZCB0eXBlIGlmIHRoZSBmaWVsZApjb250YWluaW5nIHRoZSB1bnNpemVkIHR5cGUgaXMgdGhlIGxhc3QgYW5kIG9ubHkgdW5zaXplZCB0eXBlIGZpZWxkIGluIHRoZQpzdHJ1Y3QuCgAW////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8D+gr6CgABAPoKAIJFJtwCAACsBQAAAK0FAAC9Ag4GAACrBQIFAQRTb21lAQEAnw4AAawFAAC9Ag4GAAKrBQABAKgCJAYAAKoFAQEAnw4AAgCpAhLbAgCfDgUBBUUwMzc2AAEfBQUAAQAFAKgCJAYAAKoFAQEBpA4AAasFAACxRSbeAgAAsQUAAAIAsUUm3gIAnw4FAaoJVGhlIGBEaXNwYXRjaEZyb21EeW5gIHRyYWl0IHdhcyBpbXBsZW1lbnRlZCBvbiBzb21ldGhpbmcgd2hpY2ggaXMgbm90IGEgcG9pbnRlcgpvciBhIG5ld3R5cGUgd3JhcHBlciBhcm91bmQgYSBwb2ludGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM3OAojIVtmZWF0dXJlKGRpc3BhdGNoX2Zyb21fZHluKV0KdXNlIHN0ZDo6b3BzOjpEaXNwYXRjaEZyb21EeW47CgpzdHJ1Y3QgV3JhcHBlckV4dHJhRmllbGQ8VD4gewogICAgcHRyOiBULAogICAgZXh0cmFfc3R1ZmY6IGkzMiwKfQoKaW1wbDxULCBVPiBEaXNwYXRjaEZyb21EeW48V3JhcHBlckV4dHJhRmllbGQ8VT4+IGZvciBXcmFwcGVyRXh0cmFGaWVsZDxUPgp3aGVyZQogICAgVDogRGlzcGF0Y2hGcm9tRHluPFU+LAp7fQpgYGAKClRoZSBgRGlzcGF0Y2hGcm9tRHluYCB0cmFpdCBjdXJyZW50bHkgY2FuIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yCmJ1aWx0aW4gcG9pbnRlciB0eXBlcyBhbmQgc3RydWN0cyB0aGF0IGFyZSBuZXd0eXBlIHdyYXBwZXJzIGFyb3VuZCB0aGVtCuKAlCB0aGF0IGlzLCB0aGUgc3RydWN0IG11c3QgaGF2ZSBvbmx5IG9uZSBmaWVsZCAoZXhjZXB0IGZvcmBQaGFudG9tRGF0YWApLAphbmQgdGhhdCBmaWVsZCBtdXN0IGl0c2VsZiBpbXBsZW1lbnQgYERpc3BhdGNoRnJvbUR5bmAuCgpgYGAKIyFbZmVhdHVyZShkaXNwYXRjaF9mcm9tX2R5biwgdW5zaXplKV0KdXNlIHN0ZDo6ewogICAgbWFya2VyOjpVbnNpemUsCiAgICBvcHM6OkRpc3BhdGNoRnJvbUR5biwKfTsKCnN0cnVjdCBQdHI8VDogP1NpemVkPigqY29uc3QgVCk7CgppbXBsPFQ6ID9TaXplZCwgVTogP1NpemVkPiBEaXNwYXRjaEZyb21EeW48UHRyPFU+PiBmb3IgUHRyPFQ+CndoZXJlCiAgICBUOiBVbnNpemU8VT4sCnt9CmBgYAoKQW5vdGhlciBleGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoZGlzcGF0Y2hfZnJvbV9keW4pXQp1c2Ugc3RkOjp7CiAgICBvcHM6OkRpc3BhdGNoRnJvbUR5biwKICAgIG1hcmtlcjo6UGhhbnRvbURhdGEsCn07CgpzdHJ1Y3QgV3JhcHBlcjxUPiB7CiAgICBwdHI6IFQsCiAgICBfcGhhbnRvbTogUGhhbnRvbURhdGE8KCk+LAp9CgppbXBsPFQsIFU+IERpc3BhdGNoRnJvbUR5bjxXcmFwcGVyPFU+PiBmb3IgV3JhcHBlcjxUPgp3aGVyZQogICAgVDogRGlzcGF0Y2hGcm9tRHluPFU+LAp7fQpgYGAKABP///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////3+qCaoJAAEAqgkAsUUm3gIAALAFAAAAsQUAAL0CDgYAAK8FAgUBBFNvbWUBAQCfDgABsAUAAL0CDgYAAq8FAAEAqAIkBgAArgUBAQCfDgACAKkCEt0CAJ8OBQEFRTAzNzgAAR8FBQABAAUAqAIkBgAArgUBAQGkDgABrwUAAOBFJuACAAC1BQAAAgDgRSbgAgCfDgUBsgJBIHRyYWl0IG1ldGhvZCB3YXMgZGVjbGFyZWQgY29uc3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzc5CiMhW2ZlYXR1cmUoY29uc3RfZm4pXQoKdHJhaXQgRm9vIHsKICAgIGNvbnN0IGZuIGJhcigpIC0+IHUzMjsgLy8gZXJyb3IhCn0KYGBgCgpUcmFpdCBtZXRob2RzIGNhbm5vdCBiZSBkZWNsYXJlZCBgY29uc3RgIGJ5IGRlc2lnbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQpbUkZDIDkxMV0uCgpbUkZDIDkxMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9wdWxsLzkxMQoABf///////////wH///////////8B////////////Af///////////wH/////////AbICsgIAAQCyAgDgRSbgAgAAtAUAAAC1BQAAvQIOBgAAswUCBQEEU29tZQEBAJ8OAAG0BQAAvQIOBgACswUAAQCoAiQGAACyBQEBAJ8OAAIAqQIS3wIAnw4FAQVFMDM3OQABHwUFAAEABQCoAiQGAACyBQEBAaQOAAGzBQAAj0Ym4gIAALkFAAACAI9GJuICAJ8OBQH/AkFuIGF1dG8gdHJhaXQgd2FzIGRlY2xhcmVkIHdpdGggYSBtZXRob2Qgb3IgYW4gYXNzb2NpYXRlZCBpdGVtLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM4MAp1bnNhZmUgYXV0byB0cmFpdCBUcmFpdCB7CiAgICB0eXBlIE91dHB1dDsgLy8gZXJyb3IhCn0KYGBgCgpBdXRvIHRyYWl0cyBjYW5ub3QgaGF2ZSBtZXRob2RzIG9yIGFzc29jaWF0ZWQgaXRlbXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZQp0aGUgW29wdC1pbiBidWlsdGluIHRyYWl0cyBSRkNdW1JGQyAxOV0uCgpbUkZDIDE5XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMDAxOS1vcHQtaW4tYnVpbHRpbi10cmFpdHMubWQKAAb///////////8B////////////Af///////////wH///////////8B////////////Af//////////f/8C/wIAAQD/AgCPRibiAgAAuAUAAAC5BQAAvQIOBgAAtwUCBQEEU29tZQEBAJ8OAAG4BQAAvQIOBgACtwUAAQCoAiQGAAC2BQEBAJ8OAAIAqQIS4QIAnw4FAQVFMDM4MAABHwUFAAEABQCoAiQGAAC2BQEBAaQOAAG3BQAAvkYm5AIAAL0FAAACAL5GJuQCAJ8OBQHvAkl0IGlzIG5vdCBhbGxvd2VkIHRvIHVzZSBvciBjYXB0dXJlIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzgxCmZuIG1haW4oKSB7CiAgICBsZXQgeDogaTMyOwogICAgbGV0IHkgPSB4OyAvLyBlcnJvciwgdXNlIG9mIHBvc3NpYmx5LXVuaW5pdGlhbGl6ZWQgdmFyaWFibGUKfQpgYGAKClRvIGZpeCB0aGlzLCBlbnN1cmUgdGhhdCBhbnkgZGVjbGFyZWQgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcKdXNlZC4gRXhhbXBsZToKCmBgYApmbiBtYWluKCkgewogICAgbGV0IHg6IGkzMiA9IDA7CiAgICBsZXQgeSA9IHg7IC8vIG9rIQp9CmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B////////H+8C7wIAAQDvAgC+RibkAgAAvAUAAAC9BQAAvQIOBgAAuwUCBQEEU29tZQEBAJ8OAAG8BQAAvQIOBgACuwUAAQCoAiQGAAC6BQEBAJ8OAAIAqQIS4wIAnw4FAQVFMDM4MQABHwUFAAEABQCoAiQGAAC6BQEBAaQOAAG7BQAA7UYm5gIAAMEFAAACAO1GJuYCAJ8OBQGZGkEgdmFyaWFibGUgd2FzIHVzZWQgYWZ0ZXIgaXRzIGNvbnRlbnRzIGhhdmUgYmVlbiBtb3ZlZCBlbHNld2hlcmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzgyCnN0cnVjdCBNeVN0cnVjdCB7IHM6IHUzMiB9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCB4ID0gTXlTdHJ1Y3R7IHM6IDV1MzIgfTsKICAgIGxldCB5ID0geDsKICAgIHgucyA9IDY7CiAgICBwcmludGxuISgie30iLCB4LnMpOwp9CmBgYAoKU2luY2UgYE15U3RydWN0YCBpcyBhIHR5cGUgdGhhdCBpcyBub3QgbWFya2VkIGBDb3B5YCwgdGhlIGRhdGEgZ2V0cyBtb3ZlZCBvdXQKb2YgYHhgIHdoZW4gd2Ugc2V0IGB5YC4gVGhpcyBpcyBmdW5kYW1lbnRhbCB0byBSdXN0J3Mgb3duZXJzaGlwIHN5c3RlbTogb3V0c2lkZQpvZiB3b3JrYXJvdW5kcyBsaWtlIGBSY2AsIGEgdmFsdWUgY2Fubm90IGJlIG93bmVkIGJ5IG1vcmUgdGhhbiBvbmUgdmFyaWFibGUuCgpTb21ldGltZXMgd2UgZG9uJ3QgbmVlZCB0byBtb3ZlIHRoZSB2YWx1ZS4gVXNpbmcgYSByZWZlcmVuY2UsIHdlIGNhbiBsZXQgYW5vdGhlcgpmdW5jdGlvbiBib3Jyb3cgdGhlIHZhbHVlIHdpdGhvdXQgY2hhbmdpbmcgaXRzIG93bmVyc2hpcC4gSW4gdGhlIGV4YW1wbGUgYmVsb3csCndlIGRvbid0IGFjdHVhbGx5IGhhdmUgdG8gbW92ZSBvdXIgc3RyaW5nIHRvIGBjYWxjdWxhdGVfbGVuZ3RoYCwgd2UgY2FuIGdpdmUgaXQKYSByZWZlcmVuY2UgdG8gaXQgd2l0aCBgJmAgaW5zdGVhZC4KCmBgYApmbiBtYWluKCkgewogICAgbGV0IHMxID0gU3RyaW5nOjpmcm9tKCJoZWxsbyIpOwoKICAgIGxldCBsZW4gPSBjYWxjdWxhdGVfbGVuZ3RoKCZzMSk7CgogICAgcHJpbnRsbiEoIlRoZSBsZW5ndGggb2YgJ3t9JyBpcyB7fS4iLCBzMSwgbGVuKTsKfQoKZm4gY2FsY3VsYXRlX2xlbmd0aChzOiAmU3RyaW5nKSAtPiB1c2l6ZSB7CiAgICBzLmxlbigpCn0KYGBgCgpBIG11dGFibGUgcmVmZXJlbmNlIGNhbiBiZSBjcmVhdGVkIHdpdGggYCZtdXRgLgoKU29tZXRpbWVzIHdlIGRvbid0IHdhbnQgYSByZWZlcmVuY2UsIGJ1dCBhIGR1cGxpY2F0ZS4gQWxsIHR5cGVzIG1hcmtlZCBgQ2xvbmVgCmNhbiBiZSBkdXBsaWNhdGVkIGJ5IGNhbGxpbmcgYC5jbG9uZSgpYC4gU3Vic2VxdWVudCBjaGFuZ2VzIHRvIGEgY2xvbmUgZG8gbm90CmFmZmVjdCB0aGUgb3JpZ2luYWwgdmFyaWFibGUuCgpNb3N0IHR5cGVzIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFyZSBtYXJrZWQgYENsb25lYC4gVGhlIGV4YW1wbGUgYmVsb3cKZGVtb25zdHJhdGVzIHVzaW5nIGBjbG9uZSgpYCBvbiBhIHN0cmluZy4gYHMxYCBpcyBmaXJzdCBzZXQgdG8gIm1hbnkiLCBhbmQgdGhlbgpjb3BpZWQgdG8gYHMyYC4gVGhlbiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzMWAgaXMgcmVtb3ZlZCwgd2l0aG91dCBhZmZlY3RpbmcKYHMyYC4gImFueSBtYW55IiBpcyBwcmludGVkIHRvIHRoZSBjb25zb2xlLgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHMxID0gU3RyaW5nOjpmcm9tKCJtYW55Iik7CiAgICBsZXQgczIgPSBzMS5jbG9uZSgpOwogICAgczEucmVtb3ZlKDApOwogICAgcHJpbnRsbiEoInt9IHt9IiwgczEsIHMyKTsKfQpgYGAKCklmIHdlIGNvbnRyb2wgdGhlIGRlZmluaXRpb24gb2YgYSB0eXBlLCB3ZSBjYW4gaW1wbGVtZW50IGBDbG9uZWAgb24gaXQgb3Vyc2VsdmVzCndpdGggYCNbZGVyaXZlKENsb25lKV1gLgoKU29tZSB0eXBlcyBoYXZlIG5vIG93bmVyc2hpcCBzZW1hbnRpY3MgYXQgYWxsIGFuZCBhcmUgdHJpdmlhbCB0byBkdXBsaWNhdGUuIEFuCmV4YW1wbGUgaXMgYGkzMmAgYW5kIHRoZSBvdGhlciBudW1iZXIgdHlwZXMuIFdlIGRvbid0IGhhdmUgdG8gY2FsbCBgLmNsb25lKClgIHRvCmNsb25lIHRoZW0sIGJlY2F1c2UgdGhleSBhcmUgbWFya2VkIGBDb3B5YCBpbiBhZGRpdGlvbiB0byBgQ2xvbmVgLiAgSW1wbGljaXQKY2xvbmluZyBpcyBtb3JlIGNvbnZlbmllbnQgaW4gdGhpcyBjYXNlLiBXZSBjYW4gbWFyayBvdXIgb3duIHR5cGVzIGBDb3B5YCBpZgphbGwgdGhlaXIgbWVtYmVycyBhbHNvIGFyZSBtYXJrZWQgYENvcHlgLgoKSW4gdGhlIGV4YW1wbGUgYmVsb3csIHdlIGltcGxlbWVudCBhIGBQb2ludGAgdHlwZS4gQmVjYXVzZSBpdCBvbmx5IHN0b3JlcyB0d28KaW50ZWdlcnMsIHdlIG9wdC1vdXQgb2Ygb3duZXJzaGlwIHNlbWFudGljcyB3aXRoIGBDb3B5YC4gVGhlbiB3ZSBjYW4KYGxldCBwMiA9IHAxYCB3aXRob3V0IGBwMWAgYmVpbmcgbW92ZWQuCgpgYGAKI1tkZXJpdmUoQ29weSwgQ2xvbmUpXQpzdHJ1Y3QgUG9pbnQgeyB4OiBpMzIsIHk6IGkzMiB9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCBwMSA9IFBvaW50eyB4OiAtMSwgeTogMiB9OwogICAgbGV0IHAyID0gcDE7CiAgICBwMS54ID0gMTsKICAgIHByaW50bG4hKCJwMToge30sIHt9IiwgcDEueCwgcDEueSk7CiAgICBwcmludGxuISgicDI6IHt9LCB7fSIsIHAyLngsIHAyLnkpOwp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgaWYgd2UgZG9uJ3QgY29udHJvbCB0aGUgc3RydWN0J3MgZGVmaW5pdGlvbiwgb3IgbXV0YWJsZSBzaGFyZWQKb3duZXJzaGlwIGlzIHRydWx5IHJlcXVpcmVkLCB3ZSBjYW4gdXNlIGBSY2AgYW5kIGBSZWZDZWxsYDoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpSZWZDZWxsOwp1c2Ugc3RkOjpyYzo6UmM7CgpzdHJ1Y3QgTXlTdHJ1Y3QgeyBzOiB1MzIgfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgeCA9IFJjOjpuZXcoUmVmQ2VsbDo6bmV3KE15U3RydWN0eyBzOiA1dTMyIH0pKTsKICAgIGxldCB5ID0geC5jbG9uZSgpOwogICAgeC5ib3Jyb3dfbXV0KCkucyA9IDY7CiAgICBwcmludGxuISgie30iLCB4LmJvcnJvdygpLnMpOwp9CmBgYAoKV2l0aCB0aGlzIGFwcHJvYWNoLCB4IGFuZCB5IHNoYXJlIG93bmVyc2hpcCBvZiB0aGUgZGF0YSB2aWEgdGhlIGBSY2AgKHJlZmVyZW5jZQpjb3VudCB0eXBlKS4gYFJlZkNlbGxgIGVzc2VudGlhbGx5IHBlcmZvcm1zIHJ1bnRpbWUgYm9ycm93IGNoZWNraW5nOiBlbnN1cmluZwp0aGF0IGF0IG1vc3Qgb25lIHdyaXRlciBvciBtdWx0aXBsZSByZWFkZXJzIGNhbiBhY2Nlc3MgdGhlIGRhdGEgYXQgYW55IG9uZSB0aW1lLgoKSWYgeW91IHdpc2ggdG8gbGVhcm4gbW9yZSBhYm91dCBvd25lcnNoaXAgaW4gUnVzdCwgc3RhcnQgd2l0aCB0aGUKW1VuZGVyc3RhbmRpbmcgT3duZXJzaGlwXVt1bmRlcnN0YW5kaW5nLW93bmVyc2hpcF0gY2hhcHRlciBpbiB0aGUgQm9vay4KClt1bmRlcnN0YW5kaW5nLW93bmVyc2hpcF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDA0LTAwLXVuZGVyc3RhbmRpbmctb3duZXJzaGlwLmh0bWwKADX///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////D5kamRoAAQCZGgDtRibmAgAAwAUAAADBBQAAvQIOBgAAvwUCBQEEU29tZQEBAJ8OAAHABQAAvQIOBgACvwUAAQCoAiQGAAC+BQEBAJ8OAAIAqQIS5QIAnw4FAQVFMDM4MgABHwUFAAEABQCoAiQGAAC+BQEBAaQOAAG/BQAAnEcm6AIAAMUFAAACAJxHJugCAJ8OBQHFBSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHBhcnRpYWxseSByZWluaXRpYWxpemUgYQpzdHJ1Y3R1cmUgdGhhdCBpcyBjdXJyZW50bHkgdW5pbml0aWFsaXplZC4KCkZvciBleGFtcGxlLCB0aGlzIGNhbiBoYXBwZW4gd2hlbiBhIGRyb3AgaGFzIHRha2VuIHBsYWNlOgoKYGBgY29tcGlsZV9mYWlsCnN0cnVjdCBGb28gewogICAgYTogdTMyLAp9CmltcGwgRHJvcCBmb3IgRm9vIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7IC8qIC4uLiAqLyB9Cn0KCmxldCBtdXQgeCA9IEZvbyB7IGE6IDEgfTsKZHJvcCh4KTsgLy8gYHhgIGlzIG5vdyB1bmluaXRpYWxpemVkCnguYSA9IDI7IC8vIGVycm9yLCBwYXJ0aWFsIHJlaW5pdGlhbGl6YXRpb24gb2YgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgYHRgCmBgYAoKVGhpcyBlcnJvciBjYW4gYmUgZml4ZWQgYnkgZnVsbHkgcmVpbml0aWFsaXppbmcgdGhlIHN0cnVjdHVyZSBpbiBxdWVzdGlvbjoKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIGE6IHUzMiwKfQppbXBsIERyb3AgZm9yIEZvbyB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgeyAvKiAuLi4gKi8gfQp9CgpsZXQgbXV0IHggPSBGb28geyBhOiAxIH07CmRyb3AoeCk7CnggPSBGb28geyBhOiAyIH07CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BH8UFxQUAAQDFBQCcRyboAgAAxAUAAADFBQAAvQIOBgAAwwUCBQEEU29tZQEBAJ8OAAHEBQAAvQIOBgACwwUAAQCoAiQGAADCBQEBAJ8OAAIAqQIS5wIAnw4FAQVFMDM4MwABHwUFAAEABQCoAiQGAADCBQEBAaQOAAHDBQAAy0cm6gIAAMkFAAACAMtHJuoCAJ8OBQH9AkFuIGltbXV0YWJsZSB2YXJpYWJsZSB3YXMgcmVhc3NpZ25lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzODQKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gMzsKICAgIHggPSA1OyAvLyBlcnJvciwgcmVhc3NpZ25tZW50IG9mIGltbXV0YWJsZSB2YXJpYWJsZQp9CmBgYAoKQnkgZGVmYXVsdCwgdmFyaWFibGVzIGluIFJ1c3QgYXJlIGltbXV0YWJsZS4gVG8gZml4IHRoaXMgZXJyb3IsIGFkZCB0aGUga2V5d29yZApgbXV0YCBhZnRlciB0aGUga2V5d29yZCBgbGV0YCB3aGVuIGRlY2xhcmluZyB0aGUgdmFyaWFibGUuIEZvciBleGFtcGxlOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHggPSAzOwogICAgeCA9IDU7Cn0KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH//////////x/9Av0CAAEA/QIAy0cm6gIAAMgFAAAAyQUAAL0CDgYAAMcFAgUBBFNvbWUBAQCfDgAByAUAAL0CDgYAAscFAAEAqAIkBgAAxgUBAQCfDgACAKkCEukCAJ8OBQEFRTAzODQAAR8FBQABAAUAqAIkBgAAxgUBAQGkDgABxwUAAPpHJuwCAADNBQAAAgD6RybsAgCfDgUB2QUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBtdXRhdGUgdGhlIHRhcmdldCBvZiBhIG11dGFibGUKcmVmZXJlbmNlIHN0b3JlZCBpbnNpZGUgYW4gaW1tdXRhYmxlIGNvbnRhaW5lci4KCkZvciBleGFtcGxlLCB0aGlzIGNhbiBoYXBwZW4gd2hlbiBzdG9yaW5nIGEgYCZtdXRgIGluc2lkZSBhbiBpbW11dGFibGUgYEJveGA6CgpgYGAKbGV0IG11dCB4OiBpNjQgPSAxOwpsZXQgeTogQm94PF8+ID0gQm94OjpuZXcoJm11dCB4KTsKKip5ID0gMjsgLy8gZXJyb3IsIGNhbm5vdCBhc3NpZ24gdG8gZGF0YSBpbiBhbiBpbW11dGFibGUgY29udGFpbmVyCmBgYAoKVGhpcyBlcnJvciBjYW4gYmUgZml4ZWQgYnkgbWFraW5nIHRoZSBjb250YWluZXIgbXV0YWJsZToKCmBgYApsZXQgbXV0IHg6IGk2NCA9IDE7CmxldCBtdXQgeTogQm94PF8+ID0gQm94OjpuZXcoJm11dCB4KTsKKip5ID0gMjsKYGBgCgpJdCBjYW4gYWxzbyBiZSBmaXhlZCBieSB1c2luZyBhIHR5cGUgd2l0aCBpbnRlcmlvciBtdXRhYmlsaXR5LCBzdWNoIGFzIGBDZWxsYApvciBgUmVmQ2VsbGA6CgpgYGAKdXNlIHN0ZDo6Y2VsbDo6Q2VsbDsKCmxldCB4OiBpNjQgPSAxOwpsZXQgeTogQm94PENlbGw8Xz4+ID0gQm94OjpuZXcoQ2VsbDo6bmV3KHgpKTsKeS5zZXQoMik7CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////D9kF2QUAAQDZBQD6RybsAgAAzAUAAADNBQAAvQIOBgAAywUCBQEEU29tZQEBAJ8OAAHMBQAAvQIOBgACywUAAQCoAiQGAADKBQEBAJ8OAAIAqQIS6wIAnw4FAQVFMDM4NgABHwUFAAEABQCoAiQGAADKBQEBAaQOAAHLBQAAqUgm7gIAANEFAAACAKlIJu4CAJ8OBQHuDCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIG11dGF0ZSBvciBtdXRhYmx5IHJlZmVyZW5jZSBkYXRhCnRoYXQgYSBjbG9zdXJlIGhhcyBjYXB0dXJlZCBpbW11dGFibHkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCi8vIEFjY2VwdHMgYSBmdW5jdGlvbiBvciBhIGNsb3N1cmUgdGhhdCBjYXB0dXJlcyBpdHMgZW52aXJvbm1lbnQgaW1tdXRhYmx5LgovLyBDbG9zdXJlcyBwYXNzZWQgdG8gZm9vIHdpbGwgbm90IGJlIGFibGUgdG8gbXV0YXRlIHRoZWlyIGNsb3NlZC1vdmVyIHN0YXRlLgpmbiBmb288RjogRm4oKT4oZjogRikgeyB9CgovLyBBdHRlbXB0cyB0byBtdXRhdGUgY2xvc2VkLW92ZXIgZGF0YS4gRXJyb3IgbWVzc2FnZSByZWFkczoKLy8gYGNhbm5vdCBhc3NpZ24gdG8gZGF0YSBpbiBhIGNhcHR1cmVkIG91dGVyIHZhcmlhYmxlLi4uYApmbiBtdXRhYmxlKCkgewogICAgbGV0IG11dCB4ID0gMHUzMjsKICAgIGZvbyh8fCB4ID0gMik7Cn0KCi8vIEF0dGVtcHRzIHRvIHRha2UgYSBtdXRhYmxlIHJlZmVyZW5jZSB0byBjbG9zZWQtb3ZlciBkYXRhLiAgRXJyb3IgbWVzc2FnZQovLyByZWFkczogYGNhbm5vdCBib3Jyb3cgZGF0YSBtdXRhYmx5IGluIGEgY2FwdHVyZWQgb3V0ZXIgdmFyaWFibGUuLi5gCmZuIG11dF9hZGRyKCkgewogICAgbGV0IG11dCB4ID0gMHUzMjsKICAgIGZvbyh8fCB7IGxldCB5ID0gJm11dCB4OyB9KTsKfQpgYGAKClRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBmb28gaXMgZGVmaW5lZCBhcyBhY2NlcHRpbmcgYSBwYXJhbWV0ZXIgb2YgdHlwZSBgRm5gLgpDbG9zdXJlcyBwYXNzZWQgaW50byBmb28gd2lsbCB0aHVzIGJlIGluZmVycmVkIHRvIGJlIG9mIHR5cGUgYEZuYCwgbWVhbmluZyB0aGF0CnRoZXkgY2FwdHVyZSB0aGVpciBjb250ZXh0IGltbXV0YWJseS4KCklmIHRoZSBkZWZpbml0aW9uIG9mIGBmb29gIGlzIHVuZGVyIHlvdXIgY29udHJvbCwgdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvCmNhcHR1cmUgdGhlIGRhdGEgbXV0YWJseS4gVGhpcyBjYW4gYmUgZG9uZSBieSBkZWZpbmluZyBgZm9vYCB0byB0YWtlIEZuTXV0CnJhdGhlciB0aGFuIEZuOgoKYGBgCmZuIGZvbzxGOiBGbk11dCgpPihmOiBGKSB7IH0KYGBgCgpBbHRlcm5hdGl2ZWx5LCB3ZSBjYW4gY29uc2lkZXIgdXNpbmcgdGhlIGBDZWxsYCBhbmQgYFJlZkNlbGxgIHR5cGVzIHRvIGFjaGlldmUKaW50ZXJpb3IgbXV0YWJpbGl0eSB0aHJvdWdoIGEgc2hhcmVkIHJlZmVyZW5jZS4gT3VyIGV4YW1wbGUncyBgbXV0YWJsZWAKZnVuY3Rpb24gY291bGQgYmUgcmVkZWZpbmVkIGFzIGJlbG93OgoKYGBgCnVzZSBzdGQ6OmNlbGw6OkNlbGw7CgpmbiBmb288RjogRm4oKT4oZjogRikgeyB9CgpmbiBtdXRhYmxlKCkgewogICAgbGV0IHggPSBDZWxsOjpuZXcoMHUzMik7CiAgICBmb28ofHwgeC5zZXQoMikpOwp9CmBgYAoKWW91IGNhbiByZWFkIG1vcmUgaW4gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBbQ2VsbF1bc3RkLWNlbGxdLgoKW3N0ZC1jZWxsXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGQvY2VsbC8KABr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////D+4M7gwAAQDuDACpSCbuAgAA0AUAAADRBQAAvQIOBgAAzwUCBQEEU29tZQEBAJ8OAAHQBQAAvQIOBgACzwUAAQCoAiQGAADOBQEBAJ8OAAIAqQIS7QIAnw4FAQVFMDM4NwABHwUFAAEABQCoAiQGAADOBQEBAaQOAAHPBQAA2Egm8AIAANUFAAACANhIJvACAJ8OBQFBIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoAAv///////////wEBQUEAAQBBANhIJvACAADUBQAAANUFAAC9Ag4GAADTBQIFAQRTb21lAQEAnw4AAdQFAAC9Ag4GAALTBQABAKgCJAYAANIFAQEAnw4AAgCpAhLvAgCfDgUBBUUwMzg4AAEfBQUAAQAFAKgCJAYAANIFAQEBpA4AAdMFAACHSSbyAgAA2QUAAAIAh0km8gIAnw4FAbMLIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBtdXRhdGUgZGF0YSB1c2luZyBhIG5vbi1tdXRhYmxlIHJlZmVyZW5jZS4gVGhpcwpjb21tb25seSBvY2N1cnMgd2hlbiBhdHRlbXB0aW5nIHRvIGFzc2lnbiB0byBhIG5vbi1tdXRhYmxlIHJlZmVyZW5jZSBvZiBhCm11dGFibGUgcmVmZXJlbmNlIChgJigmbXV0IFQpYCkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCBmYW5jeSA9IEZhbmN5TnVteyBudW06IDUgfTsKICAgIGxldCBmYW5jeV9yZWYgPSAmKCZtdXQgZmFuY3kpOwogICAgZmFuY3lfcmVmLm51bSA9IDY7IC8vIGVycm9yOiBjYW5ub3QgYXNzaWduIHRvIGRhdGEgaW4gYSBgJmAgcmVmZXJlbmNlCiAgICBwcmludGxuISgie30iLCBmYW5jeV9yZWYubnVtKTsKfQpgYGAKCkhlcmUsIGAmbXV0IGZhbmN5YCBpcyBtdXRhYmxlLCBidXQgYCYoJm11dCBmYW5jeSlgIGlzIG5vdC4gQ3JlYXRpbmcgYW4KaW1tdXRhYmxlIHJlZmVyZW5jZSB0byBhIHZhbHVlIGJvcnJvd3MgaXQgaW1tdXRhYmx5LiBUaGVyZSBjYW4gYmUgbXVsdGlwbGUKcmVmZXJlbmNlcyBvZiB0eXBlIGAmKCZtdXQgVClgIHRoYXQgcG9pbnQgdG8gdGhlIHNhbWUgdmFsdWUsIHNvIHRoZXkgbXVzdCBiZQppbW11dGFibGUgdG8gcHJldmVudCBtdWx0aXBsZSBtdXRhYmxlIHJlZmVyZW5jZXMgdG8gdGhlIHNhbWUgdmFsdWUuCgpUbyBmaXggdGhpcywgZWl0aGVyIHJlbW92ZSB0aGUgb3V0ZXIgcmVmZXJlbmNlOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCBmYW5jeSA9IEZhbmN5TnVteyBudW06IDUgfTsKCiAgICBsZXQgZmFuY3lfcmVmID0gJm11dCBmYW5jeTsKICAgIC8vIGBmYW5jeV9yZWZgIGlzIG5vdyAmbXV0IEZhbmN5TnVtLCByYXRoZXIgdGhhbiAmKCZtdXQgRmFuY3lOdW0pCgogICAgZmFuY3lfcmVmLm51bSA9IDY7IC8vIE5vIGVycm9yIQoKICAgIHByaW50bG4hKCJ7fSIsIGZhbmN5X3JlZi5udW0pOwp9CmBgYAoKT3IgbWFrZSB0aGUgb3V0ZXIgcmVmZXJlbmNlIG11dGFibGU6CgpgYGAKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdTgKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgZmFuY3kgPSBGYW5jeU51bXsgbnVtOiA1IH07CgogICAgbGV0IGZhbmN5X3JlZiA9ICZtdXQgKCZtdXQgZmFuY3kpOwogICAgLy8gYGZhbmN5X3JlZmAgaXMgbm93ICZtdXQoJm11dCBGYW5jeU51bSksIHJhdGhlciB0aGFuICYoJm11dCBGYW5jeU51bSkKCiAgICBmYW5jeV9yZWYubnVtID0gNjsgLy8gTm8gZXJyb3IhCgogICAgcHJpbnRsbiEoInt9IiwgZmFuY3lfcmVmLm51bSk7Cn0KYGBgCgAX////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8DswuzCwABALMLAIdJJvICAADYBQAAANkFAAC9Ag4GAADXBQIFAQRTb21lAQEAnw4AAdgFAAC9Ag4GAALXBQABAKgCJAYAANYFAQEAnw4AAgCpAhLxAgCfDgUBBUUwMzg5AAEfBQUAAQAFAKgCJAYAANYFAQEBpA4AAdcFAAC2SSb0AgAA3QUAAAIAtkkm9AIAnw4FAdwDQSBtZXRob2Qgd2FzIGltcGxlbWVudGVkIG9uIGEgcHJpbWl0aXZlIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzkwCnN0cnVjdCBGb28gewogICAgeDogaTMyCn0KCmltcGwgKm11dCBGb28ge30KLy8gZXJyb3I6IG9ubHkgYSBzaW5nbGUgaW5oZXJlbnQgaW1wbGVtZW50YXRpb24gbWFya2VkIHdpdGgKLy8gICAgICAgIGAjW2xhbmcgPSAibXV0X3B0ciJdYCBpcyBhbGxvd2VkIGZvciB0aGUgYCptdXQgVGAgcHJpbWl0aXZlCmBgYAoKVGhpcyBpc24ndCBhbGxvd2VkLCBidXQgdXNpbmcgYSB0cmFpdCB0byBpbXBsZW1lbnQgYSBtZXRob2QgaXMgYSBnb29kIHNvbHV0aW9uLgpFeGFtcGxlOgoKYGBgCnN0cnVjdCBGb28gewogICAgeDogaTMyCn0KCnRyYWl0IEJhciB7CiAgICBmbiBiYXIoKTsKfQoKaW1wbCBCYXIgZm9yICptdXQgRm9vIHsKICAgIGZuIGJhcigpIHt9IC8vIG9rIQp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///9/3APcAwABANwDALZJJvQCAADcBQAAAN0FAAC9Ag4GAADbBQIFAQRTb21lAQEAnw4AAdwFAAC9Ag4GAALbBQABAKgCJAYAANoFAQEAnw4AAgCpAhLzAgCfDgUBBUUwMzkwAAEfBQUAAQAFAKgCJAYAANoFAQEBpA4AAdsFAADlSSb2AgAA4QUAAAIA5Ukm9gIAnw4FAcACQSB0eXBlIGRlcGVuZGVuY3kgY3ljbGUgaGFzIGJlZW4gZW5jb3VudGVyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzkxCnRyYWl0IEZpcnN0VHJhaXQgOiBTZWNvbmRUcmFpdCB7Cgp9Cgp0cmFpdCBTZWNvbmRUcmFpdCA6IEZpcnN0VHJhaXQgewoKfQpgYGAKClRoZSBwcmV2aW91cyBleGFtcGxlIGNvbnRhaW5zIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBiZXR3ZWVuIHR3byB0cmFpdHM6CmBGaXJzdFRyYWl0YCBkZXBlbmRzIG9uIGBTZWNvbmRUcmFpdGAgd2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gYEZpcnN0VHJhaXRgLgoABv///////////wH///////////8B////////////Af///////////wH///////////8BAMACwAIAAQDAAgDlSSb2AgAA4AUAAADhBQAAvQIOBgAA3wUCBQEEU29tZQEBAJ8OAAHgBQAAvQIOBgAC3wUAAQCoAiQGAADeBQEBAJ8OAAIAqQIS9QIAnw4FAQVFMDM5MQABHwUFAAEABQCoAiQGAADeBQEBAaQOAAHfBQAAlEom+AIAAOUFAAACAJRKJvgCAJ8OBQHxCkEgdHlwZSBvciBsaWZldGltZSBwYXJhbWV0ZXIgaGFzIGJlZW4gZGVjbGFyZWQgYnV0IGlzIG5vdCBhY3R1YWxseSB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM5MgplbnVtIEZvbzxUPiB7CiAgICBCYXIsCn0KYGBgCgpJZiB0aGUgdHlwZSBwYXJhbWV0ZXIgd2FzIGluY2x1ZGVkIGJ5IG1pc3Rha2UsIHRoaXMgZXJyb3IgY2FuIGJlIGZpeGVkCmJ5IHNpbXBseSByZW1vdmluZyB0aGUgdHlwZSBwYXJhbWV0ZXIsIGFzIHNob3duIGJlbG93OgoKYGBgCmVudW0gRm9vIHsKICAgIEJhciwKfQpgYGAKCkFsdGVybmF0aXZlbHksIGlmIHRoZSB0eXBlIHBhcmFtZXRlciB3YXMgaW50ZW50aW9uYWxseSBpbnNlcnRlZCwgaXQgbXVzdCBiZQp1c2VkLiBBIHNpbXBsZSBmaXggaXMgc2hvd24gYmVsb3c6CgpgYGAKZW51bSBGb288VD4gewogICAgQmFyKFQpLAp9CmBgYAoKVGhpcyBlcnJvciBtYXkgYWxzbyBjb21tb25seSBiZSBmb3VuZCB3aGVuIHdvcmtpbmcgd2l0aCB1bnNhZmUgY29kZS4gRm9yCmV4YW1wbGUsIHdoZW4gdXNpbmcgcmF3IHBvaW50ZXJzIG9uZSBtYXkgd2lzaCB0byBzcGVjaWZ5IHRoZSBsaWZldGltZSBmb3IKd2hpY2ggdGhlIHBvaW50ZWQtYXQgZGF0YSBpcyB2YWxpZC4gQW4gaW5pdGlhbCBhdHRlbXB0IChiZWxvdykgY2F1c2VzIHRoaXMKZXJyb3I6CgpgYGBjb21waWxlX2ZhaWwsRTAzOTIKc3RydWN0IEZvbzwnYSwgVD4gewogICAgeDogKmNvbnN0IFQsCn0KYGBgCgpXZSB3YW50IHRvIGV4cHJlc3MgdGhlIGNvbnN0cmFpbnQgdGhhdCBGb28gc2hvdWxkIG5vdCBvdXRsaXZlIGAnYWAsIGJlY2F1c2UKdGhlIGRhdGEgcG9pbnRlZCB0byBieSBgVGAgaXMgb25seSB2YWxpZCBmb3IgdGhhdCBsaWZldGltZS4gVGhlIHByb2JsZW0gaXMKdGhhdCB0aGVyZSBhcmUgbm8gYWN0dWFsIHVzZXMgb2YgYCdhYC4gSXQncyBwb3NzaWJsZSB0byB3b3JrIGFyb3VuZCB0aGlzCmJ5IGFkZGluZyBhIFBoYW50b21EYXRhIHR5cGUgdG8gdGhlIHN0cnVjdCwgdXNpbmcgaXQgdG8gdGVsbCB0aGUgY29tcGlsZXIKdG8gYWN0IGFzIGlmIHRoZSBzdHJ1Y3QgY29udGFpbmVkIGEgYm9ycm93ZWQgcmVmZXJlbmNlIGAmJ2EgVGA6CgpgYGAKdXNlIHN0ZDo6bWFya2VyOjpQaGFudG9tRGF0YTsKCnN0cnVjdCBGb288J2EsIFQ6ICdhPiB7CiAgICB4OiAqY29uc3QgVCwKICAgIHBoYW50b206IFBoYW50b21EYXRhPCYnYSBUPgp9CmBgYAoKW1BoYW50b21EYXRhXSBjYW4gYWxzbyBiZSB1c2VkIHRvIGV4cHJlc3MgaW5mb3JtYXRpb24gYWJvdXQgdW51c2VkIHR5cGUKcGFyYW1ldGVycy4KCltQaGFudG9tRGF0YV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RkL21hcmtlci9zdHJ1Y3QuUGhhbnRvbURhdGEuaHRtbAoAFv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////3/xCvEKAAEA8QoAlEom+AIAAOQFAAAA5QUAAL0CDgYAAOMFAgUBBFNvbWUBAQCfDgAB5AUAAL0CDgYAAuMFAAEAqAIkBgAA4gUBAQCfDgACAKkCEvcCAJ8OBQEFRTAzOTIAAR8FBQABAAUAqAIkBgAA4gUBAQGkDgAB4wUAAMNKJvoCAADpBQAAAgDDSib6AgCfDgUBoAlBIHR5cGUgcGFyYW1ldGVyIHdoaWNoIHJlZmVyZW5jZXMgYFNlbGZgIGluIGl0cyBkZWZhdWx0IHZhbHVlIHdhcyBub3Qgc3BlY2lmaWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM5Mwp0cmFpdCBBPFQ9U2VsZj4ge30KCmZuIHRvZ2V0aGVyX3dlX3dpbGxfcnVsZV90aGVfZ2FsYXh5KHNvbjogJkEpIHt9Ci8vIGVycm9yOiB0aGUgdHlwZSBwYXJhbWV0ZXIgYFRgIG11c3QgYmUgZXhwbGljaXRseSBzcGVjaWZpZWQgaW4gYW4KLy8gICAgICAgIG9iamVjdCB0eXBlIGJlY2F1c2UgaXRzIGRlZmF1bHQgdmFsdWUgYFNlbGZgIHJlZmVyZW5jZXMgdGhlCi8vICAgICAgICB0eXBlIGBTZWxmYApgYGAKCkEgdHJhaXQgb2JqZWN0IGlzIGRlZmluZWQgb3ZlciBhIHNpbmdsZSwgZnVsbHktZGVmaW5lZCB0cmFpdC4gV2l0aCBhIHJlZ3VsYXIKZGVmYXVsdCBwYXJhbWV0ZXIsIHRoaXMgcGFyYW1ldGVyIGNhbiBqdXN0IGJlIHN1YnN0aXR1dGVkIGluLiBIb3dldmVyLCBpZiB0aGUKZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYFNlbGZgLCB0aGUgdHJhaXQgY2hhbmdlcyBmb3IgZWFjaCBjb25jcmV0ZSB0eXBlOyBpLmUuCmBpMzJgIHdpbGwgYmUgZXhwZWN0ZWQgdG8gaW1wbGVtZW50IGBBPGkzMj5gLCBgYm9vbGAgd2lsbCBiZSBleHBlY3RlZCB0bwppbXBsZW1lbnQgYEE8Ym9vbD5gLCBldGMuLi4gVGhlc2UgdHlwZXMgd2lsbCBub3Qgc2hhcmUgYW4gaW1wbGVtZW50YXRpb24gb2YgYQpmdWxseS1kZWZpbmVkIHRyYWl0OyBpbnN0ZWFkIHRoZXkgc2hhcmUgaW1wbGVtZW50YXRpb25zIG9mIGEgdHJhaXQgd2l0aApkaWZmZXJlbnQgcGFyYW1ldGVycyBzdWJzdGl0dXRlZCBpbiBmb3IgZWFjaCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcwppcnJlY29uY2lsYWJsZSB3aXRoIHdoYXQgd2UgbmVlZCB0byBtYWtlIGEgdHJhaXQgb2JqZWN0IHdvcmssIGFuZCBpcyB0aHVzCmRpc2FsbG93ZWQuIE1ha2luZyB0aGUgdHJhaXQgY29uY3JldGUgYnkgZXhwbGljaXRseSBzcGVjaWZ5aW5nIHRoZSB2YWx1ZSBvZiB0aGUKZGVmYXVsdGVkIHBhcmFtZXRlciB3aWxsIGZpeCB0aGlzIGlzc3VlLiBGaXhlZCBleGFtcGxlOgoKYGBgCnRyYWl0IEE8VD1TZWxmPiB7fQoKZm4gdG9nZXRoZXJfd2Vfd2lsbF9ydWxlX3RoZV9nYWxheHkoc29uOiAmQTxpMzI+KSB7fSAvLyBPayEKYGBgCgAT////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////w+gCaAJAAEAoAkAw0om+gIAAOgFAAAA6QUAAL0CDgYAAOcFAgUBBFNvbWUBAQCfDgAB6AUAAL0CDgYAAucFAAEAqAIkBgAA5gUBAQCfDgACAKkCEvkCAJ8OBQEFRTAzOTMAAR8FBQABAAUAqAIkBgAA5gUBAQGkDgAB5wUAAPJKJvwCAADtBQAAAgDySib8AgCfDgUBlQsjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpJbiBSdXN0IDEuMywgdGhlIGRlZmF1bHQgb2JqZWN0IGxpZmV0aW1lIGJvdW5kcyBhcmUgZXhwZWN0ZWQgdG8gY2hhbmdlLCBhcwpkZXNjcmliZWQgaW4gW1JGQyAxMTU2XS4gWW91IGFyZSBnZXR0aW5nIGEgd2FybmluZyBiZWNhdXNlIHRoZSBjb21waWxlcgp0aGlua3MgaXQgaXMgcG9zc2libGUgdGhhdCB0aGlzIGNoYW5nZSB3aWxsIGNhdXNlIGEgY29tcGlsYXRpb24gZXJyb3IgaW4geW91cgpjb2RlLiBJdCBpcyBwb3NzaWJsZSwgdGhvdWdoIHVubGlrZWx5LCB0aGF0IHRoaXMgaXMgYSBmYWxzZSBhbGFybS4KClRoZSBoZWFydCBvZiB0aGUgY2hhbmdlIGlzIHRoYXQgd2hlcmUgYCYnYSBCb3g8U29tZVRyYWl0PmAgdXNlZCB0byBkZWZhdWx0IHRvCmAmJ2EgQm94PFNvbWVUcmFpdCsnYT5gLCBpdCBub3cgZGVmYXVsdHMgdG8gYCYnYSBCb3g8U29tZVRyYWl0KydzdGF0aWM+YCAoaGVyZSwKYFNvbWVUcmFpdGAgaXMgdGhlIG5hbWUgb2Ygc29tZSB0cmFpdCB0eXBlKS4gTm90ZSB0aGF0IHRoZSBvbmx5IHR5cGVzIHdoaWNoIGFyZQphZmZlY3RlZCBhcmUgcmVmZXJlbmNlcyB0byBib3hlcywgbGlrZSBgJkJveDxTb21lVHJhaXQ+YCBvcgpgJltCb3g8U29tZVRyYWl0Pl1gLiBNb3JlIGNvbW1vbiB0eXBlcyBsaWtlIGAmU29tZVRyYWl0YCBvciBgQm94PFNvbWVUcmFpdD5gCmFyZSB1bmFmZmVjdGVkLgoKVG8gc2lsZW5jZSB0aGlzIHdhcm5pbmcsIGVkaXQgeW91ciBjb2RlIHRvIHVzZSBhbiBleHBsaWNpdCBib3VuZC4gTW9zdCBvZiB0aGUKdGltZSwgdGhpcyBtZWFucyB0aGF0IHlvdSB3aWxsIHdhbnQgdG8gY2hhbmdlIHRoZSBzaWduYXR1cmUgb2YgYSBmdW5jdGlvbiB0aGF0CnlvdSBhcmUgY2FsbGluZy4gRm9yIGV4YW1wbGUsIGlmIHRoZSBlcnJvciBpcyByZXBvcnRlZCBvbiBhIGNhbGwgbGlrZSBgZm9vKHgpYCwKYW5kIGBmb29gIGlzIGRlZmluZWQgYXMgZm9sbG93czoKCmBgYAojIHRyYWl0IFNvbWVUcmFpdCB7fQpmbiBmb28oYXJnOiAmQm94PFNvbWVUcmFpdD4pIHsgLyogLi4uICovIH0KYGBgCgpZb3UgbWlnaHQgY2hhbmdlIGl0IHRvOgoKYGBgCiMgdHJhaXQgU29tZVRyYWl0IHt9CmZuIGZvbzwnYT4oYXJnOiAmJ2EgQm94PFNvbWVUcmFpdCsnYT4pIHsgLyogLi4uICovIH0KYGBgCgpUaGlzIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgeW91IGV4cGVjdCB0aGUgdHJhaXQgb2JqZWN0IGBTb21lVHJhaXRgIHRvIGNvbnRhaW4KcmVmZXJlbmNlcyAod2l0aCBhIG1heGltdW0gbGlmZXRpbWUgb2YgYCdhYCkuCgpbUkZDIDExNTZdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8xMTU2LWFkanVzdC1kZWZhdWx0LW9iamVjdC1ib3VuZHMubWQKABf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//9/lQuVCwABAJULAPJKJvwCAADsBQAAAO0FAAC9Ag4GAADrBQIFAQRTb21lAQEAnw4AAewFAAC9Ag4GAALrBQABAKgCJAYAAOoFAQEAnw4AAgCpAhL7AgCfDgUBBUUwMzk4AAEfBQUAAQAFAKgCJAYAAOoFAQEBpA4AAesFAAChSyb+AgAA8QUAAAIAoUsm/gIAnw4FAdwFIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyCgpZb3UgaW1wbGVtZW50ZWQgYSB0cmFpdCwgb3ZlcnJpZGluZyBvbmUgb3IgbW9yZSBvZiBpdHMgYXNzb2NpYXRlZCB0eXBlcyBidXQgZGlkCm5vdCByZWltcGxlbWVudCBpdHMgZGVmYXVsdCBtZXRob2RzLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYAojIVtmZWF0dXJlKGFzc29jaWF0ZWRfdHlwZV9kZWZhdWx0cyldCgpwdWIgdHJhaXQgRm9vIHsKICAgIHR5cGUgQXNzb2MgPSB1ODsKICAgIGZuIGJhcigmc2VsZikge30KfQoKaW1wbCBGb28gZm9yIGkzMiB7CiAgICAvLyBlcnJvciAtIHRoZSBmb2xsb3dpbmcgdHJhaXQgaXRlbXMgbmVlZCB0byBiZSByZWltcGxlbWVudGVkIGFzCiAgICAvLyAgICAgICAgIGBBc3NvY2Agd2FzIG92ZXJyaWRkZW46IGBiYXJgCiAgICB0eXBlIEFzc29jID0gaTMyOwp9CmBgYAoKVG8gZml4IHRoaXMsIGFkZCBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgZWFjaCBkZWZhdWx0IG1ldGhvZCBmcm9tIHRoZSB0cmFpdDoKCmBgYAojIVtmZWF0dXJlKGFzc29jaWF0ZWRfdHlwZV9kZWZhdWx0cyldCgpwdWIgdHJhaXQgRm9vIHsKICAgIHR5cGUgQXNzb2MgPSB1ODsKICAgIGZuIGJhcigmc2VsZikge30KfQoKaW1wbCBGb28gZm9yIGkzMiB7CiAgICB0eXBlIEFzc29jID0gaTMyOwogICAgZm4gYmFyKCZzZWxmKSB7fSAvLyBvayEKfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///3/cBdwFAAEA3AUAoUsm/gIAAPAFAAAA8QUAAL0CDgYAAO8FAgUBBFNvbWUBAQCfDgAB8AUAAL0CDgYAAu8FAAEAqAIkBgAA7gUBAQCfDgACAKkCEv0CAJ8OBQEFRTAzOTkAAR8FBQABAAUAqAIkBgAA7gUBAQGkDgAB7wUAANBLJoADAAD1BQAAAgDQSyaAAwCfDgUBlw1Jbm5lciBpdGVtcyBkbyBub3QgaW5oZXJpdCB0eXBlIG9yIGNvbnN0IHBhcmFtZXRlcnMgZnJvbSB0aGUgZnVuY3Rpb25zCnRoZXkgYXJlIGVtYmVkZGVkIGluLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwMQpmbiBmb288VD4oeDogVCkgewogICAgZm4gYmFyKHk6IFQpIHsgLy8gVCBpcyBkZWZpbmVkIGluIHRoZSAib3V0ZXIiIGZ1bmN0aW9uCiAgICAgICAgLy8gLi4KICAgIH0KICAgIGJhcih4KTsKfQpgYGAKCk5vciB3aWxsIHRoaXM6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDEKZm4gZm9vPFQ+KHg6IFQpIHsKICAgIHR5cGUgTWF5YmVUID0gT3B0aW9uPFQ+OwogICAgLy8gLi4uCn0KYGBgCgpPciB0aGlzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDAxCmZuIGZvbzxUPih4OiBUKSB7CiAgICBzdHJ1Y3QgRm9vIHsKICAgICAgICB4OiBULAogICAgfQogICAgLy8gLi4uCn0KYGBgCgpJdGVtcyBpbnNpZGUgZnVuY3Rpb25zIGFyZSBiYXNpY2FsbHkganVzdCBsaWtlIHRvcC1sZXZlbCBpdGVtcywgZXhjZXB0CnRoYXQgdGhleSBjYW4gb25seSBiZSB1c2VkIGZyb20gdGhlIGZ1bmN0aW9uIHRoZXkgYXJlIGluLgoKVGhlcmUgYXJlIGEgY291cGxlIG9mIHNvbHV0aW9ucyBmb3IgdGhpcy4KCklmIHRoZSBpdGVtIGlzIGEgZnVuY3Rpb24sIHlvdSBtYXkgdXNlIGEgY2xvc3VyZToKCmBgYApmbiBmb288VD4oeDogVCkgewogICAgbGV0IGJhciA9IHx5OiBUfCB7IC8vIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiBtYXkgbm90IGJlIG5lY2Vzc2FyeQogICAgICAgIC8vIC4uCiAgICB9OwogICAgYmFyKHgpOwp9CmBgYAoKRm9yIGEgZ2VuZXJpYyBpdGVtLCB5b3UgY2FuIGNvcHkgb3ZlciB0aGUgcGFyYW1ldGVyczoKCmBgYApmbiBmb288VD4oeDogVCkgewogICAgZm4gYmFyPFQ+KHk6IFQpIHsKICAgICAgICAvLyAuLgogICAgfQogICAgYmFyKHgpOwp9CmBgYAoKYGBgCmZuIGZvbzxUPih4OiBUKSB7CiAgICB0eXBlIE1heWJlVDxUPiA9IE9wdGlvbjxUPjsKfQpgYGAKCkJlIHN1cmUgdG8gY29weSBvdmVyIGFueSBib3VuZHMgYXMgd2VsbDoKCmBgYApmbiBmb288VDogQ29weT4oeDogVCkgewogICAgZm4gYmFyPFQ6IENvcHk+KHk6IFQpIHsKICAgICAgICAvLyAuLgogICAgfQogICAgYmFyKHgpOwp9CmBgYAoKYGBgCmZuIGZvbzxUOiBDb3B5Pih4OiBUKSB7CiAgICBzdHJ1Y3QgRm9vPFQ6IENvcHk+IHsKICAgICAgICB4OiBULAogICAgfQp9CmBgYAoKVGhpcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHR5cGUgaGludHMgaW4gdGhlIGZ1bmN0aW9uIGJvZHkuCgpJbiBjYXNlIHRoZSBpdGVtIGlzIGEgZnVuY3Rpb24gaW5zaWRlIGFuIGBpbXBsYCwgZGVmaW5pbmcgYSBwcml2YXRlIGhlbHBlcgpmdW5jdGlvbiBtaWdodCBiZSBlYXNpZXI6CgpgYGAKIyBzdHJ1Y3QgRm9vPFQ+KFQpOwppbXBsPFQ+IEZvbzxUPiB7CiAgICBwdWIgZm4gZm9vKCZzZWxmLCB4OiBUKSB7CiAgICAgICAgc2VsZi5iYXIoeCk7CiAgICB9CgogICAgZm4gYmFyKCZzZWxmLCB5OiBUKSB7CiAgICAgICAgLy8gLi4KICAgIH0KfQpgYGAKCkZvciBkZWZhdWx0IGltcGxzIGluIHRyYWl0cywgdGhlIHByaXZhdGUgaGVscGVyIHNvbHV0aW9uIHdvbid0IHdvcmssIGhvd2V2ZXIKY2xvc3VyZXMgb3IgY29weWluZyB0aGUgcGFyYW1ldGVycyBzaG91bGQgc3RpbGwgd29yay4KABv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wOXDZcNAAEAlw0A0EsmgAMAAPQFAAAA9QUAAL0CDgYAAPMFAgUBBFNvbWUBAQCfDgAB9AUAAL0CDgYAAvMFAAEAqAIkBgAA8gUBAQCfDgACAKkCEv8CAJ8OBQEFRTA0MDEAAR8FBQABAAUAqAIkBgAA8gUBAQGkDgAB8wUAAP9LJoIDAAD5BQAAAgD/SyaCAwCfDgUB8gRTb21lIHR5cGUgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIG5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDAzCmZuIGY8VCwgVD4oczogVCwgdTogVCkge30gLy8gZXJyb3I6IHRoZSBuYW1lIGBUYCBpcyBhbHJlYWR5IHVzZWQgZm9yIGEgZ2VuZXJpYwogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBwYXJhbWV0ZXIgaW4gdGhpcyBpdGVtJ3MgZ2VuZXJpYyBwYXJhbWV0ZXJzCmBgYAoKUGxlYXNlIHZlcmlmeSB0aGF0IG5vbmUgb2YgdGhlIHR5cGUgcGFyYW1ldGVycyBhcmUgbWlzc3BlbGxlZCwgYW5kIHJlbmFtZSBhbnkKY2xhc2hpbmcgcGFyYW1ldGVycy4gRXhhbXBsZToKCmBgYApmbiBmPFQsIFk+KHM6IFQsIHU6IFkpIHt9IC8vIG9rIQpgYGAKClR5cGUgcGFyYW1ldGVycyBpbiBhbiBhc3NvY2lhdGVkIGl0ZW0gYWxzbyBjYW5ub3Qgc2hhZG93IHBhcmFtZXRlcnMgZnJvbSB0aGUKY29udGFpbmluZyBpdGVtOgoKYGBgY29tcGlsZV9mYWlsLEUwNDAzCnRyYWl0IEZvbzxUPiB7CiAgICBmbiBkb19zb21ldGhpbmcoJnNlbGYpIC0+IFQ7CiAgICBmbiBkb19zb21ldGhpbmdfZWxzZTxUOiBDbG9uZT4oJnNlbGYsIGJhcjogVCk7Cn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////wHyBPIEAAEA8gQA/0smggMAAPgFAAAA+QUAAL0CDgYAAPcFAgUBBFNvbWUBAQCfDgAB+AUAAL0CDgYAAvcFAAEAqAIkBgAA9gUBAQCfDgACAKkCEoEDAJ8OBQEFRTA0MDMAAR8FBQABAAUAqAIkBgAA9gUBAQGkDgAB9wUAAK5MJoQDAAD9BQAAAgCuTCaEAwCfDgUBhAVBIHR5cGUgdGhhdCBpcyBub3QgYSB0cmFpdCB3YXMgdXNlZCBpbiBhIHRyYWl0IHBvc2l0aW9uLCBzdWNoIGFzIGEgYm91bmQKb3IgYGltcGxgLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwNApzdHJ1Y3QgRm9vOwpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7fSAvLyBlcnJvcjogYEZvb2AgaXMgbm90IGEgdHJhaXQKYGBgCgpBbm90aGVyIGVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDQKc3RydWN0IEZvbzsKCmZuIGJhcjxUOiBGb28+KHQ6IFQpIHt9IC8vIGVycm9yOiBgRm9vYCBpcyBub3QgYSB0cmFpdApgYGAKClBsZWFzZSB2ZXJpZnkgdGhhdCB0aGUgdHJhaXQncyBuYW1lIHdhcyBub3QgbWlzc3BlbGxlZCBvciB0aGF0IHRoZSByaWdodAppZGVudGlmaWVyIHdhcyB1c2VkLiBFeGFtcGxlOgoKYGBgCnRyYWl0IEZvbyB7CiAgICAvLyBzb21lIGZ1bmN0aW9ucwp9CnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsgLy8gb2shCiAgICAvLyBmdW5jdGlvbnMgaW1wbGVtZW50YXRpb24KfQpgYGAKCm9yOgoKYGBgCnRyYWl0IEZvbyB7CiAgICAvLyBzb21lIGZ1bmN0aW9ucwp9CgpmbiBiYXI8VDogRm9vPih0OiBUKSB7fSAvLyBvayEKYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQ+EBYQFAAEAhAUArkwmhAMAAPwFAAAA/QUAAL0CDgYAAPsFAgUBBFNvbWUBAQCfDgAB/AUAAL0CDgYAAvsFAAEAqAIkBgAA+gUBAQCfDgACAKkCEoMDAJ8OBQEFRTA0MDQAAR8FBQABAAUAqAIkBgAA+gUBAQGkDgAB+wUAAN1MJoYDAACBBgAAAgDdTCaGAwCfDgUB9wNUaGUgY29kZSByZWZlcnMgdG8gYSB0cmFpdCB0aGF0IGlzIG5vdCBpbiBzY29wZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDUKc3RydWN0IEZvbzsKCmltcGwgU29tZVRyYWl0IGZvciBGb28ge30gLy8gZXJyb3I6IHRyYWl0IGBTb21lVHJhaXRgIGlzIG5vdCBpbiBzY29wZQpgYGAKClBsZWFzZSB2ZXJpZnkgdGhhdCB0aGUgbmFtZSBvZiB0aGUgdHJhaXQgd2Fzbid0IG1pc3NwZWxsZWQgYW5kIGVuc3VyZSB0aGF0IGl0CndhcyBpbXBvcnRlZC4gRXhhbXBsZToKCmBgYAojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQovLyBzb2x1dGlvbiAxOgp1c2Ugc29tZV9maWxlOjpTb21lVHJhaXQ7CgovLyBzb2x1dGlvbiAyOgp0cmFpdCBTb21lVHJhaXQgewogICAgLy8gc29tZSBmdW5jdGlvbnMKfQoKc3RydWN0IEZvbzsKCmltcGwgU29tZVRyYWl0IGZvciBGb28geyAvLyBvayEKICAgIC8vIGltcGxlbWVudHMgZnVuY3Rpb25zCn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8/9wP3AwABAPcDAN1MJoYDAACABgAAAIEGAAC9Ag4GAAD/BQIFAQRTb21lAQEAnw4AAYAGAAC9Ag4GAAL/BQABAKgCJAYAAP4FAQEAnw4AAgCpAhKFAwCfDgUBBUUwNDA1AAEfBQUAAQAFAKgCJAYAAP4FAQEBpA4AAf8FAACMTSaIAwAAhQYAAAIAjE0miAMAnw4FAfQEQSBkZWZpbml0aW9uIG9mIGEgbWV0aG9kIG5vdCBpbiB0aGUgaW1wbGVtZW50ZWQgdHJhaXQgd2FzIGdpdmVuIGluIGEgdHJhaXQKaW1wbGVtZW50YXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDA3CnRyYWl0IEZvbyB7CiAgICBmbiBhKCk7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGEoKSB7fQogICAgZm4gYigpIHt9IC8vIGVycm9yOiBtZXRob2QgYGJgIGlzIG5vdCBhIG1lbWJlciBvZiB0cmFpdCBgRm9vYAp9CmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSBtZXRob2QgbmFtZSBhbmQgeW91IHVzZWQgdGhlIGNvcnJlY3QKdHJhaXQuIEZpcnN0IGV4YW1wbGU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGEoKTsKICAgIGZuIGIoKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gYSgpIHt9CiAgICBmbiBiKCkge30gLy8gb2shCn0KYGBgCgpTZWNvbmQgZXhhbXBsZToKCmBgYAp0cmFpdCBGb28gewogICAgZm4gYSgpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBhKCkge30KfQoKaW1wbCBCYXIgewogICAgZm4gYigpIHt9Cn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////wf0BPQEAAEA9AQAjE0miAMAAIQGAAAAhQYAAL0CDgYAAIMGAgUBBFNvbWUBAQCfDgABhAYAAL0CDgYAAoMGAAEAqAIkBgAAggYBAQCfDgACAKkCEocDAJ8OBQEFRTA0MDcAAR8FBQABAAUAqAIkBgAAggYBAQGkDgABgwYAALtNJooDAACJBgAAAgC7TSaKAwCfDgUBrQhBbiAib3IiIHBhdHRlcm4gd2FzIHVzZWQgd2hlcmUgdGhlIHZhcmlhYmxlIGJpbmRpbmdzIGFyZSBub3QgY29uc2lzdGVudGx5IGJvdW5kCmFjcm9zcyBwYXR0ZXJucy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDgKbWF0Y2ggeCB7CiAgICBTb21lKHkpIHwgTm9uZSA9PiB7IC8qIHVzZSB5ICovIH0gLy8gZXJyb3I6IHZhcmlhYmxlIGB5YCBmcm9tIHBhdHRlcm4gIzEgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgbm90IGJvdW5kIGluIHBhdHRlcm4gIzIKICAgIF8gPT4gKCkKfQpgYGAKCkhlcmUsIGB5YCBpcyBib3VuZCB0byB0aGUgY29udGVudHMgb2YgdGhlIGBTb21lYCBhbmQgY2FuIGJlIHVzZWQgd2l0aGluIHRoZQpibG9jayBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYXRjaCBhcm0uIEhvd2V2ZXIsIGluIGNhc2UgYHhgIGlzIGBOb25lYCwgd2UgaGF2ZQpub3Qgc3BlY2lmaWVkIHdoYXQgYHlgIGlzLCBhbmQgdGhlIGJsb2NrIHdpbGwgdXNlIGEgbm9uZXhpc3RlbnQgdmFyaWFibGUuCgpUbyBmaXggdGhpcyBlcnJvciwgZWl0aGVyIHNwbGl0IGludG8gbXVsdGlwbGUgbWF0Y2ggYXJtczoKCmBgYApsZXQgeCA9IFNvbWUoMSk7Cm1hdGNoIHggewogICAgU29tZSh5KSA9PiB7IC8qIHVzZSB5ICovIH0KICAgIE5vbmUgPT4geyAvKiAuLi4gKi8gfQp9CmBgYAoKb3IsIGJpbmQgdGhlIHZhcmlhYmxlIHRvIGEgZmllbGQgb2YgdGhlIHNhbWUgdHlwZSBpbiBhbGwgc3ViLXBhdHRlcm5zIG9mIHRoZQpvciBwYXR0ZXJuOgoKYGBgCmxldCB4ID0gKDAsIDIpOwptYXRjaCB4IHsKICAgICgwLCB5KSB8ICh5LCAwKSA9PiB7IC8qIHVzZSB5ICovfQogICAgXyA9PiB7fQp9CmBgYAoKSW4gdGhpcyBleGFtcGxlLCBpZiBgeGAgbWF0Y2hlcyB0aGUgcGF0dGVybiBgKDAsIF8pYCwgdGhlIHNlY29uZCBmaWVsZCBpcyBzZXQKdG8gYHlgLiBJZiBpdCBtYXRjaGVzIGAoXywgMClgLCB0aGUgZmlyc3QgZmllbGQgaXMgc2V0IHRvIGB5YDsgc28gaW4gYWxsCmNhc2VzIGB5YCBpcyBzZXQgdG8gc29tZSB2YWx1ZS4KABH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////B60IrQgAAQCtCAC7TSaKAwAAiAYAAACJBgAAvQIOBgAAhwYCBQEEU29tZQEBAJ8OAAGIBgAAvQIOBgAChwYAAQCoAiQGAACGBgEBAJ8OAAIAqQISiQMAnw4FAQVFMDQwOAABHwUFAAEABQCoAiQGAACGBgEBAaQOAAGHBgAA6k0mjAMAAI0GAAACAOpNJowDAJ8OBQHhBkFuICJvciIgcGF0dGVybiB3YXMgdXNlZCB3aGVyZSB0aGUgdmFyaWFibGUgYmluZGluZ3MgYXJlIG5vdCBjb25zaXN0ZW50bHkgYm91bmQKYWNyb3NzIHBhdHRlcm5zLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwOQpsZXQgeCA9ICgwLCAyKTsKbWF0Y2ggeCB7CiAgICAoMCwgcmVmIHkpIHwgKHksIDApID0+IHsgLyogdXNlIHkgKi99IC8vIGVycm9yOiB2YXJpYWJsZSBgeWAgaXMgYm91bmQgd2l0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZGlmZmVyZW50IG1vZGUgaW4gcGF0dGVybiAjMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhhbiBpbiBwYXR0ZXJuICMxCiAgICBfID0+ICgpCn0KYGBgCgpIZXJlLCBgeWAgaXMgYm91bmQgYnktdmFsdWUgaW4gb25lIGNhc2UgYW5kIGJ5LXJlZmVyZW5jZSBpbiB0aGUgb3RoZXIuCgpUbyBmaXggdGhpcyBlcnJvciwganVzdCB1c2UgdGhlIHNhbWUgbW9kZSBpbiBib3RoIGNhc2VzLgpHZW5lcmFsbHkgdXNpbmcgYHJlZmAgb3IgYHJlZiBtdXRgIHdoZXJlIG5vdCBhbHJlYWR5IHVzZWQgd2lsbCBmaXggdGhpczoKCmBgYApsZXQgeCA9ICgwLCAyKTsKbWF0Y2ggeCB7CiAgICAoMCwgcmVmIHkpIHwgKHJlZiB5LCAwKSA9PiB7IC8qIHVzZSB5ICovfQogICAgXyA9PiAoKQp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgc3BsaXQgdGhlIHBhdHRlcm46CgpgYGAKbGV0IHggPSAoMCwgMik7Cm1hdGNoIHggewogICAgKHksIDApID0+IHsgLyogdXNlIHkgKi8gfQogICAgKDAsIHJlZiB5KSA9PiB7IC8qIHVzZSB5ICovfQogICAgXyA9PiAoKQp9CmBgYAoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////H+EG4QYAAQDhBgDqTSaMAwAAjAYAAACNBgAAvQIOBgAAiwYCBQEEU29tZQEBAJ8OAAGMBgAAvQIOBgACiwYAAQCoAiQGAACKBgEBAJ8OAAIAqQISiwMAnw4FAQVFMDQwOQABHwUFAAEABQCoAiQGAACKBgEBAaQOAAGLBgAAmU4mjgMAAJEGAAACAJlOJo4DAJ8OBQHmB1RoZSBgU2VsZmAga2V5d29yZCB3YXMgdXNlZCBvdXRzaWRlIGFuIGltcGwsIHRyYWl0LCBvciB0eXBlIGRlZmluaXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDExCjxTZWxmPjo6Zm9vOyAvLyBlcnJvcjogdXNlIG9mIGBTZWxmYCBvdXRzaWRlIG9mIGFuIGltcGwsIHRyYWl0LCBvciB0eXBlCiAgICAgICAgICAgICAvLyBkZWZpbml0aW9uCmBgYAoKVGhlIGBTZWxmYCBrZXl3b3JkIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdHlwZSwgd2hpY2ggZXhwbGFpbnMgd2h5IGl0IGNhbiBvbmx5CmJlIHVzZWQgaW5zaWRlIGFuIGltcGwsIHRyYWl0LCBvciB0eXBlIGRlZmluaXRpb24uIEl0IGdpdmVzIGFjY2VzcyB0byB0aGUKYXNzb2NpYXRlZCBpdGVtcyBvZiBhIHR5cGU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIHR5cGUgQmFyOwp9Cgp0cmFpdCBCYXogOiBGb28gewogICAgZm4gYmFyKCkgLT4gU2VsZjo6QmFyOyAvLyBsaWtlIHRoaXMKfQpgYGAKCkhvd2V2ZXIsIGJlIGNhcmVmdWwgd2hlbiB0d28gdHlwZXMgaGF2ZSBhIGNvbW1vbiBhc3NvY2lhdGVkIHR5cGU6CgpgYGBjb21waWxlX2ZhaWwKdHJhaXQgRm9vIHsKICAgIHR5cGUgQmFyOwp9Cgp0cmFpdCBGb28yIHsKICAgIHR5cGUgQmFyOwp9Cgp0cmFpdCBCYXogOiBGb28gKyBGb28yIHsKICAgIGZuIGJhcigpIC0+IFNlbGY6OkJhcjsKICAgIC8vIGVycm9yOiBhbWJpZ3VvdXMgYXNzb2NpYXRlZCB0eXBlIGBCYXJgIGluIGJvdW5kcyBvZiBgU2VsZmAKfQpgYGAKClRoaXMgcHJvYmxlbSBjYW4gYmUgc29sdmVkIGJ5IHNwZWNpZnlpbmcgZnJvbSB3aGljaCB0cmFpdCB3ZSB3YW50IHRvIHVzZSB0aGUKYEJhcmAgdHlwZToKCmBgYAp0cmFpdCBGb28gewogICAgdHlwZSBCYXI7Cn0KCnRyYWl0IEZvbzIgewogICAgdHlwZSBCYXI7Cn0KCnRyYWl0IEJheiA6IEZvbyArIEZvbzIgewogICAgZm4gYmFyKCkgLT4gPFNlbGYgYXMgRm9vPjo6QmFyOyAvLyBvayEKfQpgYGAKABD///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wfmB+YHAAEA5gcAmU4mjgMAAJAGAAAAkQYAAL0CDgYAAI8GAgUBBFNvbWUBAQCfDgABkAYAAL0CDgYAAo8GAAEAqAIkBgAAjgYBAQCfDgACAKkCEo0DAJ8OBQEFRTA0MTEAAR8FBQABAAUAqAIkBgAAjgYBAQGkDgABjwYAAMhOJpADAACVBgAAAgDITiaQAwCfDgUB8AhBIHVzZWQgdHlwZSBuYW1lIGlzIG5vdCBpbiBzY29wZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDEyCmltcGwgU29tZXRoaW5nIHt9IC8vIGVycm9yOiB0eXBlIG5hbWUgYFNvbWV0aGluZ2AgaXMgbm90IGluIHNjb3BlCgovLyBvcjoKCnRyYWl0IEZvbyB7CiAgICBmbiBiYXIoTik7IC8vIGVycm9yOiB0eXBlIG5hbWUgYE5gIGlzIG5vdCBpbiBzY29wZQp9CgovLyBvcjoKCmZuIGZvbyh4OiBUKSB7fSAvLyB0eXBlIG5hbWUgYFRgIGlzIG5vdCBpbiBzY29wZQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgdmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIHR5cGUgbmFtZSwgeW91IGRpZApkZWNsYXJlIGl0IG9yIGltcG9ydGVkIGl0IGludG8gdGhlIHNjb3BlLiBFeGFtcGxlczoKCmBgYApzdHJ1Y3QgU29tZXRoaW5nOwoKaW1wbCBTb21ldGhpbmcge30gLy8gb2shCgovLyBvcjoKCnRyYWl0IEZvbyB7CiAgICB0eXBlIE47CgogICAgZm4gYmFyKF86IFNlbGY6Ok4pOyAvLyBvayEKfQoKLy8gb3I6CgpmbiBmb288VD4oeDogVCkge30gLy8gb2shCmBgYAoKQW5vdGhlciBjYXNlIHRoYXQgY2F1c2VzIHRoaXMgZXJyb3IgaXMgd2hlbiBhIHR5cGUgaXMgaW1wb3J0ZWQgaW50byBhIHBhcmVudAptb2R1bGUuIFRvIGZpeCB0aGlzLCB5b3UgY2FuIGZvbGxvdyB0aGUgc3VnZ2VzdGlvbiBhbmQgdXNlIEZpbGUgZGlyZWN0bHkgb3IKYHVzZSBzdXBlcjo6RmlsZTtgIHdoaWNoIHdpbGwgaW1wb3J0IHRoZSB0eXBlcyBmcm9tIHRoZSBwYXJlbnQgbmFtZXNwYWNlLiBBbgpleGFtcGxlIHRoYXQgY2F1c2VzIHRoaXMgZXJyb3IgaXMgYmVsb3c6CgpgYGBjb21waWxlX2ZhaWwsRTA0MTIKdXNlIHN0ZDo6ZnM6OkZpbGU7Cgptb2QgZm9vIHsKICAgIGZuIHNvbWVfZnVuY3Rpb24oZjogRmlsZSkge30KfQpgYGAKCmBgYAp1c2Ugc3RkOjpmczo6RmlsZTsKCm1vZCBmb28gewogICAgLy8gZWl0aGVyCiAgICB1c2Ugc3VwZXI6OkZpbGU7CiAgICAvLyBvcgogICAgLy8gdXNlIHN0ZDo6ZnM6OkZpbGU7CiAgICBmbiBmb28oZjogRmlsZSkge30KfQojIGZuIG1haW4oKSB7fSAvLyBkb24ndCBpbnNlcnQgaXQgZm9yIHVzOyB0aGF0J2xsIGJyZWFrIGltcG9ydHMKYGBgCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8/8AjwCAABAPAIAMhOJpADAACUBgAAAJUGAAC9Ag4GAACTBgIFAQRTb21lAQEAnw4AAZQGAAC9Ag4GAAKTBgABAKgCJAYAAJIGAQEAnw4AAgCpAhKPAwCfDgUBBUUwNDEyAAEfBQUAAQAFAKgCJAYAAJIGAQEBpA4AAZMGAAD3TiaSAwAAmQYAAAIA904mkgMAnw4FAdcCTW9yZSB0aGFuIG9uZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaGF2ZSB0aGUgc2FtZSBuYW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQxNQpmbiBmb28oZjogaTMyLCBmOiBpMzIpIHt9IC8vIGVycm9yOiBpZGVudGlmaWVyIGBmYCBpcyBib3VuZCBtb3JlIHRoYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgb25jZSBpbiB0aGlzIHBhcmFtZXRlciBsaXN0CmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHBhcmFtZXRlcnMnIG5hbWUuIEV4YW1wbGU6CgpgYGAKZm4gZm9vKGY6IGkzMiwgZzogaTMyKSB7fSAvLyBvayEKYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH///8D1wLXAgABANcCAPdOJpIDAACYBgAAAJkGAAC9Ag4GAACXBgIFAQRTb21lAQEAnw4AAZgGAAC9Ag4GAAKXBgABAKgCJAYAAJYGAQEAnw4AAgCpAhKRAwCfDgUBBUUwNDE1AAEfBQUAAQAFAKgCJAYAAJYGAQEBpA4AAZcGAACmTyaUAwAAnQYAAAIApk8mlAMAnw4FAdYEQW4gaWRlbnRpZmllciBpcyBib3VuZCBtb3JlIHRoYW4gb25jZSBpbiBhIHBhdHRlcm4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDE2Cm1hdGNoICgxLCAyKSB7CiAgICAoeCwgeCkgPT4ge30gLy8gZXJyb3I6IGlkZW50aWZpZXIgYHhgIGlzIGJvdW5kIG1vcmUgdGhhbiBvbmNlIGluIHRoZQogICAgICAgICAgICAgICAgIC8vICAgICAgICBzYW1lIHBhdHRlcm4KfQpgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCBpZGVudGlmaWVycycgbmFtZS4gRXhhbXBsZToKCmBgYAptYXRjaCAoMSwgMikgewogICAgKHgsIHkpID0+IHt9IC8vIG9rIQp9CmBgYAoKT3IgbWF5YmUgZGlkIHlvdSBtZWFuIHRvIHVuaWZ5PyBDb25zaWRlciB1c2luZyBhIGd1YXJkOgoKYGBgCiMgbGV0IChBLCBCLCBDKSA9ICgxLCAyLCAzKTsKbWF0Y2ggKEEsIEIsIEMpIHsKICAgICh4LCB4Miwgc2VlKSBpZiB4ID09IHgyID0+IHsgLyogQSBhbmQgQiBhcmUgZXF1YWwsIGRvIG9uZSB0aGluZyAqLyB9CiAgICAoeSwgeiwgc2VlKSA9PiB7IC8qIEEgYW5kIEIgdW5lcXVhbDsgZG8gYW5vdGhlciB0aGluZyAqLyB9Cn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////AdYE1gQAAQDWBACmTyaUAwAAnAYAAACdBgAAvQIOBgAAmwYCBQEEU29tZQEBAJ8OAAGcBgAAvQIOBgACmwYAAQCoAiQGAACaBgEBAJ8OAAIAqQISkwMAnw4FAQVFMDQxNgABHwUFAAEABQCoAiQGAACaBgEBAaQOAAGbBgAA1U8mlgMAAKEGAAACANVPJpYDAJ8OBQGpA0FuIGlkZW50aWZpZXIgdGhhdCBpcyBuZWl0aGVyIGRlZmluZWQgbm9yIGEgc3RydWN0IHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQyMgpmbiBtYWluICgpIHsKICAgIGxldCB4ID0gRm9vIHsgeDogMSwgeTogMiB9Owp9CmBgYAoKSW4gdGhpcyBjYXNlLCBgRm9vYCBpcyB1bmRlZmluZWQsIHNvIGl0IGluaGVyZW50bHkgaXNuJ3QgYW55dGhpbmcsIGFuZApkZWZpbml0ZWx5IG5vdCBhIHN0cnVjdC4KCmBgYGNvbXBpbGVfZmFpbApmbiBtYWluICgpIHsKICAgIGxldCBmb28gPSAxOwogICAgbGV0IHggPSBmb28geyB4OiAxLCB5OiAyIH07Cn0KYGBgCgpJbiB0aGlzIGNhc2UsIGBmb29gIGlzIGRlZmluZWQsIGJ1dCBpcyBub3QgYSBzdHJ1Y3QsIHNvIFJ1c3QgY2FuJ3QgdXNlIGl0IGFzCm9uZS4KAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////z+pA6kDAAEAqQMA1U8mlgMAAKAGAAAAoQYAAL0CDgYAAJ8GAgUBBFNvbWUBAQCfDgABoAYAAL0CDgYAAp8GAAEAqAIkBgAAngYBAQCfDgACAKkCEpUDAJ8OBQEFRTA0MjIAAR8FBQABAAUAqAIkBgAAngYBAQGkDgABnwYAAIRQJpgDAAClBgAAAgCEUCaYAwCfDgUBtAhBbiBpZGVudGlmaWVyIHdhcyB1c2VkIGxpa2UgYSBmdW5jdGlvbiBuYW1lIG9yIGEgdmFsdWUgd2FzIGV4cGVjdGVkIGFuZCB0aGUKaWRlbnRpZmllciBleGlzdHMgYnV0IGl0IGJlbG9uZ3MgdG8gYSBkaWZmZXJlbnQgbmFtZXNwYWNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQyMwpzdHJ1Y3QgRm9vIHsgYTogYm9vbCB9OwoKbGV0IGYgPSBGb28oKTsKLy8gZXJyb3I6IGV4cGVjdGVkIGZ1bmN0aW9uLCB0dXBsZSBzdHJ1Y3Qgb3IgdHVwbGUgdmFyaWFudCwgZm91bmQgYEZvb2AKLy8gYEZvb2AgaXMgYSBzdHJ1Y3QgbmFtZSwgYnV0IHRoaXMgZXhwcmVzc2lvbiB1c2VzIGl0IGxpa2UgYSBmdW5jdGlvbiBuYW1lCmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSBuYW1lIG9mIHdoYXQgeW91IGFjdHVhbGx5IHdhbnRlZCB0byB1c2UKaGVyZS4gRXhhbXBsZToKCmBgYApmbiBGb28oKSAtPiB1MzIgeyAwIH0KCmxldCBmID0gRm9vKCk7IC8vIG9rIQpgYGAKCkl0IGlzIGNvbW1vbiB0byBmb3JnZXQgdGhlIHRyYWlsaW5nIGAhYCBvbiBtYWNybyBpbnZvY2F0aW9ucywgd2hpY2ggd291bGQgYWxzbwp5aWVsZCB0aGlzIGVycm9yOgoKYGBgY29tcGlsZV9mYWlsLEUwNDIzCnByaW50bG4oIiIpOwovLyBlcnJvcjogZXhwZWN0ZWQgZnVuY3Rpb24sIHR1cGxlIHN0cnVjdCBvciB0dXBsZSB2YXJpYW50LAovLyBmb3VuZCBtYWNybyBgcHJpbnRsbmAKLy8gZGlkIHlvdSBtZWFuIGBwcmludGxuISguLi4pYD8gKG5vdGljZSB0aGUgdHJhaWxpbmcgYCFgKQpgYGAKCkFub3RoZXIgY2FzZSB3aGVyZSB0aGlzIGVycm9yIGlzIGVtaXR0ZWQgaXMgd2hlbiBhIHZhbHVlIGlzIGV4cGVjdGVkLCBidXQKc29tZXRoaW5nIGVsc2UgaXMgZm91bmQ6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjMKcHViIG1vZCBhIHsKICAgIHB1YiBjb25zdCBJOiBpMzIgPSAxOwp9CgpmbiBoMSgpIC0+IGkzMiB7CiAgICBhLkkKICAgIC8vfl4gRVJST1IgZXhwZWN0ZWQgdmFsdWUsIGZvdW5kIG1vZHVsZSBgYWAKICAgIC8vIGRpZCB5b3UgbWVhbiBgYTo6SWA/Cn0KYGBgCgAR////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8HtAi0CAABALQIAIRQJpgDAACkBgAAAKUGAAC9Ag4GAACjBgIFAQRTb21lAQEAnw4AAaQGAAC9Ag4GAAKjBgABAKgCJAYAAKIGAQEAnw4AAgCpAhKXAwCfDgUBBUUwNDIzAAEfBQUAAQAFAKgCJAYAAKIGAQEBpA4AAaMGAACzUCaaAwAAqQYAAAIAs1AmmgMAnw4FAeYIVGhlIGBzZWxmYCBrZXl3b3JkIHdhcyB1c2VkIGluc2lkZSBvZiBhbiBhc3NvY2lhdGVkIGZ1bmN0aW9uIHdpdGhvdXQgYSAiYHNlbGZgCnJlY2VpdmVyIiBwYXJhbWV0ZXIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDI0CnN0cnVjdCBGb287CgppbXBsIEZvbyB7CiAgICAvLyBgYmFyYCBpcyBhIG1ldGhvZCwgYmVjYXVzZSBpdCBoYXMgYSByZWNlaXZlciBwYXJhbWV0ZXIuCiAgICBmbiBiYXIoJnNlbGYpIHt9CgogICAgLy8gYGZvb2AgaXMgbm90IGEgbWV0aG9kLCBiZWNhdXNlIGl0IGhhcyBubyByZWNlaXZlciBwYXJhbWV0ZXIuCiAgICBmbiBmb28oKSB7CiAgICAgICAgc2VsZi5iYXIoKTsgLy8gZXJyb3I6IGBzZWxmYCB2YWx1ZSBpcyBhIGtleXdvcmQgb25seSBhdmFpbGFibGUgaW4KICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgbWV0aG9kcyB3aXRoIGEgYHNlbGZgIHBhcmFtZXRlcgogICAgfQp9CmBgYAoKVGhlIGBzZWxmYCBrZXl3b3JkIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIG1ldGhvZHMsIHdoaWNoIGFyZSBhc3NvY2lhdGVkCmZ1bmN0aW9ucyAoZnVuY3Rpb25zIGRlZmluZWQgaW5zaWRlIG9mIGEgYHRyYWl0YCBvciBgaW1wbGAgYmxvY2spIHRoYXQgaGF2ZSBhCmBzZWxmYCByZWNlaXZlciBhcyBpdHMgZmlyc3QgcGFyYW1ldGVyLCBsaWtlIGBzZWxmYCwgYCZzZWxmYCwgYCZtdXQgc2VsZmAgb3IKYHNlbGY6ICZtdXQgUGluPFNlbGY+YCAodGhpcyBsYXN0IG9uZSBpcyBhbiBleGFtcGxlIG9mIGFuIFsiYWJpdHJhcnkgYHNlbGZgCnR5cGUiXShodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzQ0ODc0KSkuCgpDaGVjayBpZiB0aGUgYXNzb2NpYXRlZCBmdW5jdGlvbidzIHBhcmFtZXRlciBsaXN0IHNob3VsZCBoYXZlIGNvbnRhaW5lZCBhIGBzZWxmYApyZWNlaXZlciBmb3IgaXQgdG8gYmUgYSBtZXRob2QsIGFuZCBhZGQgaXQgaWYgc28uIEV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIGJhcigmc2VsZikge30KCiAgICBmbiBmb28oc2VsZikgeyAvLyBgZm9vYCBpcyBub3cgYSBtZXRob2QuCiAgICAgICAgc2VsZi5iYXIoKTsgLy8gb2shCiAgICB9Cn0KYGBgCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wfmCOYIAAEA5ggAs1AmmgMAAKgGAAAAqQYAAL0CDgYAAKcGAgUBBFNvbWUBAQCfDgABqAYAAL0CDgYAAqcGAAEAqAIkBgAApgYBAQCfDgACAKkCEpkDAJ8OBQEFRTA0MjQAAR8FBQABAAUAqAIkBgAApgYBAQGkDgABpwYAAOJQJpwDAACtBgAAAgDiUCacAwCfDgUBrghBbiB1bnJlc29sdmVkIG5hbWUgd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDQyNQpzb21ldGhpbmdfdGhhdF9kb2VzbnRfZXhpc3Q6OmZvbzsKLy8gZXJyb3I6IHVucmVzb2x2ZWQgbmFtZSBgc29tZXRoaW5nX3RoYXRfZG9lc250X2V4aXN0Ojpmb29gCgovLyBvcjoKCnRyYWl0IEZvbyB7CiAgICBmbiBiYXIoKSB7CiAgICAgICAgU2VsZjsgLy8gZXJyb3I6IHVucmVzb2x2ZWQgbmFtZSBgU2VsZmAKICAgIH0KfQoKLy8gb3I6CgpsZXQgeCA9IHVua25vd25fdmFyaWFibGU7ICAvLyBlcnJvcjogdW5yZXNvbHZlZCBuYW1lIGB1bmtub3duX3ZhcmlhYmxlYApgYGAKClBsZWFzZSB2ZXJpZnkgdGhhdCB0aGUgbmFtZSB3YXNuJ3QgbWlzc3BlbGxlZCBhbmQgZW5zdXJlIHRoYXQgdGhlCmlkZW50aWZpZXIgYmVpbmcgcmVmZXJyZWQgdG8gaXMgdmFsaWQgZm9yIHRoZSBnaXZlbiBzaXR1YXRpb24uIEV4YW1wbGU6CgpgYGAKZW51bSBzb21ldGhpbmdfdGhhdF9kb2VzX2V4aXN0IHsKICAgIEZvbywKfQpgYGAKCk9yOgoKYGBgCm1vZCBzb21ldGhpbmdfdGhhdF9kb2VzX2V4aXN0IHsKICAgIHB1YiBzdGF0aWMgZm9vIDogaTMyID0gMGkzMjsKfQoKc29tZXRoaW5nX3RoYXRfZG9lc19leGlzdDo6Zm9vOyAvLyBvayEKYGBgCgpPcjoKCmBgYApsZXQgdW5rbm93bl92YXJpYWJsZSA9IDEydTMyOwpsZXQgeCA9IHVua25vd25fdmFyaWFibGU7IC8vIG9rIQpgYGAKCklmIHRoZSBpdGVtIGlzIG5vdCBkZWZpbmVkIGluIHRoZSBjdXJyZW50IG1vZHVsZSwgaXQgbXVzdCBiZSBpbXBvcnRlZCB1c2luZyBhCmB1c2VgIHN0YXRlbWVudCwgbGlrZSBzbzoKCmBgYAojIG1vZCBmb28geyBwdWIgZm4gYmFyKCkge30gfQojIGZuIG1haW4oKSB7CnVzZSBmb286OmJhcjsKYmFyKCk7CiMgfQpgYGAKCklmIHRoZSBpdGVtIHlvdSBhcmUgaW1wb3J0aW5nIGlzIG5vdCBkZWZpbmVkIGluIHNvbWUgc3VwZXItbW9kdWxlIG9mIHRoZQpjdXJyZW50IG1vZHVsZSwgdGhlbiBpdCBtdXN0IGFsc28gYmUgZGVjbGFyZWQgYXMgcHVibGljIChlLmcuLCBgcHViIGZuYCkuCgAR////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////w+uCK4IAAEArggA4lAmnAMAAKwGAAAArQYAAL0CDgYAAKsGAgUBBFNvbWUBAQCfDgABrAYAAL0CDgYAAqsGAAEAqAIkBgAAqgYBAQCfDgACAKkCEpsDAJ8OBQEFRTA0MjUAAR8FBQABAAUAqAIkBgAAqgYBAQGkDgABqwYAAJFRJp4DAACxBgAAAgCRUSaeAwCfDgUBgAJBbiB1bmRlY2xhcmVkIGxhYmVsIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQyNgpsb29wIHsKICAgIGJyZWFrICdhOyAvLyBlcnJvcjogdXNlIG9mIHVuZGVjbGFyZWQgbGFiZWwgYCdhYAp9CmBgYAoKUGxlYXNlIHZlcmlmeSB5b3Ugc3BlbGxlZCBvciBkZWNsYXJlZCB0aGUgbGFiZWwgY29ycmVjdGx5LiBFeGFtcGxlOgoKYGBgCidhOiBsb29wIHsKICAgIGJyZWFrICdhOyAvLyBvayEKfQpgYGAKAAX///////////8B////////////Af///////////wH///////////8BAIACgAIAAQCAAgCRUSaeAwAAsAYAAACxBgAAvQIOBgAArwYCBQEEU29tZQEBAJ8OAAGwBgAAvQIOBgACrwYAAQCoAiQGAACuBgEBAJ8OAAIAqQISnQMAnw4FAQVFMDQyNgABHwUFAAEABQCoAiQGAACuBgEBAaQOAAGvBgAAwFEmoAMAALUGAAACAMBRJqADAJ8OBQG9AkEgdHlwZSBvciBtb2R1bGUgaGFzIGJlZW4gZGVmaW5lZCBtb3JlIHRoYW4gb25jZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjgKc3RydWN0IEJhcjsKc3RydWN0IEJhcjsgLy8gZXJy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ZSB0aGV5IHN0YXJ0IGZyb20gdGhlIGNyYXRlIHJvb3QuIEFzIGluIFJ1c3QgMjAxNSBjb2RlLCB0aGUgYHNlbGY6OmAgYW5kCmBzdXBlcjo6YCBwcmVmaXhlcyByZWZlciB0byB0aGUgY3VycmVudCBhbmQgcGFyZW50IG1vZHVsZXMgcmVzcGVjdGl2ZWx5LgoKQWxzbyB2ZXJpZnkgdGhhdCB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSBpbXBvcnQgbmFtZSBhbmQgdGhhdCB0aGUgaW1wb3J0IGV4aXN0cwppbiB0aGUgbW9kdWxlIGZyb20gd2hlcmUgeW91IHRyaWVkIHRvIGltcG9ydCBpdC4gRXhhbXBsZToKCmBgYAp1c2Ugc2VsZjo6c29tZXRoaW5nOjpGb287IC8vIE9rLgoKbW9kIHNvbWV0aGluZyB7CiAgICBwdWIgc3RydWN0IEZvbzsKfQojIGZuIG1haW4oKSB7fQpgYGAKCklmIHlvdSB0cmllZCB0byB1c2UgYSBtb2R1bGUgZnJvbSBhbiBleHRlcm5hbCBjcmF0ZSBhbmQgYXJlIHVzaW5nIFJ1c3QgMjAxNSwKeW91IG1heSBoYXZlIG1pc3NlZCB0aGUgYGV4dGVybiBjcmF0ZWAgZGVjbGFyYXRpb24gKHdoaWNoIGlzIHVzdWFsbHkgcGxhY2VkIGluCnRoZSBjcmF0ZSByb290KToKCmBgYGVkaXRpb24yMDE1CmV4dGVybiBjcmF0ZSBjb3JlOyAvLyBSZXF1aXJlZCB0byB1c2UgdGhlIGBjb3JlYCBjcmF0ZSBpbiBSdXN0IDIwMTUuCgp1c2UgY29yZTo6YW55OwojIGZuIG1haW4oKSB7fQpgYGAKCkluIFJ1c3QgMjAxOCB0aGUgYGV4dGVybiBjcmF0ZWAgZGVjbGFyYXRpb24gaXMgbm90IHJlcXVpcmVkIGFuZCB5b3UgY2FuIGluc3RlYWQKanVzdCBgdXNlYCBpdDoKCmBgYGVkaXRpb24yMDE4CnVzZSBjb3JlOjphbnk7IC8vIE5vIGV4dGVybiBjcmF0ZSByZXF1aXJlZCBpbiBSdXN0IDIwMTguCiMgZm4gbWFpbigpIHt9CmBgYAoAFv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AT/GCsYKAAEAxgoA/FImqAMAAMQGAAAAxQYAAL0CDgYAAMMGAgUBBFNvbWUBAQCfDgABxAYAAL0CDgYAAsMGAAEAqAIkBgAAwgYBAQCfDgACAKkCEqcDAJ8OBQEFRTA0MzIAAR8FBQABAAUAqAIkBgAAwgYBAQGkDgABwwYAAKtTJqoDAADJBgAAAgCrUyaqAwCfDgUBqQNBbiB1bmRlY2xhcmVkIHR5cGUgb3IgbW9kdWxlIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQzMwpsZXQgbWFwID0gSGFzaE1hcDo6bmV3KCk7Ci8vIGVycm9yOiBmYWlsZWQgdG8gcmVzb2x2ZTogdXNlIG9mIHVuZGVjbGFyZWQgdHlwZSBvciBtb2R1bGUgYEhhc2hNYXBgCmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSB0eXBlL21vZHVsZSdzIG5hbWUgb3IgdGhhdCB5b3UgZGlkbid0CmZvcmdldCB0byBpbXBvcnQgaXQ6CgoKYGBgCnVzZSBzdGQ6OmNvbGxlY3Rpb25zOjpIYXNoTWFwOyAvLyBIYXNoTWFwIGhhcyBiZWVuIGltcG9ydGVkLgpsZXQgbWFwOiBIYXNoTWFwPHUzMiwgdTMyPiA9IEhhc2hNYXA6Om5ldygpOyAvLyBTbyBpdCBjYW4gYmUgdXNlZCEKYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8/qQOpAwABAKkDAKtTJqoDAADIBgAAAMkGAAC9Ag4GAADHBgIFAQRTb21lAQEAnw4AAcgGAAC9Ag4GAALHBgABAKgCJAYAAMYGAQEAnw4AAgCpAhKpAwCfDgUBBUUwNDMzAAEfBQUAAQAFAKgCJAYAAMYGAQEBpA4AAccGAADaUyasAwAAzQYAAAIA2lMmrAMAnw4FAeUFQSB2YXJpYWJsZSB1c2VkIGluc2lkZSBhbiBpbm5lciBmdW5jdGlvbiBjb21lcyBmcm9tIGEgZHluYW1pYyBlbnZpcm9ubWVudC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MzQKZm4gZm9vKCkgewogICAgbGV0IHkgPSA1OwogICAgZm4gYmFyKCkgLT4gdTMyIHsKICAgICAgICB5IC8vIGVycm9yOiBjYW4ndCBjYXB0dXJlIGR5bmFtaWMgZW52aXJvbm1lbnQgaW4gYSBmbiBpdGVtOyB1c2UgdGhlCiAgICAgICAgICAvLyAgICAgICAgfHwgeyAuLi4gfSBjbG9zdXJlIGZvcm0gaW5zdGVhZC4KICAgIH0KfQpgYGAKCklubmVyIGZ1bmN0aW9ucyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlaXIgY29udGFpbmluZyBlbnZpcm9ubWVudC4gVG8gZml4IHRoaXMKZXJyb3IsIHlvdSBjYW4gcmVwbGFjZSB0aGUgZnVuY3Rpb24gd2l0aCBhIGNsb3N1cmU6CgpgYGAKZm4gZm9vKCkgewogICAgbGV0IHkgPSA1OwogICAgbGV0IGJhciA9IHx8IHsKICAgICAgICB5CiAgICB9Owp9CmBgYAoKT3IgcmVwbGFjZSB0aGUgY2FwdHVyZWQgdmFyaWFibGUgd2l0aCBhIGNvbnN0YW50IG9yIGEgc3RhdGljIGl0ZW06CgpgYGAKZm4gZm9vKCkgewogICAgc3RhdGljIG11dCBYOiB1MzIgPSA0OwogICAgY29uc3QgWTogdTMyID0gNTsKICAgIGZuIGJhcigpIC0+IHUzMiB7CiAgICAgICAgdW5zYWZlIHsKICAgICAgICAgICAgWCA9IDM7CiAgICAgICAgfQogICAgICAgIFkKICAgIH0KfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////A+UF5QUAAQDlBQDaUyasAwAAzAYAAADNBgAAvQIOBgAAywYCBQEEU29tZQEBAJ8OAAHMBgAAvQIOBgACywYAAQCoAiQGAADKBgEBAJ8OAAIAqQISqwMAnw4FAQVFMDQzNAABHwUFAAEABQCoAiQGAADKBgEBAaQOAAHLBgAAiVQmrgMAANEGAAACAIlUJq4DAJ8OBQHuAkEgbm9uLWNvbnN0YW50IHZhbHVlIHdhcyB1c2VkIGluIGEgY29uc3RhbnQgZXhwcmVzc2lvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MzUKbGV0IGZvbyA9IDQyOwpsZXQgYTogW3U4OyBmb29dOyAvLyBlcnJvcjogYXR0ZW1wdCB0byB1c2UgYSBub24tY29uc3RhbnQgdmFsdWUgaW4gYSBjb25zdGFudApgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgcmVwbGFjZSB0aGUgdmFsdWUgd2l0aCBhIGNvbnN0YW50LiBFeGFtcGxlOgoKYGBgCmxldCBhOiBbdTg7IDQyXTsgLy8gb2shCmBgYAoKT3I6CgpgYGAKY29uc3QgRk9POiB1c2l6ZSA9IDQyOwpsZXQgYTogW3U4OyBGT09dOyAvLyBvayEKYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH///////8P7gLuAgABAO4CAIlUJq4DAADQBgAAANEGAAC9Ag4GAADPBgIFAQRTb21lAQEAnw4AAdAGAAC9Ag4GAALPBgABAKgCJAYAAM4GAQEAnw4AAgCpAhKtAwCfDgUBBUUwNDM1AAEfBQUAAQAFAKgCJAYAAM4GAQEBpA4AAc8GAAC4VCawAwAA1QYAAAIAuFQmsAMAnw4FAZsMVGhlIGZ1bmN0aW9uYWwgcmVjb3JkIHVwZGF0ZSBzeW50YXggd2FzIHVzZWQgb24gc29tZXRoaW5nIG90aGVyIHRoYW4gYSBzdHJ1Y3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDM2CmVudW0gUHVibGljYXRpb25GcmVxdWVuY3kgewogICAgV2Vla2x5LAogICAgU2VtaU1vbnRobHkgeyBkYXlzOiAodTgsIHU4KSwgYW5udWFsX3NwZWNpYWw6IGJvb2wgfSwKfQoKZm4gb25lX3VwX2NvbXBldGl0b3IoY29tcGV0aXRvcl9mcmVxdWVuY3k6IFB1YmxpY2F0aW9uRnJlcXVlbmN5KQogICAgICAgICAgICAgICAgICAgICAtPiBQdWJsaWNhdGlvbkZyZXF1ZW5jeSB7CiAgICBtYXRjaCBjb21wZXRpdG9yX2ZyZXF1ZW5jeSB7CiAgICAgICAgUHVibGljYXRpb25GcmVxdWVuY3k6OldlZWtseSA9PiBQdWJsaWNhdGlvbkZyZXF1ZW5jeTo6U2VtaU1vbnRobHkgewogICAgICAgICAgICBkYXlzOiAoMSwgMTUpLCBhbm51YWxfc3BlY2lhbDogZmFsc2UKICAgICAgICB9LAogICAgICAgIGMgQCBQdWJsaWNhdGlvbkZyZXF1ZW5jeTo6U2VtaU1vbnRobHl7IC4uIH0gPT4KICAgICAgICAgICAgUHVibGljYXRpb25GcmVxdWVuY3k6OlNlbWlNb250aGx5IHsKICAgICAgICAgICAgICAgIGFubnVhbF9zcGVjaWFsOiB0cnVlLCAuLmMgLy8gZXJyb3I6IGZ1bmN0aW9uYWwgcmVjb3JkIHVwZGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgc3ludGF4IHJlcXVpcmVzIGEgc3RydWN0CiAgICAgICAgfQogICAgfQp9CmBgYAoKVGhlIGZ1bmN0aW9uYWwgcmVjb3JkIHVwZGF0ZSBzeW50YXggaXMgb25seSBhbGxvd2VkIGZvciBzdHJ1Y3RzIChzdHJ1Y3QtbGlrZQplbnVtIHZhcmlhbnRzIGRvbid0IHF1YWxpZnksIGZvciBleGFtcGxlKS4gVG8gZml4IHRoZSBwcmV2aW91cyBjb2RlLCByZXdyaXRlIHRoZQpleHByZXNzaW9uIHdpdGhvdXQgZnVuY3Rpb25hbCByZWNvcmQgdXBkYXRlIHN5bnRheDoKCmBgYAplbnVtIFB1YmxpY2F0aW9uRnJlcXVlbmN5IHsKICAgIFdlZWtseSwKICAgIFNlbWlNb250aGx5IHsgZGF5czogKHU4LCB1OCksIGFubnVhbF9zcGVjaWFsOiBib29sIH0sCn0KCmZuIG9uZV91cF9jb21wZXRpdG9yKGNvbXBldGl0b3JfZnJlcXVlbmN5OiBQdWJsaWNhdGlvbkZyZXF1ZW5jeSkKICAgICAgICAgICAgICAgICAgICAgLT4gUHVibGljYXRpb25GcmVxdWVuY3kgewogICAgbWF0Y2ggY29tcGV0aXRvcl9mcmVxdWVuY3kgewogICAgICAgIFB1YmxpY2F0aW9uRnJlcXVlbmN5OjpXZWVrbHkgPT4gUHVibGljYXRpb25GcmVxdWVuY3k6OlNlbWlNb250aGx5IHsKICAgICAgICAgICAgZGF5czogKDEsIDE1KSwgYW5udWFsX3NwZWNpYWw6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICBQdWJsaWNhdGlvbkZyZXF1ZW5jeTo6U2VtaU1vbnRobHl7IGRheXMsIC4uIH0gPT4KICAgICAgICAgICAgUHVibGljYXRpb25GcmVxdWVuY3k6OlNlbWlNb250aGx5IHsKICAgICAgICAgICAgICAgIGRheXMsIGFubnVhbF9zcGVjaWFsOiB0cnVlIC8vIG9rIQogICAgICAgIH0KICAgIH0KfQpgYGAKABn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8/mwybDAABAJsMALhUJrADAADUBgAAANUGAAC9Ag4GAADTBgIFAQRTb21lAQEAnw4AAdQGAAC9Ag4GAALTBgABAKgCJAYAANIGAQEAnw4AAgCpAhKvAwCfDgUBBUUwNDM2AAEfBQUAAQAFAKgCJAYAANIGAQEBpA4AAdMGAADnVCayAwAA2QYAAAIA51QmsgMAnw4FAcQDQW4gYXNzb2NpYXRlZCB0eXBlIHdob3NlIG5hbWUgZG9lcyBub3QgbWF0Y2ggYW55IG9mIHRoZSBhc3NvY2lhdGVkIHR5cGVzCmluIHRoZSB0cmFpdCB3YXMgdXNlZCB3aGVuIGltcGxlbWVudGluZyB0aGUgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDM3CnRyYWl0IEZvbyB7fQoKaW1wbCBGb28gZm9yIGkzMiB7CiAgICB0eXBlIEJhciA9IGJvb2w7Cn0KYGBgCgpUcmFpdCBpbXBsZW1lbnRhdGlvbnMgY2FuIG9ubHkgaW1wbGVtZW50IGFzc29jaWF0ZWQgdHlwZXMgdGhhdCBhcmUgbWVtYmVycyBvZgp0aGUgdHJhaXQgaW4gcXVlc3Rpb24uCgpUaGUgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHRvIHJlbW92ZSB0aGUgZXh0cmFuZW91cyBhc3NvY2lhdGVkIHR5cGU6CgpgYGAKdHJhaXQgRm9vIHt9CgppbXBsIEZvbyBmb3IgaTMyIHt9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEPxAPEAwABAMQDAOdUJrIDAADYBgAAANkGAAC9Ag4GAADXBgIFAQRTb21lAQEAnw4AAdgGAAC9Ag4GAALXBgABAKgCJAYAANYGAQEAnw4AAgCpAhKxAwCfDgUBBUUwNDM3AAEfBQUAAQAFAKgCJAYAANYGAQEBpA4AAdcGAACWVSa0AwAA3QYAAAIAllUmtAMAnw4FAdsDQW4gYXNzb2NpYXRlZCBjb25zdGFudCB3aG9zZSBuYW1lIGRvZXMgbm90IG1hdGNoIGFueSBvZiB0aGUgYXNzb2NpYXRlZCBjb25zdGFudHMKaW4gdGhlIHRyYWl0IHdhcyB1c2VkIHdoZW4gaW1wbGVtZW50aW5nIHRoZSB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MzgKdHJhaXQgRm9vIHt9CgppbXBsIEZvbyBmb3IgaTMyIHsKICAgIGNvbnN0IEJBUjogYm9vbCA9IHRydWU7Cn0KYGBgCgpUcmFpdCBpbXBsZW1lbnRhdGlvbnMgY2FuIG9ubHkgaW1wbGVtZW50IGFzc29jaWF0ZWQgY29uc3RhbnRzIHRoYXQgYXJlCm1lbWJlcnMgb2YgdGhlIHRyYWl0IGluIHF1ZXN0aW9uLgoKVGhlIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcyB0byByZW1vdmUgdGhlIGV4dHJhbmVvdXMgYXNzb2NpYXRlZCBjb25zdGFudDoKCmBgYAp0cmFpdCBGb28ge30KCmltcGwgRm9vIGZvciBpMzIge30KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///z/bA9sDAAEA2wMAllUmtAMAANwGAAAA3QYAAL0CDgYAANsGAgUBBFNvbWUBAQCfDgAB3AYAAL0CDgYAAtsGAAEAqAIkBgAA2gYBAQCfDgACAKkCErMDAJ8OBQEFRTA0MzgAAR8FBQABAAUAqAIkBgAA2gYBAQGkDgAB2wYAAMVVJrYDAADhBgAAAgDFVSa2AwCfDgUBrgRUaGUgbGVuZ3RoIG9mIHRoZSBwbGF0Zm9ybS1pbnRyaW5zaWMgZnVuY3Rpb24gYHNpbWRfc2h1ZmZsZWAgd2Fzbid0IHNwZWNpZmllZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MzkKIyFbZmVhdHVyZShwbGF0Zm9ybV9pbnRyaW5zaWNzKV0KCmV4dGVybiAicGxhdGZvcm0taW50cmluc2ljIiB7CiAgICBmbiBzaW1kX3NodWZmbGU8QSxCPihhOiBBLCBiOiBBLCBjOiBbdTMyOyA4XSkgLT4gQjsKICAgIC8vIGVycm9yOiBpbnZhbGlkIGBzaW1kX3NodWZmbGVgLCBuZWVkcyBsZW5ndGg6IGBzaW1kX3NodWZmbGVgCn0KYGBgCgpUaGUgYHNpbWRfc2h1ZmZsZWAgZnVuY3Rpb24gbmVlZHMgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgcGFzc2VkIGFzCmxhc3QgcGFyYW1ldGVyIGluIGl0cyBuYW1lLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUocGxhdGZvcm1faW50cmluc2ljcyldCgpleHRlcm4gInBsYXRmb3JtLWludHJpbnNpYyIgewogICAgZm4gc2ltZF9zaHVmZmxlODxBLEI+KGE6IEEsIGI6IEEsIGM6IFt1MzI7IDhdKSAtPiBCOwp9CmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////D64ErgQAAQCuBADFVSa2AwAA4AYAAADhBgAAvQIOBgAA3wYCBQEEU29tZQEBAJ8OAAHgBgAAvQIOBgAC3wYAAQCoAiQGAADeBgEBAJ8OAAIAqQIStQMAnw4FAQVFMDQzOQABHwUFAAEABQCoAiQGAADeBgEBAaQOAAHfBgAA9FUmuAMAAOUGAAACAPRVJrgDAJ8OBQH5BUEgcHJpdmF0ZSB0cmFpdCB3YXMgdXNlZCBvbiBhIHB1YmxpYyB0eXBlIHBhcmFtZXRlciBib3VuZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDQ1CiMhW2RlbnkocHJpdmF0ZV9pbl9wdWJsaWMpXQoKdHJhaXQgRm9vIHsKICAgIGZuIGR1bW15KCZzZWxmKSB7IH0KfQoKcHViIHRyYWl0IEJhciA6IEZvbyB7fSAvLyBlcnJvcjogcHJpdmF0ZSB0cmFpdCBpbiBwdWJsaWMgaW50ZXJmYWNlCnB1YiBzdHJ1Y3QgQmFyMjxUOiBGb28+KHB1YiBUKTsgLy8gc2FtZSBlcnJvcgpwdWIgZm4gZm9vPFQ6IEZvbz4gKHQ6IFQpIHt9IC8vIHNhbWUgZXJyb3IKCmZuIG1haW4oKSB7fQpgYGAKClRvIHNvbHZlIHRoaXMgZXJyb3IsIHBsZWFzZSBlbnN1cmUgdGhhdCB0aGUgdHJhaXQgaXMgYWxzbyBwdWJsaWMuIFRoZSB0cmFpdApjYW4gYmUgbWFkZSBpbmFjY2Vzc2libGUgaWYgbmVjZXNzYXJ5IGJ5IHBsYWNpbmcgaXQgaW50byBhIHByaXZhdGUgaW5uZXIKbW9kdWxlLCBidXQgaXQgc3RpbGwgaGFzIHRvIGJlIG1hcmtlZCB3aXRoIGBwdWJgLiBFeGFtcGxlOgoKYGBgCnB1YiB0cmFpdCBGb28geyAvLyB3ZSBzZXQgdGhlIEZvbyB0cmFpdCBwdWJsaWMKICAgIGZuIGR1bW15KCZzZWxmKSB7IH0KfQoKcHViIHRyYWl0IEJhciA6IEZvbyB7fSAvLyBvayEKcHViIHN0cnVjdCBCYXIyPFQ6IEZvbz4ocHViIFQpOyAvLyBvayEKcHViIGZuIGZvbzxUOiBGb28+ICh0OiBUKSB7fSAvLyBvayEKCmZuIG1haW4oKSB7fQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////AfkF+QUAAQD5BQD0VSa4AwAA5AYAAADlBgAAvQIOBgAA4wYCBQEEU29tZQEBAJ8OAAHkBgAAvQIOBgAC4wYAAQCoAiQGAADiBgEBAJ8OAAIAqQIStwMAnw4FAQVFMDQ0NQABHwUFAAEABQCoAiQGAADiBgEBAaQOAAHjBgAAo1YmugMAAOkGAAACAKNWJroDAJ8OBQGMB0EgcHJpdmF0ZSB0eXBlIHdhcyB1c2VkIGluIGEgcHVibGljIHR5cGUgc2lnbmF0dXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ0NgojIVtkZW55KHByaXZhdGVfaW5fcHVibGljKV0Kc3RydWN0IEJhcih1MzIpOwoKbW9kIGZvbyB7CiAgICB1c2UgY3JhdGU6OkJhcjsKICAgIHB1YiBmbiBiYXIoKSAtPiBCYXIgeyAvLyBlcnJvcjogcHJpdmF0ZSB0eXBlIGluIHB1YmxpYyBpbnRlcmZhY2UKICAgICAgICBCYXIoMCkKICAgIH0KfQoKZm4gbWFpbigpIHt9CmBgYAoKVGhlcmUgYXJlIHR3byB3YXlzIHRvIHNvbHZlIHRoaXMgZXJyb3IuIFRoZSBmaXJzdCBpcyB0byBtYWtlIHRoZSBwdWJsaWMgdHlwZQpzaWduYXR1cmUgb25seSBwdWJsaWMgdG8gYSBtb2R1bGUgdGhhdCBhbHNvIGhhcyBhY2Nlc3MgdG8gdGhlIHByaXZhdGUgdHlwZS4KVGhpcyBpcyBkb25lIGJ5IHVzaW5nIHB1YihjcmF0ZSkgb3IgcHViKGluIGNyYXRlOjpteV9tb2Q6OmV0YykKRXhhbXBsZToKCmBgYApzdHJ1Y3QgQmFyKHUzMik7Cgptb2QgZm9vIHsKICAgIHVzZSBjcmF0ZTo6QmFyOwogICAgcHViKGNyYXRlKSBmbiBiYXIoKSAtPiBCYXIgeyAvLyBvbmx5IHB1YmxpYyB0byBjcmF0ZSByb290CiAgICAgICAgQmFyKDApCiAgICB9Cn0KCmZuIG1haW4oKSB7fQpgYGAKClRoZSBvdGhlciB3YXkgdG8gc29sdmUgdGhpcyBlcnJvciBpcyB0byBtYWtlIHRoZSBwcml2YXRlIHR5cGUgcHVibGljLgpFeGFtcGxlOgoKYGBgCnB1YiBzdHJ1Y3QgQmFyKHUzMik7IC8vIHdlIHNldCB0aGUgQmFyIHR5cGUgcHVibGljCm1vZCBmb28gewogICAgdXNlIGNyYXRlOjpCYXI7CiAgICBwdWIgZm4gYmFyKCkgLT4gQmFyIHsgLy8gb2shCiAgICAgICAgQmFyKDApCiAgICB9Cn0KCmZuIG1haW4oKSB7fQpgYGAKAA////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8fjAeMBwABAIwHAKNWJroDAADoBgAAAOkGAAC9Ag4GAADnBgIFAQRTb21lAQEAnw4AAegGAAC9Ag4GAALnBgABAKgCJAYAAOYGAQEAnw4AAgCpAhK5AwCfDgUBBUUwNDQ2AAEfBQUAAQAFAKgCJAYAAOYGAQEBpA4AAecGAADSVia8AwAA7QYAAAIA0lYmvAMAnw4FAY8DIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhlIGBwdWJgIGtleXdvcmQgd2FzIHVzZWQgaW5zaWRlIGEgZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgCmZuIGZvbygpIHsKICAgIHB1YiBzdHJ1Y3QgQmFyOyAvLyBlcnJvcjogdmlzaWJpbGl0eSBoYXMgbm8gZWZmZWN0IGluc2lkZSBmdW5jdGlvbnMKfQpgYGAKClNpbmNlIHdlIGNhbm5vdCBhY2Nlc3MgaXRlbXMgZGVmaW5lZCBpbnNpZGUgYSBmdW5jdGlvbiwgdGhlIHZpc2liaWxpdHkgb2YgaXRzCml0ZW1zIGRvZXMgbm90IGltcGFjdCBvdXRlciBjb2RlLiBTbyB1c2luZyB0aGUgYHB1YmAga2V5d29yZCBpbiB0aGlzIGNvbnRleHQKaXMgaW52YWxpZC4KAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wGPA48DAAEAjwMA0lYmvAMAAOwGAAAA7QYAAL0CDgYAAOsGAgUBBFNvbWUBAQCfDgAB7AYAAL0CDgYAAusGAAEAqAIkBgAA6gYBAQCfDgACAKkCErsDAJ8OBQEFRTA0NDcAAR8FBQABAAUAqAIkBgAA6gYBAQGkDgAB6wYAAIFXJr4DAADxBgAAAgCBVya+AwCfDgUBxAMjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGUgYHB1YmAga2V5d29yZCB3YXMgdXNlZCBpbnNpZGUgYSBwdWJsaWMgZW51bS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKcHViIGVudW0gRm9vIHsKICAgIHB1YiBCYXIsIC8vIGVycm9yOiB1bm5lY2Vzc2FyeSBgcHViYCB2aXNpYmlsaXR5Cn0KYGBgCgpTaW5jZSB0aGUgZW51bSBpcyBhbHJlYWR5IHB1YmxpYywgYWRkaW5nIGBwdWJgIG9uIG9uZSBpdHMgZWxlbWVudHMgaXMKdW5uZWNlc3NhcnkuIEV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKZW51bSBGb28gewogICAgcHViIEJhciwgLy8gbm90IG9rIQp9CmBgYAoKVGhpcyBpcyB0aGUgY29ycmVjdCBzeW50YXg6CgpgYGAKcHViIGVudW0gRm9vIHsKICAgIEJhciwgLy8gb2shCn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQ/EA8QDAAEAxAMAgVcmvgMAAPAGAAAA8QYAAL0CDgYAAO8GAgUBBFNvbWUBAQCfDgAB8AYAAL0CDgYAAu8GAAEAqAIkBgAA7gYBAQCfDgACAKkCEr0DAJ8OBQEFRTA0NDgAAR8FBQABAAUAqAIkBgAA7gYBAQGkDgAB7wYAALBXJsADAAD1BgAAAgCwVybAAwCfDgUB4AVBIHZpc2liaWxpdHkgcXVhbGlmaWVyIHdhcyB1c2VkIHdoZW4gaXQgd2FzIHVubmVjZXNzYXJ5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTA0NDkKc3RydWN0IEJhcjsKCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oKTsKfQoKcHViIGltcGwgQmFyIHt9IC8vIGVycm9yOiB1bm5lY2Vzc2FyeSB2aXNpYmlsaXR5IHF1YWxpZmllcgoKcHViIGltcGwgRm9vIGZvciBCYXIgeyAvLyBlcnJvcjogdW5uZWNlc3NhcnkgdmlzaWJpbGl0eSBxdWFsaWZpZXIKICAgIHB1YiBmbiBmb28oKSB7fSAvLyBlcnJvcjogdW5uZWNlc3NhcnkgdmlzaWJpbGl0eSBxdWFsaWZpZXIKfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgcmVtb3ZlIHRoZSB2aXNpYmlsaXR5IHF1YWxpZmllciB3aGVuIGl0IGlzIG5vdApyZXF1aXJlZC4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpOwp9CgovLyBEaXJlY3RseSBpbXBsZW1lbnRlZCBtZXRob2RzIHNoYXJlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSB0eXBlIGl0c2VsZiwKLy8gc28gYHB1YmAgaXMgdW5uZWNlc3NhcnkgaGVyZQppbXBsIEJhciB7fQoKLy8gVHJhaXQgbWV0aG9kcyBzaGFyZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgdHJhaXQsIHNvIGBwdWJgIGlzCi8vIHVubmVjZXNzYXJ5IGluIGVpdGhlciBjYXNlCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCkge30KfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8P4AXgBQABAOAFALBXJsADAAD0BgAAAPUGAAC9Ag4GAADzBgIFAQRTb21lAQEAnw4AAfQGAAC9Ag4GAALzBgABAKgCJAYAAPIGAQEAnw4AAgCpAhK/AwCfDgUBBUUwNDQ5AAEfBQUAAQAFAKgCJAYAAPIGAQEBpA4AAfMGAADfVybCAwAA+QYAAAIA31cmwgMAnw4FAfgGQSBzdHJ1Y3QgY29uc3RydWN0b3Igd2l0aCBwcml2YXRlIGZpZWxkcyB3YXMgaW52b2tlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NTEKbW9kIEJhciB7CiAgICBwdWIgc3RydWN0IEZvbyB7CiAgICAgICAgcHViIGE6IGlzaXplLAogICAgICAgIGI6IGlzaXplLAogICAgfQp9CgpsZXQgZiA9IEJhcjo6Rm9veyBhOiAwLCBiOiAwIH07IC8vIGVycm9yOiBmaWVsZCBgYmAgb2Ygc3RydWN0IGBCYXI6OkZvb2AKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgaXMgcHJpdmF0ZQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHRoZSBmaWVsZHMgb2YgdGhlIHN0cnVjdCBhcmUgcHVibGljLApvciBpbXBsZW1lbnQgYSBmdW5jdGlvbiBmb3IgZWFzeSBpbnN0YW50aWF0aW9uLiBFeGFtcGxlczoKCmBgYAptb2QgQmFyIHsKICAgIHB1YiBzdHJ1Y3QgRm9vIHsKICAgICAgICBwdWIgYTogaXNpemUsCiAgICAgICAgcHViIGI6IGlzaXplLCAvLyB3ZSBzZXQgYGJgIGZpZWxkIHB1YmxpYwogICAgfQp9CgpsZXQgZiA9IEJhcjo6Rm9veyBhOiAwLCBiOiAwIH07IC8vIG9rIQpgYGAKCk9yOgoKYGBgCm1vZCBCYXIgewogICAgcHViIHN0cnVjdCBGb28gewogICAgICAgIHB1YiBhOiBpc2l6ZSwKICAgICAgICBiOiBpc2l6ZSwgLy8gc3RpbGwgcHJpdmF0ZQogICAgfQoKICAgIGltcGwgRm9vIHsKICAgICAgICBwdWIgZm4gbmV3KCkgLT4gRm9vIHsgLy8gd2UgY3JlYXRlIGEgbWV0aG9kIHRvIGluc3RhbnRpYXRlIGBGb29gCiAgICAgICAgICAgIEZvbyB7IGE6IDAsIGI6IDAgfQogICAgICAgIH0KICAgIH0KfQoKbGV0IGYgPSBCYXI6OkZvbzo6bmV3KCk7IC8vIG9rIQpgYGAKAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////3/4BvgGAAEA+AYA31cmwgMAAPgGAAAA+QYAAL0CDgYAAPcGAgUBBFNvbWUBAQCfDgAB+AYAAL0CDgYAAvcGAAEAqAIkBgAA9gYBAQCfDgACAKkCEsEDAJ8OBQEFRTA0NTEAAR8FBQABAAUAqAIkBgAA9gYBAQGkDgAB9wYAAI5YJsQDAAD9BgAAAgCOWCbEAwCfDgUB2AJBbiBpbnZhbGlkIGxpbnQgYXR0cmlidXRlIGhhcyBiZWVuIGdpdmVuLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ1MgojIVthbGxvdyhmb28gPSAiIildIC8vIGVycm9yOiBtYWxmb3JtZWQgbGludCBhdHRyaWJ1dGUKYGBgCgpMaW50IGF0dHJpYnV0ZXMgb25seSBhY2NlcHQgYSBsaXN0IG9mIGlkZW50aWZpZXJzICh3aGVyZSBlYWNoIGlkZW50aWZpZXIgaXMgYQpsaW50IG5hbWUpLiBFbnN1cmUgdGhlIGF0dHJpYnV0ZSBpcyBvZiB0aGlzIGZvcm06CgpgYGAKIyFbYWxsb3coZm9vKV0gLy8gb2shCi8vIG9yOgojIVthbGxvdyhmb28sIGZvbzIpXSAvLyBvayEKYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH///8H2ALYAgABANgCAI5YJsQDAAD8BgAAAP0GAAC9Ag4GAAD7BgIFAQRTb21lAQEAnw4AAfwGAAC9Ag4GAAL7BgABAKgCJAYAAPoGAQEAnw4AAgCpAhLDAwCfDgUBBUUwNDUyAAEfBQUAAQAFAKgCJAYAAPoGAQEBpA4AAfsGAAC9WCbGAwAAgQcAAAIAvVgmxgMAnw4FAacIQSBsaW50IGNoZWNrIGF0dHJpYnV0ZSB3YXMgb3ZlcnJ1bGVkIGJ5IGEgYGZvcmJpZGAgZGlyZWN0aXZlIHNldCBhcyBhbgphdHRyaWJ1dGUgb24gYW4gZW5jbG9zaW5nIHNjb3BlLCBvciBvbiB0aGUgY29tbWFuZCBsaW5lIHdpdGggdGhlIGAtRmAgb3B0aW9uLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ1MwojIVtmb3JiaWQobm9uX3NuYWtlX2Nhc2UpXQoKI1thbGxvdyhub25fc25ha2VfY2FzZSldCmZuIG1haW4oKSB7CiAgICBsZXQgTXlOdW1iZXIgPSAyOyAvLyBlcnJvcjogYWxsb3cobm9uX3NuYWtlX2Nhc2UpIG92ZXJydWxlZCBieSBvdXRlcgogICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGZvcmJpZChub25fc25ha2VfY2FzZSkKfQpgYGAKClRoZSBgZm9yYmlkYCBsaW50IHNldHRpbmcsIGxpa2UgYGRlbnlgLCB0dXJucyB0aGUgY29ycmVzcG9uZGluZyBjb21waWxlcgp3YXJuaW5nIGludG8gYSBoYXJkIGVycm9yLiBVbmxpa2UgYGRlbnlgLCBgZm9yYmlkYCBwcmV2ZW50cyBpdHNlbGYgZnJvbSBiZWluZwpvdmVycmlkZGVuIGJ5IGlubmVyIGF0dHJpYnV0ZXMuCgpJZiB5b3UncmUgc3VyZSB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgbGludCBjaGVjaywgeW91IGNhbiBjaGFuZ2UgYGZvcmJpZGAgdG8KYGRlbnlgIChvciB1c2UgYC1EYCBpbnN0ZWFkIG9mIGAtRmAgaWYgdGhlIGBmb3JiaWRgIHNldHRpbmcgd2FzIGdpdmVuIGFzIGEKY29tbWFuZC1saW5lIG9wdGlvbikgdG8gYWxsb3cgdGhlIGlubmVyIGxpbnQgY2hlY2sgYXR0cmlidXRlOgoKYGBgCiMhW2Rlbnkobm9uX3NuYWtlX2Nhc2UpXQoKI1thbGxvdyhub25fc25ha2VfY2FzZSldCmZuIG1haW4oKSB7CiAgICBsZXQgTXlOdW1iZXIgPSAyOyAvLyBvayEKfQpgYGAKCk90aGVyd2lzZSwgZWRpdCB0aGUgY29kZSB0byBwYXNzIHRoZSBsaW50IGNoZWNrLCBhbmQgcmVtb3ZlIHRoZSBvdmVycnVsZWQKYXR0cmlidXRlOgoKYGBgCiMhW2ZvcmJpZChub25fc25ha2VfY2FzZSldCgpmbiBtYWluKCkgewogICAgbGV0IG15X251bWJlciA9IDI7Cn0KYGBgCgAR////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////D6cIpwgAAQCnCAC9WCbGAwAAgAcAAACBBwAAvQIOBgAA/wYCBQEEU29tZQEBAJ8OAAGABwAAvQIOBgAC/wYAAQCoAiQGAAD+BgEBAJ8OAAIAqQISxQMAnw4FAQVFMDQ1MwABHwUFAAEABQCoAiQGAAD+BgEBAaQOAAH/BgAA7FgmyAMAAIUHAAACAOxYJsgDAJ8OBQHJAkEgbGluayBuYW1lIHdhcyBnaXZlbiB3aXRoIGFuIGVtcHR5IG5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDU0CiNbbGluayhuYW1lID0gIiIpXSBleHRlcm4ge30KLy8gZXJyb3I6IGAjW2xpbmsobmFtZSA9ICIiKV1gIGdpdmVuIHdpdGggZW1wdHkgbmFtZQpgYGAKClRoZSBydXN0IGNvbXBpbGVyIGNhbm5vdCBsaW5rIHRvIGFuIGV4dGVybmFsIGxpYnJhcnkgaWYgeW91IGRvbid0IGdpdmUgaXQgaXRzCm5hbWUuIEV4YW1wbGU6CgpgYGBub19ydW4KI1tsaW5rKG5hbWUgPSAic29tZV9saWIiKV0gZXh0ZXJuIHt9IC8vIG9rIQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af8DyQLJAgABAMkCAOxYJsgDAACEBwAAAIUHAAC9Ag4GAACDBwIFAQRTb21lAQEAnw4AAYQHAAC9Ag4GAAKDBwABAKgCJAYAAIIHAQEAnw4AAgCpAhLHAwCfDgUBBUUwNDU0AAEfBQUAAQAFAKgCJAYAAIIHAQEBpA4AAYMHAACbWSbKAwAAiQcAAAIAm1kmygMAnw4FAbgFTGlua2luZyB3aXRoIGBraW5kPWZyYW1ld29ya2AgaXMgb25seSBzdXBwb3J0ZWQgd2hlbiB0YXJnZXRpbmcgbWFjT1MsCmFzIGZyYW1ld29ya3MgYXJlIHNwZWNpZmljIHRvIHRoYXQgb3BlcmF0aW5nIHN5c3RlbS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKHNob3VsZC1jb21waWxlX2ZhaWwtYnV0LWNhbm5vdC1kb2N0ZXN0LWNvbmRpdGlvbmFsbHktd2l0aG91dC1tYWNvcykKI1tsaW5rKG5hbWUgPSAiRm9vQ29yZVNlcnZpY2VzIiwga2luZCA9ICJmcmFtZXdvcmsiKV0gZXh0ZXJuIHt9Ci8vIE9TIHVzZWQgdG8gY29tcGlsZSBpcyBMaW51eCBmb3IgZXhhbXBsZQpgYGAKClRvIHNvbHZlIHRoaXMgZXJyb3IgeW91IGNhbiB1c2UgY29uZGl0aW9uYWwgY29tcGlsYXRpb246CgpgYGAKI1tjZmdfYXR0cih0YXJnZXQ9Im1hY29zIiwgbGluayhuYW1lID0gIkZvb0NvcmVTZXJ2aWNlcyIsIGtpbmQgPSAiZnJhbWV3b3JrIikpXQpleHRlcm4ge30KYGBgCgpMZWFybiBtb3JlIGluIHRoZSBbQ29uZGl0aW9uYWwgQ29tcGlsYXRpb25dW2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uXSBzZWN0aW9uCm9mIHRoZSBSZWZlcmVuY2UuCgpbY29uZGl0aW9uYWwtY29tcGlsYXRpb25dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9hdHRyaWJ1dGVzLmh0bWwjY29uZGl0aW9uYWwtY29tcGlsYXRpb24KAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////3+4BbgFAAEAuAUAm1kmygMAAIgHAAAAiQcAAL0CDgYAAIcHAgUBBFNvbWUBAQCfDgABiAcAAL0CDgYAAocHAAEAqAIkBgAAhgcBAQCfDgACAKkCEskDAJ8OBQEFRTA0NTUAAR8FBQABAAUAqAIkBgAAhgcBAQGkDgABhwcAAMpZJswDAACNBwAAAgDKWSbMAwCfDgUBowJBbiB1bmtub3duICJraW5kIiB3YXMgc3BlY2lmaWVkIGZvciBhIGxpbmsgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ1OAojW2xpbmsoa2luZCA9ICJ3b25kZXJmdWxfdW5pY29ybiIpXSBleHRlcm4ge30KLy8gZXJyb3I6IHVua25vd24ga2luZDogYHdvbmRlcmZ1bF91bmljb3JuYApgYGAKClBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgImtpbmQiIHZhbHVlLCBmcm9tIG9uZSBvZiB0aGUgZm9sbG93aW5nOgoKKiBzdGF0aWMKKiBkeWxpYgoqIGZyYW1ld29yawoABf///////////wH///////////8B////////////Af///////////wH/////f6MCowIAAQCjAgDKWSbMAwAAjAcAAACNBwAAvQIOBgAAiwcCBQEEU29tZQEBAJ8OAAGMBwAA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b3QtZG9jdGVzdC1tdWx0aWNyYXRlLXByb2plY3QpCi8vIEluIHNvbWVfY3JhdGU6CiNbbWFjcm9fZXhwb3J0XQptYWNyb19ydWxlcyEgZ2V0X3RhY29zIHsKICAgIC4uLgp9CgojW21hY3JvX2V4cG9ydF0KbWFjcm9fcnVsZXMhIGdldF9waW1pZW50b3MgewogICAgLi4uCn0KCi8vIEluIHlvdXIgY3JhdGU6CiNbbWFjcm9fdXNlKGdldF90YWNvcywgZ2V0X3BpbWllbnRvcyldIC8vIEl0IGltcG9ydHMgYGdldF90YWNvc2AgYW5kCmV4dGVybiBjcmF0ZSBzb21lX2NyYXRlOyAgICAgICAgICAgICAgIC8vIGBnZXRfcGltaWVudG9zYCBtYWNyb3MgZnJvbSBzb21lX2NyYXRlCmBgYAoKSWYgeW91IHdvdWxkIGxpa2UgdG8gaW1wb3J0IGFsbCBleHBvcnRlZCBtYWNyb3MsIHdyaXRlIGBtYWNyb191c2VgIHdpdGggbm8KYXJndW1lbnRzLgoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////Ad0G3QYAAQDdBgDXWibSAwAAmAcAAACZBwAAvQIOBgAAlwcCBQEEU29tZQEBAJ8OAAGYBwAAvQIOBgAClwcAAQCoAiQGAACWBwEBAJ8OAAIAqQIS0QMAnw4FAQVFMDQ2NgABHwUFAAEABQCoAiQGAACWBwEBAaQOAAGXBwAAhlsm1AMAAJ0HAAACAIZbJtQDAJ8OBQHxBEEgbm9uLXJvb3QgbW9kdWxlIHRyaWVkIHRvIGltcG9ydCBtYWNyb3MgZnJvbSBhbm90aGVyIGNyYXRlLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ2OAptb2QgZm9vIHsKICAgICNbbWFjcm9fdXNlKGRlYnVnX2Fzc2VydCldICAvLyBlcnJvcjogbXVzdCBiZSBhdCBjcmF0ZSByb290IHRvIGltcG9ydAogICAgZXh0ZXJuIGNyYXRlIGNvcmU7ICAgICAgICAgIC8vICAgICAgICBtYWNyb3MgZnJvbSBhbm90aGVyIGNyYXRlCiAgICBmbiBydW5fbWFjcm8oKSB7IGRlYnVnX2Fzc2VydCEodHJ1ZSk7IH0KfQpgYGAKCk9ubHkgYGV4dGVybiBjcmF0ZWAgaW1wb3J0cyBhdCB0aGUgY3JhdGUgcm9vdCBsZXZlbCBhcmUgYWxsb3dlZCB0byBpbXBvcnQKbWFjcm9zLgoKRWl0aGVyIG1vdmUgdGhlIG1hY3JvIGltcG9ydCB0byBjcmF0ZSByb290IG9yIGRvIHdpdGhvdXQgdGhlIGZvcmVpZ24gbWFjcm9zLgpUaGlzIHdpbGwgd29yazoKCmBgYAojW21hY3JvX3VzZShkZWJ1Z19hc3NlcnQpXSAvLyBvayEKZXh0ZXJuIGNyYXRlIGNvcmU7Cgptb2QgZm9vIHsKICAgIGZuIHJ1bl9tYWNybygpIHsgZGVidWdfYXNzZXJ0ISh0cnVlKTsgfQp9CiMgZm4gbWFpbigpIHt9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////3/xBPEEAAEA8QQAhlsm1AMAAJwHAAAAnQcAAL0CDgYAAJsHAgUBBFNvbWUBAQCfDgABnAcAAL0CDgYAApsHAAEAqAIkBgAAmgcBAQCfDgACAKkCEtMDAJ8OBQEFRTA0NjgAAR8FBQABAAUAqAIkBgAAmgcBAQGkDgABmwcAALVbJtYDAAChBwAAAgC1WybWAwCfDgUB8wVBIG1hY3JvIGxpc3RlZCBmb3IgaW1wb3J0IHdhcyBub3QgZm91bmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDY5CiNbbWFjcm9fdXNlKGRyaW5rLCBiZV9tZXJyeSldIC8vIGVycm9yOiBpbXBvcnRlZCBtYWNybyBub3QgZm91bmQKZXh0ZXJuIGNyYXRlIGFsbG9jOwoKZm4gbWFpbigpIHsKICAgIC8vIC4uLgp9CmBgYAoKRWl0aGVyIHRoZSBsaXN0ZWQgbWFjcm8gaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgaW1wb3J0ZWQgY3JhdGUsIG9yIGl0IGlzIG5vdApleHBvcnRlZCBmcm9tIHRoZSBnaXZlbiBjcmF0ZS4KClRoaXMgY291bGQgYmUgY2F1c2VkIGJ5IGEgdHlwby4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgbWFjcm8ncyBuYW1lPwoKRG91YmxlLWNoZWNrIHRoZSBuYW1lcyBvZiB0aGUgbWFjcm9zIGxpc3RlZCBmb3IgaW1wb3J0LCBhbmQgdGhhdCB0aGUgY3JhdGUKaW4gcXVlc3Rpb24gZXhwb3J0cyB0aGVtLgoKQSB3b3JraW5nIHZlcnNpb24gd291bGQgYmU6CgpgYGBpZ25vcmUgKGNhbm5vdC1kb2N0ZXN0LW11bHRpY3JhdGUtcHJvamVjdCkKLy8gSW4gc29tZV9jcmF0ZSBjcmF0ZToKI1ttYWNyb19leHBvcnRdCm1hY3JvX3J1bGVzISBlYXQgewogICAgLi4uCn0KCiNbbWFjcm9fZXhwb3J0XQptYWNyb19ydWxlcyEgZHJpbmsgewogICAgLi4uCn0KCi8vIEluIHlvdXIgY3JhdGU6CiNbbWFjcm9fdXNlKGVhdCwgZHJpbmspXQpleHRlcm4gY3JhdGUgc29tZV9jcmF0ZTsgLy9vayEKYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////A/MF8wUAAQDzBQC1WybWAwAAoAcAAAChBwAAvQIOBgAAnwcCBQEEU29tZQEBAJ8OAAGgBwAAvQIOBgACnwcAAQCoAiQGAACeBwEBAJ8OAAIAqQIS1QMAnw4FAQVFMDQ2OQABHwUFAAEABQCoAiQGAACeBwEBAaQOAAGfBwAA5Fsm2AMAAKUHAAACAORbJtgDAJ8OBQHmB1RoZSB0eXBlIGRvZXMgbm90IGZ1bGZpbGwgdGhlIHJlcXVpcmVkIGxpZmV0aW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ3Nwp1c2Ugc3RkOjpzeW5jOjpNdXRleDsKCnN0cnVjdCBNeVN0cmluZzwnYT4gewogICAgZGF0YTogJidhIHN0ciwKfQoKZm4gaV93YW50X3N0YXRpY19jbG9zdXJlPEY+KGE6IEYpCiAgICB3aGVyZSBGOiBGbigpICsgJ3N0YXRpYyB7fQoKZm4gcHJpbnRfc3RyaW5nPCdhPihzOiBNdXRleDxNeVN0cmluZzwnYT4+KSB7CgogICAgaV93YW50X3N0YXRpY19jbG9zdXJlKG1vdmUgfHwgeyAgICAgLy8gZXJyb3I6IHRoaXMgY2xvc3VyZSBoYXMgbGlmZXRpbWUgJ2EKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICByYXRoZXIgdGhhbiAnc3RhdGljCiAgICAgICAgcHJpbnRsbiEoInt9Iiwgcy5sb2NrKCkudW53cmFwKCkuZGF0YSk7CiAgICB9KTsKfQpgYGAKCkluIHRoaXMgZXhhbXBsZSwgdGhlIGNsb3N1cmUgZG9lcyBub3Qgc2F0aXNmeSB0aGUgYCdzdGF0aWNgIGxpZmV0aW1lIGNvbnN0cmFpbnQuClRvIGZpeCB0aGlzIGVycm9yLCB5b3UgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGxpZmV0aW1lIG9mIHRoZSB0eXBlLiBIZXJlLCB3ZQpjYW4gZml4IHRoaXMgcHJvYmxlbSBieSBnaXZpbmcgYHNgIGEgc3RhdGljIGxpZmV0aW1lOgoKYGBgCnVzZSBzdGQ6OnN5bmM6Ok11dGV4OwoKc3RydWN0IE15U3RyaW5nPCdhPiB7CiAgICBkYXRhOiAmJ2Egc3RyLAp9CgpmbiBpX3dhbnRfc3RhdGljX2Nsb3N1cmU8Rj4oYTogRikKICAgIHdoZXJlIEY6IEZuKCkgKyAnc3RhdGljIHt9CgpmbiBwcmludF9zdHJpbmcoczogTXV0ZXg8TXlTdHJpbmc8J3N0YXRpYz4+KSB7CgogICAgaV93YW50X3N0YXRpY19jbG9zdXJlKG1vdmUgfHwgeyAgICAgLy8gb2shCiAgICAgICAgcHJpbnRsbiEoInt9Iiwgcy5sb2NrKCkudW53cmFwKCkuZGF0YSk7CiAgICB9KTsKfQpgYGAKABD///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wfmB+YHAAEA5gcA5Fsm2AMAAKQHAAAApQcAAL0CDgYAAKMHAgUBBFNvbWUBAQCfDgABpAcAAL0CDgYAAqMHAAEAqAIkBgAAogcBAQCfDgACAKkCEtcDAJ8OBQEFRTA0NzcAAR8FBQABAAUAqAIkBgAAogcBAQGkDgABowcAAJNcJtoDAACpBwAAAgCTXCbaAwCfDgUBzQZBIGxpZmV0aW1lIGJvdW5kIHdhcyBub3Qgc2F0aXNmaWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ3OAovLyBDaGVjayB0aGF0IHRoZSBleHBsaWNpdCBsaWZldGltZSBib3VuZCAoYCdTbm93V2hpdGVgLCBpbiB0aGlzIGV4YW1wbGUpIG11c3QKLy8gb3V0bGl2ZSBhbGwgdGhlIHN1cGVyYm91bmRzIGZyb20gdGhlIHRyYWl0IChgJ2tpc3NgLCBpbiB0aGlzIGV4YW1wbGUpLgoKdHJhaXQgV2VkZGluZzwndD46ICd0IHsgfQoKc3RydWN0IFByaW5jZTwna2lzcywgJ1Nub3dXaGl0ZT4gewogICAgY2hpbGQ6IEJveDxXZWRkaW5nPCdraXNzPiArICdTbm93V2hpdGU+LAogICAgLy8gZXJyb3I6IGxpZmV0aW1lIGJvdW5kIG5vdCBzYXRpc2ZpZWQKfQpgYGAKCkluIHRoaXMgZXhhbXBsZSwgdGhlIGAnU25vd1doaXRlYCBsaWZldGltZSBpcyBzdXBwb3NlZCB0byBvdXRsaXZlIHRoZSBgJ2tpc3NgCmxpZmV0aW1lIGJ1dCB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIGBQcmluY2VgIHN0cnVjdCBkb2Vzbid0IGVuZm9yY2UgaXQuIFRvIGZpeAp0aGlzIGlzc3VlLCB5b3UgbmVlZCB0byBzcGVjaWZ5IGl0OgoKYGBgCnRyYWl0IFdlZGRpbmc8J3Q+OiAndCB7IH0KCnN0cnVjdCBQcmluY2U8J2tpc3MsICdTbm93V2hpdGU6ICdraXNzPiB7IC8vIFlvdSBzYXkgaGVyZSB0aGF0ICdTbm93V2hpdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBsaXZlIGxvbmdlciB0aGFuICdraXNzLgogICAgY2hpbGQ6IEJveDxXZWRkaW5nPCdraXNzPiArICdTbm93V2hpdGU+LCAvLyBBbmQgbm93IGl0J3MgYWxsIGdvb2QhCn0KYGBgCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8/zQbNBgABAM0GAJNcJtoDAACoBwAAAKkHAAC9Ag4GAACnBwIFAQRTb21lAQEAnw4AAagHAAC9Ag4GAAKnBwABAKgCJAYAAKYHAQEAnw4AAgCpAhLZAwCfDgUBBUUwNDc4AAEfBQUAAQAFAKgCJAYAAKYHAQEBpA4AAacHAADCXCbcAwAArQcAAAIAwlwm3AMAnw4FAZ0GQSByZWZlcmVuY2UgaGFzIGEgbG9uZ2VyIGxpZmV0aW1lIHRoYW4gdGhlIGRhdGEgaXQgcmVmZXJlbmNlcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0OTEKc3RydWN0IEZvbzwnYT4gewogICAgeDogZm4oJidhIGkzMiksCn0KCnRyYWl0IFRyYWl0PCdhLCAnYj4gewogICAgdHlwZSBPdXQ7Cn0KCmltcGw8J2EsICdiPiBUcmFpdDwnYSwgJ2I+IGZvciB1c2l6ZSB7CiAgICB0eXBlIE91dCA9ICYnYSBGb288J2I+OyAvLyBlcnJvciEKfQpgYGAKCkhlcmUsIHRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIGNvbXBpbGVyIGNhbm5vdCBiZSBzdXJlIHRoYXQgdGhlIGAnYmAgbGlmZXRpbWUKd2lsbCBsaXZlIGxvbmdlciB0aGFuIGAnYWAsIHdoaWNoIHNob3VsZCBiZSBtYW5kYXRvcnkgaW4gb3JkZXIgdG8gYmUgc3VyZSB0aGF0CmBUcmFpdDo6T3V0YCB3aWxsIGFsd2F5cyBoYXZlIGEgcmVmZXJlbmNlIHBvaW50aW5nIHRvIGFuIGV4aXN0aW5nIHR5cGUuIFNvIGluCnRoaXMgY2FzZSwgd2UganVzdCBuZWVkIHRvIHRlbGwgdGhlIGNvbXBpbGVyIHRoYW4gYCdiYCBtdXN0IG91dGxpdmUgYCdhYDoKCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiBmbigmJ2EgaTMyKSwKfQoKdHJhaXQgVHJhaXQ8J2EsICdiPiB7CiAgICB0eXBlIE91dDsKfQoKaW1wbDwnYSwgJ2I6ICdhPiBUcmFpdDwnYSwgJ2I+IGZvciB1c2l6ZSB7IC8vIHdlIGFkZGVkIHRoZSBsaWZldGltZSBlbmZvcmNlbWVudAogICAgdHlwZSBPdXQgPSAmJ2EgRm9vPCdiPjsgLy8gaXQgbm93IHdvcmtzIQp9CmBgYAoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8BnQadBgABAJ0GAMJcJtwDAACsBwAAAK0HAAC9Ag4GAACrBwIFAQRTb21lAQEAnw4AAawHAAC9Ag4GAAKrBwABAKgCJAYAAKoHAQEAnw4AAgCpAhLbAwCfDgUBBUUwNDkxAAEfBQUAAQAFAKgCJAYAAKoHAQEBpA4AAasHAADxXCbeAwAAsQcAAAIA8Vwm3gMAnw4FAYAQQSBib3Jyb3cgb2YgYSBjb25zdGFudCBjb250YWluaW5nIGludGVyaW9yIG11dGFiaWxpdHkgd2FzIGF0dGVtcHRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0OTIKdXNlIHN0ZDo6c3luYzo6YXRvbWljOjpBdG9taWNVc2l6ZTsKCmNvbnN0IEE6IEF0b21pY1VzaXplID0gQXRvbWljVXNpemU6Om5ldygwKTsKc3RhdGljIEI6ICYnc3RhdGljIEF0b21pY1VzaXplID0gJkE7Ci8vIGVycm9yOiBjYW5ub3QgYm9ycm93IGEgY29uc3RhbnQgd2hpY2ggbWF5IGNvbnRhaW4gaW50ZXJpb3IgbXV0YWJpbGl0eSwKLy8gICAgICAgIGNyZWF0ZSBhIHN0YXRpYyBpbnN0ZWFkCmBgYAoKQSBgY29uc3RgIHJlcHJlc2VudHMgYSBjb25zdGFudCB2YWx1ZSB0aGF0IHNob3VsZCBuZXZlciBjaGFuZ2UuIElmIG9uZSB0YWtlcwphIGAmYCByZWZlcmVuY2UgdG8gdGhlIGNvbnN0YW50LCB0aGVuIG9uZSBpcyB0YWtpbmcgYSBwb2ludGVyIHRvIHNvbWUgbWVtb3J5CmxvY2F0aW9uIGNvbnRhaW5pbmcgdGhlIHZhbHVlLiBOb3JtYWxseSB0aGlzIGlzIHBlcmZlY3RseSBmaW5lOiBtb3N0IHZhbHVlcwpjYW4ndCBiZSBjaGFuZ2VkIHZpYSBhIHNoYXJlZCBgJmAgcG9pbnRlciwgYnV0IGludGVyaW9yIG11dGFiaWxpdHkgd291bGQgYWxsb3cKaXQuIFRoYXQgaXMsIGEgY29uc3RhbnQgdmFsdWUgY291bGQgYmUgbXV0YXRlZC4gT24gdGhlIG90aGVyIGhhbmQsIGEgYHN0YXRpY2AgaXMKZXhwbGljaXRseSBhIHNpbmdsZSBtZW1vcnkgbG9jYXRpb24sIHdoaWNoIGNhbiBiZSBtdXRhdGVkIGF0IHdpbGwuCgpTbywgaW4gb3JkZXIgdG8gc29sdmUgdGhpcyBlcnJvciwgZWl0aGVyIHVzZSBzdGF0aWNzIHdoaWNoIGFyZSBgU3luY2A6CgpgYGAKdXNlIHN0ZDo6c3luYzo6YXRvbWljOjpBdG9taWNVc2l6ZTsKCnN0YXRpYyBBOiBBdG9taWNVc2l6ZSA9IEF0b21pY1VzaXplOjpuZXcoMCk7CnN0YXRpYyBCOiAmJ3N0YXRpYyBBdG9taWNVc2l6ZSA9ICZBOyAvLyBvayEKYGBgCgpZb3UgY2FuIGFsc28gaGF2ZSB0aGlzIGVycm9yIHdoaWxlIHVzaW5nIGEgY2VsbCB0eXBlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDkyCnVzZSBzdGQ6OmNlbGw6OkNlbGw7Cgpjb25zdCBBOiBDZWxsPHVzaXplPiA9IENlbGw6Om5ldygxKTsKY29uc3QgQjogJkNlbGw8dXNpemU+ID0gJkE7Ci8vIGVycm9yOiBjYW5ub3QgYm9ycm93IGEgY29uc3RhbnQgd2hpY2ggbWF5IGNvbnRhaW4gaW50ZXJpb3IgbXV0YWJpbGl0eSwKLy8gICAgICAgIGNyZWF0ZSBhIHN0YXRpYyBpbnN0ZWFkCgovLyBvcjoKc3RydWN0IEMgeyBhOiBDZWxsPHVzaXplPiB9Cgpjb25zdCBEOiBDID0gQyB7IGE6IENlbGw6Om5ldygxKSB9Owpjb25zdCBFOiAmQ2VsbDx1c2l6ZT4gPSAmRC5hOyAvLyBlcnJvcgoKLy8gb3I6CmNvbnN0IEY6ICZDID0gJkQ7IC8vIGVycm9yCmBgYAoKVGhpcyBpcyBiZWNhdXNlIGNlbGwgdHlwZXMgZG8gb3BlcmF0aW9ucyB0aGF0IGFyZSBub3QgdGhyZWFkLXNhZmUuIER1ZSB0byB0aGlzLAp0aGV5IGRvbid0IGltcGxlbWVudCBTeW5jIGFuZCB0aHVzIGNhbid0IGJlIHBsYWNlZCBpbiBzdGF0aWNzLgoKSG93ZXZlciwgaWYgeW91IHN0aWxsIHdpc2ggdG8gdXNlIHRoZXNlIHR5cGVzLCB5b3UgY2FuIGFjaGlldmUgdGhpcyBieSBhbiB1bnNhZmUKd3JhcHBlcjoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpDZWxsOwp1c2Ugc3RkOjptYXJrZXI6OlN5bmM7CgpzdHJ1Y3QgTm90VGhyZWFkU2FmZTxUPiB7CiAgICB2YWx1ZTogQ2VsbDxUPiwKfQoKdW5zYWZlIGltcGw8VD4gU3luYyBmb3IgTm90VGhyZWFkU2FmZTxUPiB7fQoKc3RhdGljIEE6IE5vdFRocmVhZFNhZmU8dXNpemU+ID0gTm90VGhyZWFkU2FmZSB7IHZhbHVlIDogQ2VsbDo6bmV3KDEpIH07CnN0YXRpYyBCOiAmJ3N0YXRpYyBOb3RUaHJlYWRTYWZlPHVzaXplPiA9ICZBOyAvLyBvayEKYGBgCgpSZW1lbWJlciB0aGlzIHNvbHV0aW9uIGlzIHVuc2FmZSEgWW91IHdpbGwgaGF2ZSB0byBlbnN1cmUgdGhhdCBhY2Nlc3NlcyB0byB0aGUKY2VsbCBhcmUgc3luY2hyb25pemVkLgoAIf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BAIAQgBAAAQCAEADxXCbeAwAAsAcAAACxBwAAvQIOBgAArwcCBQEEU29tZQEBAJ8OAAGwBwAAvQIOBgACrwcAAQCoAiQGAACuBwEBAJ8OAAIAqQIS3QMAnw4FAQVFMDQ5MgABHwUFAAEABQCoAiQGAACuBwEBAaQOAAGvBwAAoF0m4AMAALUHAAACAKBdJuADAJ8OBQGIB0EgdmFsdWUgd2l0aCBhIGN1c3RvbSBgRHJvcGAgaW1wbGVtZW50YXRpb24gbWF5IGJlIGRyb3BwZWQgZHVyaW5nIGNvbnN0LWV2YWwuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDkzCmVudW0gRHJvcFR5cGUgewogICAgQSwKfQoKaW1wbCBEcm9wIGZvciBEcm9wVHlwZSB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQoKc3RydWN0IEZvbyB7CiAgICBmaWVsZDE6IERyb3BUeXBlLAp9CgpzdGF0aWMgRk9POiBGb28gPSBGb28geyBmaWVsZDE6IChEcm9wVHlwZTo6QSwgRHJvcFR5cGU6OkEpLjEgfTsgLy8gZXJyb3IhCmBgYAoKVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IGlmIHRoZSBnaXZlbiB0eXBlIG9yIG9uZSBvZiBpdHMgZmllbGRzIGltcGxlbWVudHMgdGhlCmBEcm9wYCB0cmFpdCwgdGhpcyBgRHJvcGAgaW1wbGVtZW50YXRpb24gY2Fubm90IGJlIGNhbGxlZCB3aXRoaW4gYSBjb25zdApjb250ZXh0IHNpbmNlIGl0IG1heSBydW4gYXJiaXRyYXJ5LCBub24tY29uc3QtY2hlY2tlZCBjb2RlLiBUbyBwcmV2ZW50IHRoaXMKaXNzdWUsIGVuc3VyZSBhbGwgdmFsdWVzIHdpdGggY3VzdG9tIGEgY3VzdG9tIGBEcm9wYCBpbXBsZW1lbnRhdGlvbiBlc2NhcGUgdGhlCmluaXRpYWxpemVyLgoKYGBgCmVudW0gRHJvcFR5cGUgewogICAgQSwKfQoKaW1wbCBEcm9wIGZvciBEcm9wVHlwZSB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQoKc3RydWN0IEZvbyB7CiAgICBmaWVsZDE6IERyb3BUeXBlLAp9CgpzdGF0aWMgRk9POiBGb28gPSBGb28geyBmaWVsZDE6IERyb3BUeXBlOjpBIH07IC8vIFdlIGluaXRpYWxpemUgYWxsIGZpZWxkcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IGhhbmQuCmBgYAoAD////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/wGIB4gHAAEAiAcAoF0m4AMAALQHAAAAtQcAAL0CDgYAALMHAgUBBFNvbWUBAQCfDgABtAcAAL0CDgYAArMHAAEAqAIkBgAAsgcBAQCfDgACAKkCEt8DAJ8OBQEFRTA0OTMAAR8FBQABAAUAqAIkBgAAsgcBAQGkDgABswcAAM9dJuIDAAC5BwAAAgDPXSbiAwCfDgUB1gZBIGxpZmV0aW1lIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGluIHRoZSBnaXZlbiBzaXR1YXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDk1CmZuIHRyYW5zbXV0ZV9saWZldGltZTwnYSwgJ2IsIFQ+KHQ6ICYnYSAoVCwpKSAtPiAmJ2IgVCB7CiAgICBtYXRjaCAoJnQsKSB7IC8vIGVycm9yIQogICAgICAgICgodSwpLCkgPT4gdSwKICAgIH0KfQoKbGV0IHkgPSBCb3g6Om5ldygoNDIsKSk7CmxldCB4ID0gdHJhbnNtdXRlX2xpZmV0aW1lKCZ5KTsKYGBgCgpJbiB0aGlzIGNvZGUsIHlvdSBoYXZlIHR3byB3YXlzIHRvIHNvbHZlIHRoaXMgaXNzdWU6CiAxLiBFbmZvcmNlIHRoYXQgYCdhYCBsaXZlcyBhdCBsZWFzdCBhcyBsb25nIGFzIGAnYmAuCiAyLiBVc2UgdGhlIHNhbWUgbGlmZXRpbWUgcmVxdWlyZW1lbnQgZm9yIGJvdGggaW5wdXQgYW5kIG91dHB1dCB2YWx1ZXMuCgpTbyBmb3IgdGhlIGZpcnN0IHNvbHV0aW9uLCB5b3UgY2FuIGRvIGl0IGJ5IHJlcGxhY2luZyBgJ2FgIHdpdGggYCdhOiAnYmA6CgpgYGAKZm4gdHJhbnNtdXRlX2xpZmV0aW1lPCdhOiAnYiwgJ2IsIFQ+KHQ6ICYnYSAoVCwpKSAtPiAmJ2IgVCB7CiAgICBtYXRjaCAoJnQsKSB7IC8vIG9rIQogICAgICAgICgodSwpLCkgPT4gdSwKICAgIH0KfQpgYGAKCkluIHRoZSBzZWNvbmQgeW91IGNhbiBkbyBpdCBieSBzaW1wbHkgcmVtb3ZpbmcgYCdiYCBzbyB0aGV5IGJvdGggdXNlIGAnYWA6CgpgYGAKZm4gdHJhbnNtdXRlX2xpZmV0aW1lPCdhLCBUPih0OiAmJ2EgKFQsKSkgLT4gJidhIFQgewogICAgbWF0Y2ggKCZ0LCkgeyAvLyBvayEKICAgICAgICAoKHUsKSwpID0+IHUsCiAgICB9Cn0KYGBgCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wHWBtYGAAEA1gYAz10m4gMAALgHAAAAuQcAAL0CDgYAALcHAgUBBFNvbWUBAQCfDgABuAcAAL0CDgYAArcHAAEAqAIkBgAAtgcBAQCfDgACAKkCEuEDAJ8OBQEFRTA0OTUAAR8FBQABAAUAqAIkBgAAtgcBAQGkDgABtwcAAP5dJuQDAAC9BwAAAgD+XSbkAwCfDgUB/QNBIGxpZmV0aW1lIG5hbWUgaXMgc2hhZG93aW5nIGFub3RoZXIgbGlmZXRpbWUgbmFtZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0OTYKc3RydWN0IEZvbzwnYT4gewogICAgYTogJidhIGkzMiwKfQoKaW1wbDwnYT4gRm9vPCdhPiB7CiAgICBmbiBmPCdhPih4OiAmJ2EgaTMyKSB7IC8vIGVycm9yOiBsaWZldGltZSBuYW1lIGAnYWAgc2hhZG93cyBhIGxpZmV0aW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBuYW1lIHRoYXQgaXMgYWxyZWFkeSBpbiBzY29wZQogICAgfQp9CmBgYAoKUGxlYXNlIGNoYW5nZSB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlIGxpZmV0aW1lcyB0byByZW1vdmUgdGhpcyBlcnJvci4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICBhOiAmJ2EgaTMyLAp9CgppbXBsPCdhPiBGb288J2E+IHsKICAgIGZuIGY8J2I+KHg6ICYnYiBpMzIpIHsgLy8gb2shCiAgICB9Cn0KCmZuIG1haW4oKSB7Cn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////H/0D/QMAAQD9AwD+XSbkAwAAvAcAAAC9BwAAvQIOBgAAuwcCBQEEU29tZQEBAJ8OAAG8BwAAvQIOBgACuwcAAQCoAiQGAAC6BwEBAJ8OAAIAqQIS4wMAnw4FAQVFMDQ5NgABHwUFAAEABQCoAiQGAAC6BwEBAaQOAAG7BwAArV4m5gMAAMEHAAACAK1eJuYDAJ8OBQHCAyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkEgc3RhYmlsaXR5IGF0dHJpYnV0ZSB3YXMgdXNlZCBvdXRzaWRlIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbAojW3N0YWJsZV0gLy8gZXJyb3I6IHN0YWJpbGl0eSBhdHRyaWJ1dGVzIG1heSBub3QgYmUgdXNlZCBvdXRzaWRlIG9mIHRoZQogICAgICAgICAgLy8gICAgICAgIHN0YW5kYXJkIGxpYnJhcnkKZm4gZm9vKCkge30KYGBgCgpJdCBpcyBub3QgcG9zc2libGUgdG8gdXNlIHN0YWJpbGl0eSBhdHRyaWJ1dGVzIG91dHNpZGUgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkuCkFsc28sIGZvciBub3csIGl0IGlzIG5vdCBwb3NzaWJsZSB0byB3cml0ZSBkZXByZWNhdGlvbiBtZXNzYWdlcyBlaXRoZXIuCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQPCA8IDAAEAwgMArV4m5gMAAMAHAAAAwQcAAL0CDgYAAL8HAgUBBFNvbWUBAQCfDgABwAcAAL0CDgYAAr8HAAEAqAIkBgAAvgcBAQCfDgACAKkCEuUDAJ8OBQEFRTA0OTcAAR8FBQABAAUAqAIkBgAAvgcBAQGkDgABvwcAANxeJugDAADFBwAAAgDcXiboAwCfDgUBuAVBIHZhcmlhYmxlIHdhcyBib3Jyb3dlZCBhcyBtdXRhYmxlIG1vcmUgdGhhbiBvbmNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ5OQpsZXQgbXV0IGkgPSAwOwpsZXQgbXV0IHggPSAmbXV0IGk7CmxldCBtdXQgYSA9ICZtdXQgaTsKeDsKLy8gZXJyb3I6IGNhbm5vdCBib3Jyb3cgYGlgIGFzIG11dGFibGUgbW9yZSB0aGFuIG9uY2UgYXQgYSB0aW1lCmBgYAoKUGxlYXNlIG5vdGUgdGhhdCBpbiBSdXN0LCB5b3UgY2FuIGVpdGhlciBoYXZlIG1hbnkgaW1tdXRhYmxlIHJlZmVyZW5jZXMsIG9yIG9uZQptdXRhYmxlIHJlZmVyZW5jZS4gRm9yIG1vcmUgZGV0YWlscyB5b3UgbWF5IHdhbnQgdG8gcmVhZCB0aGUKW1JlZmVyZW5jZXMgJiBCb3Jyb3dpbmddW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ10gc2VjdGlvbiBvZiB0aGUgQm9vay4KCltyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gwNC0wMi1yZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmcuaHRtbAoKRXhhbXBsZToKCmBgYApsZXQgbXV0IGkgPSAwOwpsZXQgbXV0IHggPSAmbXV0IGk7IC8vIG9rIQoKLy8gb3I6CmxldCBtdXQgaSA9IDA7CmxldCBhID0gJmk7IC8vIG9rIQpsZXQgYiA9ICZpOyAvLyBzdGlsbCBvayEKbGV0IGMgPSAmaTsgLy8gc3RpbGwgb2shCmI7CmE7CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////f7gFuAUAAQC4BQDcXiboAwAAxAcAAADFBwAAvQIOBgAAwwcCBQEEU29tZQEBAJ8OAAHEBwAAvQIOBgACwwcAAQCoAiQGAADCBwEBAJ8OAAIAqQIS5wMAnw4FAQVFMDQ5OQABHwUFAAEABQCoAiQGAADCBwEBAaQOAAHDBwAAi18m6gMAAMkHAAACAItfJuoDAJ8OBQH8B0EgYm9ycm93ZWQgdmFyaWFibGUgd2FzIHVzZWQgYnkgYSBjbG9zdXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwMApmbiB5b3Vfa25vd19ub3RoaW5nKGpvbl9zbm93OiAmbXV0IGkzMikgewogICAgbGV0IG5pZ2h0c193YXRjaCA9ICZqb25fc25vdzsKICAgIGxldCBzdGFya3MgPSB8fCB7CiAgICAgICAgKmpvbl9zbm93ID0gMzsgLy8gZXJyb3I6IGNsb3N1cmUgcmVxdWlyZXMgdW5pcXVlIGFjY2VzcyB0byBgam9uX3Nub3dgCiAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGJ1dCBpdCBpcyBhbHJlYWR5IGJvcnJvd2VkCiAgICB9OwogICAgcHJpbnRsbiEoInt9IiwgbmlnaHRzX3dhdGNoKTsKfQpgYGAKCkluIGhlcmUsIGBqb25fc25vd2AgaXMgYWxyZWFkeSBib3Jyb3dlZCBieSB0aGUgYG5pZ2h0c193YXRjaGAgcmVmZXJlbmNlLCBzbyBpdApjYW5ub3QgYmUgYm9ycm93ZWQgYnkgdGhlIGBzdGFya3NgIGNsb3N1cmUgYXQgdGhlIHNhbWUgdGltZS4gVG8gZml4IHRoaXMgaXNzdWUsCnlvdSBjYW4gY3JlYXRlIHRoZSBjbG9zdXJlIGFmdGVyIHRoZSBib3Jyb3cgaGFzIGVuZGVkOgoKYGBgCmZuIHlvdV9rbm93X25vdGhpbmcoam9uX3Nub3c6ICZtdXQgaTMyKSB7CiAgICBsZXQgbmlnaHRzX3dhdGNoID0gJmpvbl9zbm93OwogICAgcHJpbnRsbiEoInt9IiwgbmlnaHRzX3dhdGNoKTsKICAgIGxldCBzdGFya3MgPSB8fCB7CiAgICAgICAgKmpvbl9zbm93ID0gMzsKICAgIH07Cn0KYGBgCgpPciwgaWYgdGhlIHR5cGUgaW1wbGVtZW50cyB0aGUgYENsb25lYCB0cmFpdCwgeW91IGNhbiBjbG9uZSBpdCBiZXR3ZWVuCmNsb3N1cmVzOgoKYGBgCmZuIHlvdV9rbm93X25vdGhpbmcoam9uX3Nub3c6ICZtdXQgaTMyKSB7CiAgICBsZXQgbXV0IGpvbl9jb3B5ID0gam9uX3Nub3cuY2xvbmUoKTsKICAgIGxldCBzdGFya3MgPSB8fCB7CiAgICAgICAgKmpvbl9zbm93ID0gMzsKICAgIH07CiAgICBwcmludGxuISgie30iLCBqb25fY29weSk7Cn0KYGBgCgAQ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8P/Af8BwABAPwHAItfJuoDAADIBwAAAMkHAAC9Ag4GAADHBwIFAQRTb21lAQEAnw4AAcgHAAC9Ag4GAALHBwABAKgCJAYAAMYHAQEAnw4AAgCpAhLpAwCfDgUBBUUwNTAwAAEfBQUAAQAFAKgCJAYAAMYHAQEBpA4AAccHAAC6XybsAwAAzQcAAAIAul8m7AMAnw4FAbcOQSBtdXRhYmxlIHZhcmlhYmxlIGlzIHVzZWQgYnV0IGl0IGlzIGFscmVhZHkgY2FwdHVyZWQgYnkgYSBjbG9zdXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwMQpmbiBpbnNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikgewogICAgLy8gQWN0aW9ucyB3aGljaCByZXF1aXJlIHVuaXF1ZSBhY2Nlc3MKfQoKZm4gb3V0c2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7CiAgICAvLyBBY3Rpb25zIHdoaWNoIHJlcXVpcmUgdW5pcXVlIGFjY2Vzcwp9CgpmbiBmb28oYTogJm11dCBpMzIpIHsKICAgIGxldCBtdXQgYmFyID0gfHwgewogICAgICAgIGluc2lkZV9jbG9zdXJlKGEpCiAgICB9OwogICAgb3V0c2lkZV9jbG9zdXJlKGEpOyAvLyBlcnJvcjogY2Fubm90IGJvcnJvdyBgKmFgIGFzIG11dGFibGUgYmVjYXVzZSBwcmV2aW91cwogICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY2xvc3VyZSByZXF1aXJlcyB1bmlxdWUgYWNjZXNzLgogICAgYmFyKCk7Cn0KYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IGEgbXV0YWJsZSB2YXJpYWJsZSBpcyB1c2VkIHdoaWxlIGl0IGlzIHN0aWxsIGNhcHR1cmVkCmJ5IGEgY2xvc3VyZS4gQmVjYXVzZSB0aGUgY2xvc3VyZSBoYXMgYm9ycm93ZWQgdGhlIHZhcmlhYmxlLCBpdCBpcyBub3QgYXZhaWxhYmxlCnVudGlsIHRoZSBjbG9zdXJlIGdvZXMgb3V0IG9mIHNjb3BlLgoKTm90ZSB0aGF0IGEgY2FwdHVyZSB3aWxsIGVpdGhlciBtb3ZlIG9yIGJvcnJvdyBhIHZhcmlhYmxlLCBidXQgaW4gdGhpcwpzaXR1YXRpb24sIHRoZSBjbG9zdXJlIGlzIGJvcnJvd2luZyB0aGUgdmFyaWFibGUuIFRha2UgYSBsb29rIGF0IHRoZSBjaGFwdGVyCm9uIFtDYXB0dXJpbmddW2NhcHR1cmluZ10gaW4gUnVzdCBCeSBFeGFtcGxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKW2NhcHR1cmluZ106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RhYmxlL3J1c3QtYnktZXhhbXBsZS9mbi9jbG9zdXJlcy9jYXB0dXJlLmh0bWwKClRvIGZpeCB0aGlzIGVycm9yLCB5b3UgY2FuIGZpbmlzaCB1c2luZyB0aGUgY2xvc3VyZSBiZWZvcmUgdXNpbmcgdGhlIGNhcHR1cmVkCnZhcmlhYmxlOgoKYGBgCmZuIGluc2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7fQpmbiBvdXRzaWRlX2Nsb3N1cmUoeDogJm11dCBpMzIpIHt9CgpmbiBmb28oYTogJm11dCBpMzIpIHsKICAgIGxldCBtdXQgYmFyID0gfHwgewogICAgICAgIGluc2lkZV9jbG9zdXJlKGEpCiAgICB9OwogICAgYmFyKCk7CiAgICAvLyBib3Jyb3cgb24gYGFgIGVuZHMuCiAgICBvdXRzaWRlX2Nsb3N1cmUoYSk7IC8vIG9rIQp9CmBgYAoKT3IgeW91IGNhbiBwYXNzIHRoZSB2YXJpYWJsZSBhcyBhIHBhcmFtZXRlciB0byB0aGUgY2xvc3VyZToKCmBgYApmbiBpbnNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikge30KZm4gb3V0c2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7fQoKZm4gZm9vKGE6ICZtdXQgaTMyKSB7CiAgICBsZXQgbXV0IGJhciA9IHxzOiAmbXV0IGkzMnwgewogICAgICAgIGluc2lkZV9jbG9zdXJlKHMpCiAgICB9OwogICAgb3V0c2lkZV9jbG9zdXJlKGEpOwogICAgYmFyKGEpOwp9CmBgYAoKSXQgbWF5IGJlIHBvc3NpYmxlIHRvIGRlZmluZSB0aGUgY2xvc3VyZSBsYXRlcjoKCmBgYApmbiBpbnNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikge30KZm4gb3V0c2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7fQoKZm4gZm9vKGE6ICZtdXQgaTMyKSB7CiAgICBvdXRzaWRlX2Nsb3N1cmUoYSk7CiAgICBsZXQgbXV0IGJhciA9IHx8IHsKICAgICAgICBpbnNpZGVfY2xvc3VyZShhKQogICAgfTsKICAgIGJhcigpOwp9CmBgYAoAHf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////P7cOtw4AAQC3DgC6XybsAwAAzAcAAADNBwAAvQIOBgAAywcCBQEEU29tZQEBAJ8OAAHMBwAAvQIOBgACywcAAQCoAiQGAADKBwEBAJ8OAAIAqQIS6wMAnw4FAQVFMDUwMQABHwUFAAEABQCoAiQGAADKBwEBAaQOAAHLBwAA6V8m7gMAANEHAAACAOlfJu4DAJ8OBQG4BkEgdmFyaWFibGUgYWxyZWFkeSBib3Jyb3dlZCBhcyBpbW11dGFibGUgd2FzIGJvcnJvd2VkIGFzIG11dGFibGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTAyCmZuIGJhcih4OiAmbXV0IGkzMikge30KZm4gZm9vKGE6ICZtdXQgaTMyKSB7CiAgICBsZXQgeSA9ICZhOyAvLyBhIGlzIGJvcnJvd2VkIGFzIGltbXV0YWJsZS4KICAgIGJhcihhKTsgLy8gZXJyb3I6IGNhbm5vdCBib3Jyb3cgYCphYCBhcyBtdXRhYmxlIGJlY2F1c2UgYGFgIGlzIGFsc28gYm9ycm93ZWQKICAgICAgICAgICAgLy8gICAgICAgIGFzIGltbXV0YWJsZQogICAgcHJpbnRsbiEoInt9IiwgeSk7Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZW5zdXJlIHRoYXQgeW91IGRvbid0IGhhdmUgYW55IG90aGVyIHJlZmVyZW5jZXMgdG8gdGhlCnZhcmlhYmxlIGJlZm9yZSB0cnlpbmcgdG8gYWNjZXNzIGl0IG11dGFibHk6CgpgYGAKZm4gYmFyKHg6ICZtdXQgaTMyKSB7fQpmbiBmb28oYTogJm11dCBpMzIpIHsKICAgIGJhcihhKTsKICAgIGxldCB5ID0gJmE7IC8vIG9rIQogICAgcHJpbnRsbiEoInt9IiwgeSk7Cn0KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBSdXN0J3Mgb3duZXJzaGlwIHN5c3RlbSwgdGFrZSBhIGxvb2sgYXQgdGhlCltSZWZlcmVuY2VzICYgQm9ycm93aW5nXVtyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddIHNlY3Rpb24gb2YgdGhlIEJvb2suCgpbcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDQtMDItcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nLmh0bWwKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////f7gGuAYAAQC4BgDpXybuAwAA0AcAAADRBwAAvQIOBgAAzwcCBQEEU29tZQEBAJ8OAAHQBwAAvQIOBgACzwcAAQCoAiQGAADOBwEBAJ8OAAIAqQIS7QMAnw4FAQVFMDUwMgABHwUFAAEABQCoAiQGAADOBwEBAaQOAAHPBwAAmGAm8AMAANUHAAACAJhgJvADAJ8OBQH1C0EgdmFsdWUgd2FzIHVzZWQgYWZ0ZXIgaXQgd2FzIG11dGFibHkgYm9ycm93ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTAzCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHZhbHVlID0gMzsKICAgIC8vIENyZWF0ZSBhIG11dGFibGUgYm9ycm93IG9mIGB2YWx1ZWAuCiAgICBsZXQgYm9ycm93ID0gJm11dCB2YWx1ZTsKICAgIGxldCBfc3VtID0gdmFsdWUgKyAxOyAvLyBlcnJvcjogY2Fubm90IHVzZSBgdmFsdWVgIGJlY2F1c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgaXQgd2FzIG11dGFibHkgYm9ycm93ZWQKICAgIHByaW50bG4hKCJ7fSIsIGJvcnJvdyk7Cn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIGB2YWx1ZWAgaXMgbXV0YWJseSBib3Jyb3dlZCBieSBgYm9ycm93YCBhbmQgY2Fubm90IGJlCnVzZWQgdG8gY2FsY3VsYXRlIGBzdW1gLiBUaGlzIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHRoaXMgd291bGQgdmlvbGF0ZQpSdXN0J3MgbXV0YWJpbGl0eSBydWxlcy4KCllvdSBjYW4gZml4IHRoaXMgZXJyb3IgYnkgZmluaXNoaW5nIHVzaW5nIHRoZSBib3Jyb3cgYmVmb3JlIHRoZSBuZXh0IHVzZSBvZgp0aGUgdmFsdWU6CgpgYGAKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgdmFsdWUgPSAzOwogICAgbGV0IGJvcnJvdyA9ICZtdXQgdmFsdWU7CiAgICBwcmludGxuISgie30iLCBib3Jyb3cpOwogICAgLy8gVGhlIGJsb2NrIGhhcyBlbmRlZCBhbmQgd2l0aCBpdCB0aGUgYm9ycm93LgogICAgLy8gWW91IGNhbiBub3cgdXNlIGB2YWx1ZWAgYWdhaW4uCiAgICBsZXQgX3N1bSA9IHZhbHVlICsgMTsKfQpgYGAKCk9yIGJ5IGNsb25pbmcgYHZhbHVlYCBiZWZvcmUgYm9ycm93aW5nIGl0OgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHZhbHVlID0gMzsKICAgIC8vIFdlIGNsb25lIGB2YWx1ZWAsIGNyZWF0aW5nIGEgY29weS4KICAgIGxldCB2YWx1ZV9jbG9uZWQgPSB2YWx1ZS5jbG9uZSgpOwogICAgLy8gVGhlIG11dGFibGUgYm9ycm93IGlzIGEgcmVmZXJlbmNlIHRvIGB2YWx1ZWAgYW5kCiAgICAvLyBub3QgdG8gYHZhbHVlX2Nsb25lZGAuLi4KICAgIGxldCBib3Jyb3cgPSAmbXV0IHZhbHVlOwogICAgLy8gLi4uIHdoaWNoIG1lYW5zIHdlIGNhbiBzdGlsbCB1c2UgYHZhbHVlX2Nsb25lZGAsCiAgICBsZXQgX3N1bSA9IHZhbHVlX2Nsb25lZCArIDE7CiAgICAvLyBldmVuIHRob3VnaCB0aGUgYm9ycm93IG9ubHkgZW5kcyBoZXJlLgogICAgcHJpbnRsbiEoInt9IiwgYm9ycm93KTsKfQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFJ1c3QncyBvd25lcnNoaXAgc3lzdGVtLCB0YWtlIGEgbG9vayBhdCB0aGUKW1JlZmVyZW5jZXMgJiBCb3Jyb3dpbmddW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ10gc2VjdGlvbiBvZiB0aGUgQm9vay4KCltyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gwNC0wMi1yZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmcuaHRtbAoAGP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////w/1C/ULAAEA9QsAmGAm8AMAANQHAAAA1QcAAL0CDgYAANMHAgUBBFNvbWUBAQCfDgAB1AcAAL0CDgYAAtMHAAEAqAIkBgAA0gcBAQCfDgACAKkCEu8DAJ8OBQEFRTA1MDMAAR8FBQABAAUAqAIkBgAA0gcBAQGkDgAB0wcAAMdgJvIDAADZBwAAAgDHYCbyAwCfDgUB+REjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBtb3ZlIGEgYm9ycm93ZWQgdmFyaWFibGUgaW50byBhCmNsb3N1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07CiAgICBsZXQgZmFuY3lfcmVmID0gJmZhbmN5X251bTsKCiAgICBsZXQgeCA9IG1vdmUgfHwgewogICAgICAgIHByaW50bG4hKCJjaGlsZCBmdW5jdGlvbjoge30iLCBmYW5jeV9udW0ubnVtKTsKICAgICAgICAvLyBlcnJvcjogY2Fubm90IG1vdmUgYGZhbmN5X251bWAgaW50byBjbG9zdXJlIGJlY2F1c2UgaXQgaXMgYm9ycm93ZWQKICAgIH07CgogICAgeCgpOwogICAgcHJpbnRsbiEoIm1haW4gZnVuY3Rpb246IHt9IiwgZmFuY3lfcmVmLm51bSk7Cn0KYGBgCgpIZXJlLCBgZmFuY3lfbnVtYCBpcyBib3Jyb3dlZCBieSBgZmFuY3lfcmVmYCBhbmQgc28gY2Fubm90IGJlIG1vdmVkIGludG8KdGhlIGNsb3N1cmUgYHhgLiBUaGVyZSBpcyBubyB3YXkgdG8gbW92ZSBhIHZhbHVlIGludG8gYSBjbG9zdXJlIHdoaWxlIGl0IGlzCmJvcnJvd2VkLCBhcyB0aGF0IHdvdWxkIGludmFsaWRhdGUgdGhlIGJvcnJvdy4KCklmIHRoZSBjbG9zdXJlIGNhbid0IG91dGxpdmUgdGhlIHZhbHVlIGJlaW5nIG1vdmVkLCB0cnkgdXNpbmcgYSByZWZlcmVuY2UKcmF0aGVyIHRoYW4gbW92aW5nOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07CiAgICBsZXQgZmFuY3lfcmVmID0gJmZhbmN5X251bTsKCiAgICBsZXQgeCA9IG1vdmUgfHwgewogICAgICAgIC8vIGZhbmN5X3JlZiBpcyB1c2FibGUgaGVyZSBiZWNhdXNlIGl0IGRvZXNuJ3QgbW92ZSBgZmFuY3lfbnVtYAogICAgICAgIHByaW50bG4hKCJjaGlsZCBmdW5jdGlvbjoge30iLCBmYW5jeV9yZWYubnVtKTsKICAgIH07CgogICAgeCgpOwoKICAgIHByaW50bG4hKCJtYWluIGZ1bmN0aW9uOiB7fSIsIGZhbmN5X251bS5udW0pOwp9CmBgYAoKSWYgdGhlIHZhbHVlIGhhcyB0byBiZSBib3Jyb3dlZCBhbmQgdGhlbiBtb3ZlZCwgdHJ5IGxpbWl0aW5nIHRoZSBsaWZldGltZSBvZgp0aGUgYm9ycm93IHVzaW5nIGEgc2NvcGVkIGJsb2NrOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07CgogICAgewogICAgICAgIGxldCBmYW5jeV9yZWYgPSAmZmFuY3lfbnVtOwogICAgICAgIHByaW50bG4hKCJtYWluIGZ1bmN0aW9uOiB7fSIsIGZhbmN5X3JlZi5udW0pOwogICAgICAgIC8vIGBmYW5jeV9yZWZgIGdvZXMgb3V0IG9mIHNjb3BlIGhlcmUKICAgIH0KCiAgICBsZXQgeCA9IG1vdmUgfHwgewogICAgICAgIC8vIGBmYW5jeV9udW1gIGNhbiBiZSBtb3ZlZCBub3cgKG5vIG1vcmUgcmVmZXJlbmNlcyBleGlzdCkKICAgICAgICBwcmludGxuISgiY2hpbGQgZnVuY3Rpb246IHt9IiwgZmFuY3lfbnVtLm51bSk7CiAgICB9OwoKICAgIHgoKTsKfQpgYGAKCklmIHRoZSBsaWZldGltZSBvZiBhIHJlZmVyZW5jZSBpc24ndCBlbm91Z2gsIHN1Y2ggYXMgaW4gdGhlIGNhc2Ugb2YgdGhyZWFkaW5nLApjb25zaWRlciB1c2luZyBhbiBgQXJjYCB0byBjcmVhdGUgYSByZWZlcmVuY2UtY291bnRlZCB2YWx1ZToKCmBgYAp1c2Ugc3RkOjpzeW5jOjpBcmM7CnVzZSBzdGQ6OnRocmVhZDsKCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IGZhbmN5X3JlZjEgPSBBcmM6Om5ldyhGYW5jeU51bSB7IG51bTogNSB9KTsKICAgIGxldCBmYW5jeV9yZWYyID0gZmFuY3lfcmVmMS5jbG9uZSgpOwoKICAgIGxldCB4ID0gdGhyZWFkOjpzcGF3bihtb3ZlIHx8IHsKICAgICAgICAvLyBgZmFuY3lfcmVmMWAgY2FuIGJlIG1vdmVkIGFuZCBoYXMgYSBgJ3N0YXRpY2AgbGlmZXRpbWUKICAgICAgICBwcmludGxuISgiY2hpbGQgdGhyZWFkOiB7fSIsIGZhbmN5X3JlZjEubnVtKTsKICAgIH0pOwoKICAgIHguam9pbigpLmV4cGVjdCgiY2hpbGQgdGhyZWFkIHNob3VsZCBmaW5pc2giKTsKICAgIHByaW50bG4hKCJtYWluIHRocmVhZDoge30iLCBmYW5jeV9yZWYyLm51bSk7Cn0KYGBgCgAk////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wH5EfkRAAEA+REAx2Am8gMAANgHAAAA2QcAAL0CDgYAANcHAgUBBFNvbWUBAQCfDgAB2AcAAL0CDgYAAtcHAAEAqAIkBgAA1gcBAQCfDgACAKkCEvEDAJ8OBQEFRTA1MDQAAR8FBQABAAUAqAIkBgAA1gcBAQGkDgAB1wcAAPZgJvQDAADdBwAAAgD2YCb0AwCfDgUBhwxBIHZhbHVlIHdhcyBtb3ZlZCBvdXQgd2hpbGUgaXQgd2FzIHN0aWxsIGJvcnJvd2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwNQpzdHJ1Y3QgVmFsdWUge30KCmZuIGJvcnJvdyh2YWw6ICZWYWx1ZSkge30KCmZuIGVhdCh2YWw6IFZhbHVlKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gVmFsdWV7fTsKICAgIGxldCBfcmVmX3RvX3ZhbDogJlZhbHVlID0gJng7CiAgICBlYXQoeCk7CiAgICBib3Jyb3coX3JlZl90b192YWwpOwp9CmBgYAoKSGVyZSwgdGhlIGZ1bmN0aW9uIGBlYXRgIHRha2VzIG93bmVyc2hpcCBvZiBgeGAuIEhvd2V2ZXIsCmB4YCBjYW5ub3QgYmUgbW92ZWQgYmVjYXVzZSB0aGUgYm9ycm93IHRvIGBfcmVmX3RvX3ZhbGAKbmVlZHMgdG8gbGFzdCB0aWxsIHRoZSBmdW5jdGlvbiBgYm9ycm93YC4KVG8gZml4IHRoYXQgeW91IGNhbiBkbyBhIGZldyBkaWZmZXJlbnQgdGhpbmdzOgoKKiBUcnkgdG8gYXZvaWQgbW92aW5nIHRoZSB2YXJpYWJsZS4KKiBSZWxlYXNlIGJvcnJvdyBiZWZvcmUgbW92ZS4KKiBJbXBsZW1lbnQgdGhlIGBDb3B5YCB0cmFpdCBvbiB0aGUgdHlwZS4KCkV4YW1wbGVzOgoKYGBgCnN0cnVjdCBWYWx1ZSB7fQoKZm4gYm9ycm93KHZhbDogJlZhbHVlKSB7fQoKZm4gZWF0KHZhbDogJlZhbHVlKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gVmFsdWV7fTsKCiAgICBsZXQgcmVmX3RvX3ZhbDogJlZhbHVlID0gJng7CiAgICBlYXQoJngpOyAvLyBwYXNzIGJ5IHJlZmVyZW5jZSwgaWYgaXQncyBwb3NzaWJsZQogICAgYm9ycm93KHJlZl90b192YWwpOwp9CmBgYAoKT3I6CgpgYGAKc3RydWN0IFZhbHVlIHt9CgpmbiBib3Jyb3codmFsOiAmVmFsdWUpIHt9CgpmbiBlYXQodmFsOiBWYWx1ZSkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFZhbHVle307CgogICAgbGV0IHJlZl90b192YWw6ICZWYWx1ZSA9ICZ4OwogICAgYm9ycm93KHJlZl90b192YWwpOwogICAgLy8gcmVmX3RvX3ZhbCBpcyBubyBsb25nZXIgdXNlZC4KICAgIGVhdCh4KTsKfQpgYGAKCk9yOgoKYGBgCiNbZGVyaXZlKENsb25lLCBDb3B5KV0gLy8gaW1wbGVtZW50IENvcHkgdHJhaXQKc3RydWN0IFZhbHVlIHt9CgpmbiBib3Jyb3codmFsOiAmVmFsdWUpIHt9CgpmbiBlYXQodmFsOiBWYWx1ZSkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFZhbHVle307CiAgICBsZXQgcmVmX3RvX3ZhbDogJlZhbHVlID0gJng7CiAgICBlYXQoeCk7IC8vIGl0IHdpbGwgYmUgY29waWVkIGhlcmUuCiAgICBib3Jyb3cocmVmX3RvX3ZhbCk7Cn0KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBSdXN0J3Mgb3duZXJzaGlwIHN5c3RlbSwgdGFrZSBhIGxvb2sgYXQgdGhlCltSZWZlcmVuY2VzICYgQm9ycm93aW5nXVtyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddIHNlY3Rpb24gb2YgdGhlIEJvb2suCgpbcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDQtMDItcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nLmh0bWwKABn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wF/hwyHDAABAIcMAPZgJvQDAADcBwAAAN0HAAC9Ag4GAADbBwIFAQRTb21lAQEAnw4AAdwHAAC9Ag4GAALbBwABAKgCJAYAANoHAQEAnw4AAgCpAhLzAwCfDgUBBUUwNTA1AAEfBQUAAQAFAKgCJAYAANoHAQEBpA4AAdsHAAClYSb2AwAA4QcAAAIApWEm9gMAnw4FAfYLQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBhc3NpZ24gdG8gYSBib3Jyb3dlZCB2YWx1ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MDYKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdTgsCn0KCmxldCBtdXQgZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDUgfTsKbGV0IGZhbmN5X3JlZiA9ICZmYW5jeV9udW07CmZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA2IH07Ci8vIGVycm9yOiBjYW5ub3QgYXNzaWduIHRvIGBmYW5jeV9udW1gIGJlY2F1c2UgaXQgaXMgYm9ycm93ZWQKCnByaW50bG4hKCJOdW06IHt9LCBSZWY6IHt9IiwgZmFuY3lfbnVtLm51bSwgZmFuY3lfcmVmLm51bSk7CmBgYAoKQmVjYXVzZSBgZmFuY3lfcmVmYCBzdGlsbCBob2xkcyBhIHJlZmVyZW5jZSB0byBgZmFuY3lfbnVtYCwgYGZhbmN5X251bWAgY2FuJ3QKYmUgYXNzaWduZWQgdG8gYSBuZXcgdmFsdWUgYXMgaXQgd291bGQgaW52YWxpZGF0ZSB0aGUgcmVmZXJlbmNlLgoKQWx0ZXJuYXRpdmVseSwgd2UgY2FuIG1vdmUgb3V0IG9mIGBmYW5jeV9udW1gIGludG8gYSBzZWNvbmQgYGZhbmN5X251bWA6CgpgYGAKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdTgsCn0KCmxldCBtdXQgZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDUgfTsKbGV0IG1vdmVkX251bSA9IGZhbmN5X251bTsKZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDYgfTsKCnByaW50bG4hKCJOdW06IHt9LCBNb3ZlZCBudW06IHt9IiwgZmFuY3lfbnVtLm51bSwgbW92ZWRfbnVtLm51bSk7CmBgYAoKSWYgdGhlIHZhbHVlIGhhcyB0byBiZSBib3Jyb3dlZCwgdHJ5IGxpbWl0aW5nIHRoZSBsaWZldGltZSBvZiB0aGUgYm9ycm93IHVzaW5nCmEgc2NvcGVkIGJsb2NrOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpsZXQgbXV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07Cgp7CiAgICBsZXQgZmFuY3lfcmVmID0gJmZhbmN5X251bTsKICAgIHByaW50bG4hKCJSZWY6IHt9IiwgZmFuY3lfcmVmLm51bSk7Cn0KCi8vIFdvcmtzIGJlY2F1c2UgYGZhbmN5X3JlZmAgaXMgbm8gbG9uZ2VyIGluIHNjb3BlCmZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA2IH07CnByaW50bG4hKCJOdW06IHt9IiwgZmFuY3lfbnVtLm51bSk7CmBgYAoKT3IgYnkgbW92aW5nIHRoZSByZWZlcmVuY2UgaW50byBhIGZ1bmN0aW9uOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBwcmludF9mYW5jeV9yZWYoZmFuY3lfcmVmOiAmRmFuY3lOdW0pewogICAgcHJpbnRsbiEoIlJlZjoge30iLCBmYW5jeV9yZWYubnVtKTsKfQoKbGV0IG11dCBmYW5jeV9udW0gPSBGYW5jeU51bSB7IG51bTogNSB9OwoKcHJpbnRfZmFuY3lfcmVmKCZmYW5jeV9udW0pOwoKLy8gV29ya3MgYmVjYXVzZSBmdW5jdGlvbiBib3Jyb3cgaGFzIGVuZGVkCmZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA2IH07CnByaW50bG4hKCJOdW06IHt9IiwgZmFuY3lfbnVtLm51bSk7CmBgYAoAGP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////x/2C/YLAAEA9gsApWEm9gMAAOAHAAAA4QcAAL0CDgYAAN8HAgUBBFNvbWUBAQCfDgAB4AcAAL0CDgYAAt8HAAEAqAIkBgAA3gcBAQCfDgACAKkCEvUDAJ8OBQEFRTA1MDYAAR8FBQABAAUAqAIkBgAA3gcBAQGkDgAB3wcAANRhJvgDAADlBwAAAgDUYSb4AwCfDgUBuxVBIGJvcnJvd2VkIHZhbHVlIHdhcyBtb3ZlZCBvdXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTA3CnVzZSBzdGQ6OmNlbGw6OlJlZkNlbGw7CgpzdHJ1Y3QgVGhlRGFya0tuaWdodDsKCmltcGwgVGhlRGFya0tuaWdodCB7CiAgICBmbiBub3RoaW5nX2lzX3RydWUoc2VsZikge30KfQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gUmVmQ2VsbDo6bmV3KFRoZURhcmtLbmlnaHQpOwoKICAgIHguYm9ycm93KCkubm90aGluZ19pc190cnVlKCk7IC8vIGVycm9yOiBjYW5ub3QgbW92ZSBvdXQgb2YgYm9ycm93ZWQgY29udGVudAp9CmBgYAoKSGVyZSwgdGhlIGBub3RoaW5nX2lzX3RydWVgIG1ldGhvZCB0YWtlcyB0aGUgb3duZXJzaGlwIG9mIGBzZWxmYC4gSG93ZXZlciwKYHNlbGZgIGNhbm5vdCBiZSBtb3ZlZCBiZWNhdXNlIGAuYm9ycm93KClgIG9ubHkgcHJvdmlkZXMgYW4gYCZUaGVEYXJrS25pZ2h0YCwKd2hpY2ggaXMgYSBib3Jyb3cgb2YgdGhlIGNvbnRlbnQgb3duZWQgYnkgdGhlIGBSZWZDZWxsYC4gVG8gZml4IHRoaXMgZXJyb3IsCnlvdSBoYXZlIHRocmVlIGNob2ljZXM6CgoqIFRyeSB0byBhdm9pZCBtb3ZpbmcgdGhlIHZhcmlhYmxlLgoqIFNvbWVob3cgcmVjbGFpbSB0aGUgb3duZXJzaGlwLgoqIEltcGxlbWVudCB0aGUgYENvcHlgIHRyYWl0IG9uIHRoZSB0eXBlLgoKVGhpcyBjYW4gYWxzbyBoYXBwZW4gd2hlbiB1c2luZyBhIHR5cGUgaW1wbGVtZW50aW5nIGBGbmAgb3IgYEZuTXV0YCwgYXMgbmVpdGhlcgphbGxvd3MgbW92aW5nIG91dCBvZiB0aGVtICh0aGV5IHVzdWFsbHkgcmVwcmVzZW50IGNsb3N1cmVzIHdoaWNoIGNhbiBiZSBjYWxsZWQKbW9yZSB0aGFuIG9uY2UpLiBNdWNoIG9mIHRoZSB0ZXh0IGZvbGxvd2luZyBhcHBsaWVzIGVxdWFsbHkgd2VsbCB0byBub24tYEZuT25jZWAKY2xvc3VyZSBib2RpZXMuCgpFeGFtcGxlczoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpSZWZDZWxsOwoKc3RydWN0IFRoZURhcmtLbmlnaHQ7CgppbXBsIFRoZURhcmtLbmlnaHQgewogICAgZm4gbm90aGluZ19pc190cnVlKCZzZWxmKSB7fSAvLyBGaXJzdCBjYXNlLCB3ZSBkb24ndCB0YWtlIG93bmVyc2hpcAp9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBSZWZDZWxsOjpuZXcoVGhlRGFya0tuaWdodCk7CgogICAgeC5ib3Jyb3coKS5ub3RoaW5nX2lzX3RydWUoKTsgLy8gb2shCn0KYGBgCgpPcjoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpSZWZDZWxsOwoKc3RydWN0IFRoZURhcmtLbmlnaHQ7CgppbXBsIFRoZURhcmtLbmlnaHQgewogICAgZm4gbm90aGluZ19pc190cnVlKHNlbGYpIHt9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFJlZkNlbGw6Om5ldyhUaGVEYXJrS25pZ2h0KTsKICAgIGxldCB4ID0geC5pbnRvX2lubmVyKCk7IC8vIHdlIGdldCBiYWNrIG93bmVyc2hpcAoKICAgIHgubm90aGluZ19pc190cnVlKCk7IC8vIG9rIQp9CmBgYAoKT3I6CgpgYGAKdXNlIHN0ZDo6Y2VsbDo6UmVmQ2VsbDsKCiNbZGVyaXZlKENsb25lLCBDb3B5KV0gLy8gd2UgaW1wbGVtZW50IHRoZSBDb3B5IHRyYWl0CnN0cnVjdCBUaGVEYXJrS25pZ2h0OwoKaW1wbCBUaGVEYXJrS25pZ2h0IHsKICAgIGZuIG5vdGhpbmdfaXNfdHJ1ZShzZWxmKSB7fQp9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBSZWZDZWxsOjpuZXcoVGhlRGFya0tuaWdodCk7CgogICAgeC5ib3Jyb3coKS5ub3RoaW5nX2lzX3RydWUoKTsgLy8gb2shCn0KYGBgCgpNb3ZpbmcgYSBtZW1iZXIgb3V0IG9mIGEgbXV0YWJseSBib3Jyb3dlZCBzdHJ1Y3Qgd2lsbCBhbHNvIGNhdXNlIEUwNTA3IGVycm9yOgoKYGBgY29tcGlsZV9mYWlsLEUwNTA3CnN0cnVjdCBUaGVEYXJrS25pZ2h0OwoKaW1wbCBUaGVEYXJrS25pZ2h0IHsKICAgIGZuIG5vdGhpbmdfaXNfdHJ1ZShzZWxmKSB7fQp9CgpzdHJ1Y3QgQmF0Y2F2ZSB7CiAgICBrbmlnaHQ6IFRoZURhcmtLbmlnaHQKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgY2F2ZSA9IEJhdGNhdmUgewogICAgICAgIGtuaWdodDogVGhlRGFya0tuaWdodAogICAgfTsKICAgIGxldCBib3Jyb3dlZCA9ICZtdXQgY2F2ZTsKCiAgICBib3Jyb3dlZC5rbmlnaHQubm90aGluZ19pc190cnVlKCk7IC8vIEUwNTA3Cn0KYGBgCgpJdCBpcyBmaW5lIG9ubHkgaWYgeW91IHB1dCBzb21ldGhpbmcgYmFjay4gYG1lbTo6cmVwbGFjZWAgY2FuIGJlIHVzZWQgZm9yIHRoYXQ6CgpgYGAKIyBzdHJ1Y3QgVGhlRGFya0tuaWdodDsKIyBpbXBsIFRoZURhcmtLbmlnaHQgeyBmbiBub3RoaW5nX2lzX3RydWUoc2VsZikge30gfQojIHN0cnVjdCBCYXRjYXZlIHsga25pZ2h0OiBUaGVEYXJrS25pZ2h0IH0KdXNlIHN0ZDo6bWVtOwoKbGV0IG11dCBjYXZlID0gQmF0Y2F2ZSB7CiAgICBrbmlnaHQ6IFRoZURhcmtLbmlnaHQKfTsKbGV0IGJvcnJvd2VkID0gJm11dCBjYXZlOwoKbWVtOjpyZXBsYWNlKCZtdXQgYm9ycm93ZWQua25pZ2h0LCBUaGVEYXJrS25pZ2h0KS5ub3RoaW5nX2lzX3RydWUoKTsgLy8gb2shCmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gUnVzdCdzIG93bmVyc2hpcCBzeXN0ZW0sIHRha2UgYSBsb29rIGF0IHRoZQpbUmVmZXJlbmNlcyAmIEJvcnJvd2luZ11bcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXSBzZWN0aW9uIG9mIHRoZSBCb29rLgoKW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDA0LTAyLXJlZmVyZW5jZXMtYW5kLWJvcnJvd2luZy5odG1sCgAr////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8HuxW7FQABALsVANRhJvgDAADkBwAAAOUHAAC9Ag4GAADjBwIFAQRTb21lAQEAnw4AAeQHAAC9Ag4GAALjBwABAKgCJAYAAOIHAQEAnw4AAgCpAhL3AwCfDgUBBUUwNTA3AAEfBQUAAQAFAKgCJAYAAOIHAQEBpA4AAeMHAACDYib6AwAA6QcAAAIAg2Im+gMAnw4FAY4HQSB2YWx1ZSB3YXMgbW92ZWQgb3V0IG9mIGEgbm9uLWNvcHkgZml4ZWQtc2l6ZSBhcnJheS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MDgKc3RydWN0IE5vbkNvcHk7CgpmbiBtYWluKCkgewogICAgbGV0IGFycmF5ID0gW05vbkNvcHk7IDFdOwogICAgbGV0IF92YWx1ZSA9IGFycmF5WzBdOyAvLyBlcnJvcjogY2Fubm90IG1vdmUgb3V0IG9mIHR5cGUgYFtOb25Db3B5OyAxXWAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBhIG5vbi1jb3B5IGZpeGVkLXNpemUgYXJyYXkKfQpgYGAKClRoZSBmaXJzdCBlbGVtZW50IHdhcyBtb3ZlZCBvdXQgb2YgdGhlIGFycmF5LCBidXQgdGhpcyBpcyBub3QKcG9zc2libGUgYmVjYXVzZSBgTm9uQ29weWAgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgQ29weWAgdHJhaXQuCgpDb25zaWRlciBib3Jyb3dpbmcgdGhlIGVsZW1lbnQgaW5zdGVhZCBvZiBtb3ZpbmcgaXQ6CgpgYGAKc3RydWN0IE5vbkNvcHk7CgpmbiBtYWluKCkgewogICAgbGV0IGFycmF5ID0gW05vbkNvcHk7IDFdOwogICAgbGV0IF92YWx1ZSA9ICZhcnJheVswXTsgLy8gQm9ycm93aW5nIGlzIGFsbG93ZWQsIHVubGlrZSBtb3ZpbmcuCn0KYGBgCgpBbHRlcm5hdGl2ZWx5LCBpZiB5b3VyIHR5cGUgaW1wbGVtZW50cyBgQ2xvbmVgIGFuZCB5b3UgbmVlZCB0byBvd24gdGhlIHZhbHVlLApjb25zaWRlciBib3Jyb3dpbmcgYW5kIHRoZW4gY2xvbmluZzoKCmBgYAojW2Rlcml2ZShDbG9uZSldCnN0cnVjdCBOb25Db3B5OwoKZm4gbWFpbigpIHsKICAgIGxldCBhcnJheSA9IFtOb25Db3B5OyAxXTsKICAgIC8vIE5vdyB5b3UgY2FuIGNsb25lIHRoZSBhcnJheSBlbGVtZW50LgogICAgbGV0IF92YWx1ZSA9IGFycmF5WzBdLmNsb25lKCk7Cn0KYGBgCgAP////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/f44HjgcAAQCOBwCDYib6AwAA6AcAAADpBwAAvQIOBgAA5wcCBQEEU29tZQEBAJ8OAAHoBwAAvQIOBgAC5wcAAQCoAiQGAADmBwEBAJ8OAAIAqQIS+QMAnw4FAQVFMDUwOAABHwUFAAEABQCoAiQGAADmBwEBAaQOAAHnBwAAsmIm/AMAAO0HAAACALJiJvwDAJ8OBQH+ElRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIG1vdmUgb3V0IG9mIGEgdmFsdWUgd2hvc2UgdHlwZQppbXBsZW1lbnRzIHRoZSBgRHJvcGAgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTA5CnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHVzaXplCn0KCnN0cnVjdCBEcm9wU3RydWN0IHsKICAgIGZhbmN5OiBGYW5jeU51bQp9CgppbXBsIERyb3AgZm9yIERyb3BTdHJ1Y3QgewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsKICAgICAgICAvLyBEZXN0cnVjdCBEcm9wU3RydWN0LCBwb3NzaWJseSB1c2luZyBGYW5jeU51bQogICAgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IGRyb3Bfc3RydWN0ID0gRHJvcFN0cnVjdHtmYW5jeTogRmFuY3lOdW17bnVtOiA1fX07CiAgICBsZXQgZmFuY3lfZmllbGQgPSBkcm9wX3N0cnVjdC5mYW5jeTsgLy8gRXJyb3IgRTA1MDkKICAgIHByaW50bG4hKCJGYW5jeToge30iLCBmYW5jeV9maWVsZC5udW0pOwogICAgLy8gaW1wbGljaXQgY2FsbCB0byBgZHJvcF9zdHJ1Y3QuZHJvcCgpYCBhcyBkcm9wX3N0cnVjdCBnb2VzIG91dCBvZiBzY29wZQp9CmBgYAoKSGVyZSwgd2UgdHJpZWQgdG8gbW92ZSBhIGZpZWxkIG91dCBvZiBhIHN0cnVjdCBvZiB0eXBlIGBEcm9wU3RydWN0YCB3aGljaAppbXBsZW1lbnRzIHRoZSBgRHJvcGAgdHJhaXQuIEhvd2V2ZXIsIGEgc3RydWN0IGNhbm5vdCBiZSBkcm9wcGVkIGlmIG9uZSBvcgptb3JlIG9mIGl0cyBmaWVsZHMgaGF2ZSBiZWVuIG1vdmVkLgoKU3RydWN0cyBpbXBsZW1lbnRpbmcgdGhlIGBEcm9wYCB0cmFpdCBoYXZlIGFuIGltcGxpY2l0IGRlc3RydWN0b3IgdGhhdCBnZXRzCmNhbGxlZCB3aGVuIHRoZXkgZ28gb3V0IG9mIHNjb3BlLiBUaGlzIGRlc3RydWN0b3IgbWF5IHVzZSB0aGUgZmllbGRzIG9mIHRoZQpzdHJ1Y3QsIHNvIG1vdmluZyBvdXQgb2YgdGhlIHN0cnVjdCBjb3VsZCBtYWtlIGl0IGltcG9zc2libGUgdG8gcnVuIHRoZQpkZXN0cnVjdG9yLiBUaGVyZWZvcmUsIHdlIG11c3QgdGhpbmsgb2YgYWxsIHZhbHVlcyB3aG9zZSB0eXBlIGltcGxlbWVudHMgdGhlCmBEcm9wYCB0cmFpdCBhcyBzaW5nbGUgdW5pdHMgd2hvc2UgZmllbGRzIGNhbm5vdCBiZSBtb3ZlZC4KClRoaXMgZXJyb3IgY2FuIGJlIGZpeGVkIGJ5IGNyZWF0aW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBmaWVsZHMgb2YgYSBzdHJ1Y3QsCmVudW0sIG9yIHR1cGxlIHVzaW5nIHRoZSBgcmVmYCBrZXl3b3JkOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHVzaXplCn0KCnN0cnVjdCBEcm9wU3RydWN0IHsKICAgIGZhbmN5OiBGYW5jeU51bQp9CgppbXBsIERyb3AgZm9yIERyb3BTdHJ1Y3QgewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsKICAgICAgICAvLyBEZXN0cnVjdCBEcm9wU3RydWN0LCBwb3NzaWJseSB1c2luZyBGYW5jeU51bQogICAgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IGRyb3Bfc3RydWN0ID0gRHJvcFN0cnVjdHtmYW5jeTogRmFuY3lOdW17bnVtOiA1fX07CiAgICBsZXQgcmVmIGZhbmN5X2ZpZWxkID0gZHJvcF9zdHJ1Y3QuZmFuY3k7IC8vIE5vIG1vcmUgZXJyb3JzIQogICAgcHJpbnRsbiEoIkZhbmN5OiB7fSIsIGZhbmN5X2ZpZWxkLm51bSk7CiAgICAvLyBpbXBsaWNpdCBjYWxsIHRvIGBkcm9wX3N0cnVjdC5kcm9wKClgIGFzIGRyb3Bfc3RydWN0IGdvZXMgb3V0IG9mIHNjb3BlCn0KYGBgCgpOb3RlIHRoYXQgdGhpcyB0ZWNobmlxdWUgY2FuIGFsc28gYmUgdXNlZCBpbiB0aGUgYXJtcyBvZiBhIG1hdGNoIGV4cHJlc3Npb246CgpgYGAKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdXNpemUKfQoKZW51bSBEcm9wRW51bSB7CiAgICBGYW5jeShGYW5jeU51bSkKfQoKaW1wbCBEcm9wIGZvciBEcm9wRW51bSB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgewogICAgICAgIC8vIERlc3RydWN0IERyb3BFbnVtLCBwb3NzaWJseSB1c2luZyBGYW5jeU51bQogICAgfQp9CgpmbiBtYWluKCkgewogICAgLy8gQ3JlYXRlcyBhbmQgZW51bSBvZiB0eXBlIGBEcm9wRW51bWAsIHdoaWNoIGltcGxlbWVudHMgYERyb3BgCiAgICBsZXQgZHJvcF9lbnVtID0gRHJvcEVudW06OkZhbmN5KEZhbmN5TnVte251bTogMTB9KTsKICAgIG1hdGNoIGRyb3BfZW51bSB7CiAgICAgICAgLy8gQ3JlYXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgaW5zaWRlIG9mIGBEcm9wRW51bTo6RmFuY3lgCiAgICAgICAgRHJvcEVudW06OkZhbmN5KHJlZiBmYW5jeV9maWVsZCkgPT4gLy8gTm8gZXJyb3IhCiAgICAgICAgICAgIHByaW50bG4hKCJJdCB3YXMgZmFuY3ktLSB7fSEiLCBmYW5jeV9maWVsZC5udW0pLAogICAgfQogICAgLy8gaW1wbGljaXQgY2FsbCB0byBgZHJvcF9lbnVtLmRyb3AoKWAgYXMgZHJvcF9lbnVtIGdvZXMgb3V0IG9mIHNjb3BlCn0KYGBgCgAm////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////P/4S/hIAAQD+EgCyYib8AwAA7AcAAADtBwAAvQIOBgAA6wcCBQEEU29tZQEBAJ8OAAHsBwAAvQIOBgAC6wcAAQCoAiQGAADqBwEBAJ8OAAIAqQIS+wMAnw4FAQVFMDUwOQABHwUFAAEABQCoAiQGAADqBwEBAaQOAAHrBwAA4WIm/gMAAPEHAAACAOFiJv4DAJ8OBQHjBFRoZSBtYXRjaGVkIHZhbHVlIHdhcyBhc3NpZ25lZCBpbiBhIG1hdGNoIGd1YXJkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUxMApsZXQgbXV0IHggPSBTb21lKDApOwptYXRjaCB4IHsKICAgIE5vbmUgPT4ge30KICAgIFNvbWUoXykgaWYgeyB4ID0gTm9uZTsgZmFsc2UgfSA9PiB7fSAvLyBlcnJvciEKICAgIFNvbWUoXykgPT4ge30KfQpgYGAKCldoZW4gbWF0Y2hpbmcgb24gYSB2YXJpYWJsZSBpdCBjYW5ub3QgYmUgbXV0YXRlZCBpbiB0aGUgbWF0Y2ggZ3VhcmRzLCBhcyB0aGlzCmNvdWxkIGNhdXNlIHRoZSBtYXRjaCB0byBiZSBub24tZXhoYXVzdGl2ZS4KCkhlcmUgZXhlY3V0aW5nIGB4ID0gTm9uZWAgd291bGQgbW9kaWZ5IHRoZSB2YWx1ZSBiZWluZyBtYXRjaGVkIGFuZCByZXF1aXJlIHVzCnRvIGdvICJiYWNrIGluIHRpbWUiIHRvIHRoZSBgTm9uZWAgYXJtLiBUbyBmaXggaXQsIGNoYW5nZSB0aGUgdmFsdWUgaW4gdGhlIG1hdGNoCmFybToKCmBgYApsZXQgbXV0IHggPSBTb21lKDApOwptYXRjaCB4IHsKICAgIE5vbmUgPT4ge30KICAgIFNvbWUoXykgPT4gewogICAgICAgIHggPSBOb25lOyAvLyBvayEKICAgIH0KfQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////f+ME4wQAAQDjBADhYib+AwAA8AcAAADxBwAAvQIOBgAA7wcCBQEEU29tZQEBAJ8OAAHwBwAAvQIOBgAC7wcAAQCoAiQGAADuBwEBAJ8OAAIAqQIS/QMAnw4FAQVFMDUxMAABHwUFAAEABQCoAiQGAADuBwEBAaQOAAHvBwAAkGMmgAQAAPUHAAACAJBjJoAEAJ8OBQHyBEludmFsaWQgbW9ub21vcnBoaXphdGlvbiBvZiBhbiBpbnRyaW5zaWMgZnVuY3Rpb24gd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTExCiMhW2ZlYXR1cmUocGxhdGZvcm1faW50cmluc2ljcyldCgpleHRlcm4gInBsYXRmb3JtLWludHJpbnNpYyIgewogICAgZm4gc2ltZF9hZGQ8VD4oYTogVCwgYjogVCkgLT4gVDsKfQoKZm4gbWFpbigpIHsKICAgIHVuc2FmZSB7IHNpbWRfYWRkKDAsIDEpOyB9CiAgICAvLyBlcnJvcjogaW52YWxpZCBtb25vbW9ycGhpemF0aW9uIG9mIGBzaW1kX2FkZGAgaW50cmluc2ljCn0KYGBgCgpUaGUgZ2VuZXJpYyB0eXBlIGhhcyB0byBiZSBhIFNJTUQgdHlwZS4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHJlcHJfc2ltZCldCiMhW2ZlYXR1cmUocGxhdGZvcm1faW50cmluc2ljcyldCgojW3JlcHIoc2ltZCldCiNbZGVyaXZlKENvcHksIENsb25lKV0Kc3RydWN0IGkzMngyKGkzMiwgaTMyKTsKCmV4dGVybiAicGxhdGZvcm0taW50cmluc2ljIiB7CiAgICBmbiBzaW1kX2FkZDxUPihhOiBULCBiOiBUKSAtPiBUOwp9Cgp1bnNhZmUgeyBzaW1kX2FkZChpMzJ4MigwLCAwKSwgaTMyeDIoMSwgMikpOyB9IC8vIG9rIQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////AfIE8gQAAQDyBACQYyaABAAA9AcAAAD1BwAAvQIOBgAA8wcCBQEEU29tZQEBAJ8OAAH0BwAAvQIOBgAC8wcAAQCoAiQGAADyBwEBAJ8OAAIAqQIS/wMAnw4FAQVFMDUxMQABHwUFAAEABQCoAiQGAADyBwEBAaQOAAHzBwAAv2MmggQAAPkHAAACAL9jJoIEAJ8OBQGaBFRyYW5zbXV0ZSB3aXRoIHR3byBkaWZmZXJlbnRseSBzaXplZCB0eXBlcyB3YXMgYXR0ZW1wdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUxMgpmbiB0YWtlc191OChfOiB1OCkge30KCmZuIG1haW4oKSB7CiAgICB1bnNhZmUgeyB0YWtlc191OCg6OnN0ZDo6bWVtOjp0cmFuc211dGUoMHUxNikpOyB9CiAgICAvLyBlcnJvcjogY2Fubm90IHRyYW5zbXV0ZSBiZXR3ZWVuIHR5cGVzIG9mIGRpZmZlcmVudCBzaXplcywKICAgIC8vICAgICAgICBvciBkZXBlbmRlbnRseS1zaXplZCB0eXBlcwp9CmBgYAoKUGxlYXNlIHVzZSB0eXBlcyB3aXRoIHNhbWUgc2l6ZSBvciB1c2UgdGhlIGV4cGVjdGVkIHR5cGUgZGlyZWN0bHkuIEV4YW1wbGU6CgpgYGAKZm4gdGFrZXNfdTgoXzogdTgpIHt9CgpmbiBtYWluKCkgewogICAgdW5zYWZlIHsgdGFrZXNfdTgoOjpzdGQ6Om1lbTo6dHJhbnNtdXRlKDBpOCkpOyB9IC8vIG9rIQogICAgLy8gb3I6CiAgICB1bnNhZmUgeyB0YWtlc191OCgwdTgpOyB9IC8vIG9rIQp9CmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////H5oEmgQAAQCaBAC/YyaCBAAA+AcAAAD5BwAAvQIOBgAA9wcCBQEEU29tZQEBAJ8OAAH4BwAAvQIOBgAC9wcAAQCoAiQGAAD2BwEBAJ8OAAIAqQISgQQAnw4FAQVFMDUxMgABHwUFAAEABQCoAiQGAAD2BwEBAaQOAAH3BwAA7mMmhAQAAP0HAAACAO5jJoQEAJ8OBQGlBUEgcmVmZXJlbmNlIHRvIGEgbG9jYWwgdmFyaWFibGUgd2FzIHJldHVybmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUxNQpmbiBnZXRfZGFuZ2xpbmdfcmVmZXJlbmNlKCkgLT4gJidzdGF0aWMgaTMyIHsKICAgIGxldCB4ID0gMDsKICAgICZ4Cn0KYGBgCgpgYGBjb21waWxlX2ZhaWwsRTA1MTUKdXNlIHN0ZDo6c2xpY2U6Okl0ZXI7CmZuIGdldF9kYW5nbGluZ19pdGVyYXRvcjwnYT4oKSAtPiBJdGVyPCdhLCBpMzI+IHsKICAgIGxldCB2ID0gdmVjIVsxLCAyLCAzXTsKICAgIHYuaXRlcigpCn0KYGBgCgpMb2NhbCB2YXJpYWJsZXMsIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIHRlbXBvcmFyaWVzIGFyZSBhbGwgZHJvcHBlZCBiZWZvcmUgdGhlCmVuZCBvZiB0aGUgZnVuY3Rpb24gYm9keS4gU28gYSByZWZlcmVuY2UgdG8gdGhlbSBjYW5ub3QgYmUgcmV0dXJuZWQuCgpDb25zaWRlciByZXR1cm5pbmcgYW4gb3duZWQgdmFsdWUgaW5zdGVhZDoKCmBgYAp1c2Ugc3RkOjp2ZWM6OkludG9JdGVyOwoKZm4gZ2V0X2ludGVnZXIoKSAtPiBpMzIgewogICAgbGV0IHggPSAwOwogICAgeAp9CgpmbiBnZXRfb3duZWRfaXRlcmF0b3IoKSAtPiBJbnRvSXRlcjxpMzI+IHsKICAgIGxldCB2ID0gdmVjIVsxLCAyLCAzXTsKICAgIHYuaW50b19pdGVyKCkKfQpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8DpQWlBQABAKUFAO5jJoQEAAD8BwAAAP0HAAC9Ag4GAAD7BwIFAQRTb21lAQEAnw4AAfwHAAC9Ag4GAAL7BwABAKgCJAYAAPoHAQEAnw4AAgCpAhKDBACfDgUBBUUwNTE1AAEfBQUAAQAFAKgCJAYAAPoHAQEBpA4AAfsHAACdZCaGBAAAgQgAAAIAnWQmhgQAnw4FAe8BVGhlIGB0eXBlb2ZgIGtleXdvcmQgaXMgY3VycmVudGx5IHJlc2VydmVkIGJ1dCB1bmltcGxlbWVudGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUxNgpmbiBtYWluKCkgewogICAgbGV0IHg6IHR5cGVvZig5MikgPSA5MjsKfQpgYGAKClRyeSB1c2luZyB0eXBlIGluZmVyZW5jZSBpbnN0ZWFkLiBFeGFtcGxlOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IDkyOwp9CmBgYAoABP///////////wH///////////8B////////////Af///////x/vAe8BAAEA7wEAnWQmhgQAAIAIAAAAgQgAAL0CDgYAAP8HAgUBBFNvbWUBAQCfDgABgAgAAL0CDgYAAv8HAAEAqAIkBgAA/gcBAQCfDgACAKkCEoUEAJ8OBQEFRTA1MTYAAR8FBQABAAUAqAIkBgAA/gcBAQGkDgAB/wcAAMxkJogEAACFCAAAAgDMZCaIBACfDgUB6gtBIGAjW3JlcHIoLi4pXWAgYXR0cmlidXRlIHdhcyBwbGFjZWQgb24gYW4gdW5zdXBwb3J0ZWQgaXRlbS4KCkV4YW1wbGVzIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTE3CiNbcmVwcihDKV0KdHlwZSBGb28gPSB1ODsKCiNbcmVwcihwYWNrZWQpXQplbnVtIEZvbyB7QmFyLCBCYXp9CgojW3JlcHIodTgpXQpzdHJ1Y3QgRm9vIHtiYXI6IGJvb2wsIGJhejogYm9vbH0KCiNbcmVwcihDKV0KaW1wbCBGb28gewogICAgLy8gLi4uCn0KYGBgCgoqIFRoZSBgI1tyZXByKEMpXWAgYXR0cmlidXRlIGNhbiBvbmx5IGJlIHBsYWNlZCBvbiBzdHJ1Y3RzIGFuZCBlbnVtcy4KKiBUaGUgYCNbcmVwcihwYWNrZWQpXWAgYW5kIGAjW3JlcHIoc2ltZCldYCBhdHRyaWJ1dGVzIG9ubHkgd29yayBvbiBzdHJ1Y3RzLgoqIFRoZSBgI1tyZXByKHU4KV1gLCBgI1tyZXByKGkxNildYCwgZXRjIGF0dHJpYnV0ZXMgb25seSB3b3JrIG9uIGVudW1zLgoKVGhlc2UgYXR0cmlidXRlcyBkbyBub3Qgd29yayBvbiB0eXBlZGVmcywgc2luY2UgdHlwZWRlZnMgYXJlIGp1c3QgYWxpYXNlcy4KClJlcHJlc2VudGF0aW9ucyBsaWtlIGAjW3JlcHIodTgpXWAsIGAjW3JlcHIoaTY0KV1gIGFyZSBmb3Igc2VsZWN0aW5nIHRoZQpkaXNjcmltaW5hbnQgc2l6ZSBmb3IgZW51bXMgd2l0aCBubyBkYXRhIGZpZWxkcyBvbiBhbnkgb2YgdGhlIHZhcmlhbnRzLCBlLmcuCmBlbnVtIENvbG9yIHtSZWQsIEJsdWUsIEdyZWVufWAsIGVmZmVjdGl2ZWx5IHNldHRpbmcgdGhlIHNpemUgb2YgdGhlIGVudW0gdG8KdGhlIHNpemUgb2YgdGhlIHByb3ZpZGVkIHR5cGUuIFN1Y2ggYW4gZW51bSBjYW4gYmUgY2FzdCB0byBhIHZhbHVlIG9mIHRoZSBzYW1lCnR5cGUgYXMgd2VsbC4gSW4gc2hvcnQsIGAjW3JlcHIodTgpXWAgbWFrZXMgdGhlIGVudW0gYmVoYXZlIGxpa2UgYW4gaW50ZWdlcgp3aXRoIGEgY29uc3RyYWluZWQgc2V0IG9mIGFsbG93ZWQgdmFsdWVzLgoKT25seSBmaWVsZC1sZXNzIGVudW1zIGNhbiBiZSBjYXN0IHRvIG51bWVyaWNhbCBwcmltaXRpdmVzLCBzbyB0aGlzIGF0dHJpYnV0ZQp3aWxsIG5vdCBhcHBseSB0byBzdHJ1Y3RzLgoKYCNbcmVwcihwYWNrZWQpXWAgcmVkdWNlcyBwYWRkaW5nIHRvIG1ha2UgdGhlIHN0cnVjdCBzaXplIHNtYWxsZXIuIFRoZQpyZXByZXNlbnRhdGlvbiBvZiBlbnVtcyBpc24ndCBzdHJpY3RseSBkZWZpbmVkIGluIFJ1c3QsIGFuZCB0aGlzIGF0dHJpYnV0ZQp3b24ndCB3b3JrIG9uIGVudW1zLgoKYCNbcmVwcihzaW1kKV1gIHdpbGwgZ2l2ZSBhIHN0cnVjdCBjb25zaXN0aW5nIG9mIGEgaG9tb2dlbmVvdXMgc2VyaWVzIG9mIG1hY2hpbmUKdHlwZXMgKGkuZS4sIGB1OGAsIGBpMzJgLCBldGMpIGEgcmVwcmVzZW50YXRpb24gdGhhdCBwZXJtaXRzIHZlY3Rvcml6YXRpb24gdmlhClNJTUQuIFRoaXMgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgZm9yIGVudW1zIHNpbmNlIHRoZXkgZG9uJ3QgY29uc2lzdCBvZiBhCnNpbmdsZSBsaXN0IG9mIGRhdGEuCgAY////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////3/qC+oLAAEA6gsAzGQmiAQAAIQIAAAAhQgAAL0CDgYAAIMIAgUBBFNvbWUBAQCfDgABhAgAAL0CDgYAAoMIAAEAqAIkBgAAgggBAQCfDgACAKkCEocEAJ8OBQEFRTA1MTcAAR8FBQABAAUAqAIkBgAAgggBAQGkDgABgwgAAPtkJooEAACJCAAAAgD7ZCaKBACfDgUBuQVBbiBgI1tpbmxpbmUoLi4pXWAgYXR0cmlidXRlIHdhcyBpbmNvcnJlY3RseSBwbGFjZWQgb24gc29tZXRoaW5nIG90aGVyIHRoYW4gYQpmdW5jdGlvbiBvciBtZXRob2QuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTE4CiNbaW5saW5lKGFsd2F5cyldCnN0cnVjdCBGb287CgojW2lubGluZShuZXZlcildCmltcGwgRm9vIHsKICAgIC8vIC4uLgp9CmBgYAoKYCNbaW5saW5lXWAgaGludHMgdGhlIGNvbXBpbGVyIHdoZXRoZXIgb3Igbm90IHRvIGF0dGVtcHQgdG8gaW5saW5lIGEgbWV0aG9kIG9yCmZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgY29tcGlsZXIgZG9lcyBhIHByZXR0eSBnb29kIGpvYiBvZiBmaWd1cmluZyB0aGlzIG91dAppdHNlbGYsIGJ1dCBpZiB5b3UgZmVlbCB0aGUgbmVlZCBmb3IgYW5ub3RhdGlvbnMsIGAjW2lubGluZShhbHdheXMpXWAgYW5kCmAjW2lubGluZShuZXZlcildYCBjYW4gb3ZlcnJpZGUgb3IgZm9yY2UgdGhlIGNvbXBpbGVyJ3MgZGVjaXNpb24uCgpJZiB5b3Ugd2lzaCB0byBhcHBseSB0aGlzIGF0dHJpYnV0ZSB0byBhbGwgbWV0aG9kcyBpbiBhbiBpbXBsLCBtYW51YWxseSBhbm5vdGF0ZQplYWNoIG1ldGhvZDsgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGFubm90YXRlIHRoZSBlbnRpcmUgaW1wbCB3aXRoIGFuIGAjW2lubGluZV1gCmF0dHJpYnV0ZS4KAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8BuQW5BQABALkFAPtkJooEAACICAAAAIkIAAC9Ag4GAACHCAIFAQRTb21lAQEAnw4AAYgIAAC9Ag4GAAKHCAABAKgCJAYAAIYIAQEAnw4AAgCpAhKJBACfDgUBBUUwNTE4AAEfBQUAAQAFAKgCJAYAAIYIAQEBpA4AAYcIAACqZSaMBAAAjQgAAAIAqmUmjAQAnw4FAdgLQSBub24tZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3YXMgYWxyZWFkeSBtYWRlIG9uIHRoaXMgdHlwZSBzbyBpdCBjYW5ub3QgYmUKc3BlY2lhbGl6ZWQgZnVydGhlci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjAKIyFbZmVhdHVyZShzcGVjaWFsaXphdGlvbildCgp0cmFpdCBTcGFjZUxsYW1hIHsKICAgIGZuIGZseSgmc2VsZik7Cn0KCi8vIGFwcGxpZXMgdG8gYWxsIFQKaW1wbDxUPiBTcGFjZUxsYW1hIGZvciBUIHsKICAgIGRlZmF1bHQgZm4gZmx5KCZzZWxmKSB7fQp9CgovLyBub24tZGVmYXVsdCBpbXBsCi8vIGFwcGxpZXMgdG8gYWxsIGBDbG9uZWAgVCBhbmQgb3ZlcnJpZGVzIHRoZSBwcmV2aW91cyBpbXBsCmltcGw8VDogQ2xvbmU+IFNwYWNlTGxhbWEgZm9yIFQgewogICAgZm4gZmx5KCZzZWxmKSB7fQp9CgovLyBzaW5jZSBgaTMyYCBpcyBjbG9uZSwgdGhpcyBjb25mbGljdHMgd2l0aCB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24KaW1wbCBTcGFjZUxsYW1hIGZvciBpMzIgewogICAgZGVmYXVsdCBmbiBmbHkoJnNlbGYpIHt9CiAgICAvLyBlcnJvcjogaXRlbSBgZmx5YCBpcyBwcm92aWRlZCBieSBhbiBgaW1wbGAgdGhhdCBzcGVjaWFsaXplcwogICAgLy8gICAgICAgIGFub3RoZXIsIGJ1dCB0aGUgaXRlbSBpbiB0aGUgcGFyZW50IGBpbXBsYCBpcyBub3QgbWFya2VkCiAgICAvLyAgICAgICAgYGRlZmF1bHRgIGFuZCBzbyBpdCBjYW5ub3QgYmUgc3BlY2lhbGl6ZWQuCn0KYGBgCgpTcGVjaWFsaXphdGlvbiBvbmx5IGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgYGRlZmF1bHRgIGZ1bmN0aW9ucyBpbgppbXBsZW1lbnRhdGlvbnMuCgpUbyBmaXggdGhpcyBlcnJvciwgeW91IG5lZWQgdG8gbWFyayBhbGwgdGhlIHBhcmVudCBpbXBsZW1lbnRhdGlvbnMgYXMgZGVmYXVsdC4KRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHNwZWNpYWxpemF0aW9uKV0KCnRyYWl0IFNwYWNlTGxhbWEgewogICAgZm4gZmx5KCZzZWxmKTsKfQoKLy8gYXBwbGllcyB0byBhbGwgVAppbXBsPFQ+IFNwYWNlTGxhbWEgZm9yIFQgewogICAgZGVmYXVsdCBmbiBmbHkoJnNlbGYpIHt9IC8vIFRoaXMgaXMgYSBwYXJlbnQgaW1wbGVtZW50YXRpb24uCn0KCi8vIGFwcGxpZXMgdG8gYWxsIGBDbG9uZWAgVDsgb3ZlcnJpZGVzIHRoZSBwcmV2aW91cyBpbXBsCmltcGw8VDogQ2xvbmU+IFNwYWNlTGxhbWEgZm9yIFQgewogICAgZGVmYXVsdCBmbiBmbHkoJnNlbGYpIHt9IC8vIFRoaXMgaXMgYSBwYXJlbnQgaW1wbGVtZW50YXRpb24gYnV0IHdhcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzbHkgbm90IGEgZGVmYXVsdCBvbmUsIGNhdXNpbmcgdGhlIGVycm9yCn0KCi8vIGFwcGxpZXMgdG8gaTMyLCBvdmVycmlkZXMgdGhlIHByZXZpb3VzIHR3byBpbXBscwppbXBsIFNwYWNlTGxhbWEgZm9yIGkzMiB7CiAgICBmbiBmbHkoJnNlbGYpIHt9IC8vIEFuZCBub3cgdGhhdCdzIG9rIQp9CmBgYAoAGP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////B9gL2AsAAQDYCwCqZSaMBAAAjAgAAACNCAAAvQIOBgAAiwgCBQEEU29tZQEBAJ8OAAGMCAAAvQIOBgACiwgAAQCoAiQGAACKCAEBAJ8OAAIAqQISiwQAnw4FAQVFMDUyMAABHwUFAAEABQCoAiQGAACKCAEBAaQOAAGLCAAA2WUmjgQAAJEIAAACANllJo4EAJ8OBQGvBFRoZSBsYW5nIGF0dHJpYnV0ZSB3YXMgdXNlZCBpbiBhbiBpbnZhbGlkIGNvbnRleHQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTIyCiMhW2ZlYXR1cmUobGFuZ19pdGVtcyldCgojW2xhbmcgPSAiY29va2llIl0KZm4gY29va2llKCkgLT4gISB7IC8vIGVycm9yOiBkZWZpbml0aW9uIG9mIGFuIHVua25vd24gbGFuZ3VhZ2UgaXRlbTogYGNvb2tpZWAKICAgIGxvb3Age30KfQpgYGAKClRoZSBsYW5nIGF0dHJpYnV0ZSBpcyBpbnRlbmRlZCBmb3IgbWFya2luZyBzcGVjaWFsIGl0ZW1zIHRoYXQgYXJlIGJ1aWx0LWluIHRvClJ1c3QgaXRzZWxmLiBUaGlzIGluY2x1ZGVzIHNwZWNpYWwgdHJhaXRzIChsaWtlIGBDb3B5YCBhbmQgYFNpemVkYCkgdGhhdCBhZmZlY3QKaG93IHRoZSBjb21waWxlciBiZWhhdmVzLCBhcyB3ZWxsIGFzIHNwZWNpYWwgZnVuY3Rpb25zIHRoYXQgbWF5IGJlIGF1dG9tYXRpY2FsbHkKaW52b2tlZCAoc3VjaCBhcyB0aGUgaGFuZGxlciBmb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyB3aGVuIGluZGV4aW5nIGEgc2xpY2UpLgoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////H68ErwQAAQCvBADZZSaOBAAAkAgAAACRCAAAvQIOBgAAjwgCBQEEU29tZQEBAJ8OAAGQCAAAvQIOBgACjwgAAQCoAiQGAACOCAEBAJ8OAAIAqQISjQQAnw4FAQVFMDUyMgABHwUFAAEABQCoAiQGAACOCAEBAaQOAAGPCAAAiGYmkAQAAJUIAAACAIhmJpAEAJ8OBQGNCkEgdmFyaWFibGUgd2hpY2ggcmVxdWlyZXMgdW5pcXVlIGFjY2VzcyBpcyBiZWluZyB1c2VkIGluIG1vcmUgdGhhbiBvbmUgY2xvc3VyZQphdCB0aGUgc2FtZSB0aW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUyNApmbiBzZXQoeDogJm11dCBpc2l6ZSkgewogICAgKnggKz0gNDsKfQoKZm4gZHJhZ29vb29uKHg6ICZtdXQgaXNpemUpIHsKICAgIGxldCBtdXQgYzEgPSB8fCBzZXQoeCk7CiAgICBsZXQgbXV0IGMyID0gfHwgc2V0KHgpOyAvLyBlcnJvciEKCiAgICBjMigpOwogICAgYzEoKTsKfQpgYGAKClRvIHNvbHZlIHRoaXMgaXNzdWUsIG11bHRpcGxlIHNvbHV0aW9ucyBhcmUgYXZhaWxhYmxlLiBGaXJzdCwgaXMgaXQgcmVxdWlyZWQKZm9yIHRoaXMgdmFyaWFibGUgdG8gYmUgdXNlZCBpbiBtb3JlIHRoYW4gb25lIGNsb3N1cmUgYXQgYSB0aW1lPyBJZiBpdCBpcyB0aGUKY2FzZSwgdXNlIHJlZmVyZW5jZSBjb3VudGVkIHR5cGVzIHN1Y2ggYXMgYFJjYCAob3IgYEFyY2AgaWYgaXQgcnVucwpjb25jdXJyZW50bHkpOgoKYGBgCnVzZSBzdGQ6OnJjOjpSYzsKdXNlIHN0ZDo6Y2VsbDo6UmVmQ2VsbDsKCmZuIHNldCh4OiAmbXV0IGlzaXplKSB7CiAgICAqeCArPSA0Owp9CgpmbiBkcmFnb29vb24oeDogJm11dCBpc2l6ZSkgewogICAgbGV0IHggPSBSYzo6bmV3KFJlZkNlbGw6Om5ldyh4KSk7CiAgICBsZXQgeSA9IFJjOjpjbG9uZSgmeCk7CiAgICBsZXQgbXV0IGMxID0gfHwgeyBsZXQgbXV0IHgyID0geC5ib3Jyb3dfbXV0KCk7IHNldCgmbXV0IHgyKTsgfTsKICAgIGxldCBtdXQgYzIgPSB8fCB7IGxldCBtdXQgeDIgPSB5LmJvcnJvd19tdXQoKTsgc2V0KCZtdXQgeDIpOyB9OyAvLyBvayEKCiAgICBjMigpOwogICAgYzEoKTsKfQpgYGAKCklmIG5vdCwganVzdCBydW4gY2xvc3VyZXMgb25lIGF0IGEgdGltZToKCmBgYApmbiBzZXQoeDogJm11dCBpc2l6ZSkgewogICAgKnggKz0gNDsKfQoKZm4gZHJhZ29vb29uKHg6ICZtdXQgaXNpemUpIHsKICAgIHsgLy8gVGhpcyBibG9jayBpc24ndCBuZWNlc3Nhcnkgc2luY2Ugbm9uLWxleGljYWwgbGlmZXRpbWVzLCBpdCdzIGp1c3QgdG8KICAgICAgLy8gbWFrZSBpdCBtb3JlIGNsZWFyLgogICAgICAgIGxldCBtdXQgYzEgPSB8fCBzZXQoJm11dCAqeCk7CiAgICAgICAgYzEoKTsKICAgIH0gLy8gYGMxYCBoYXMgYmVlbiBkcm9wcGVkIGhlcmUgc28gd2UncmUgZnJlZSB0byB1c2UgYHhgIGFnYWluIQogICAgbGV0IG11dCBjMiA9IHx8IHNldCgmbXV0ICp4KTsKICAgIGMyKCk7Cn0KYGBgCgAV////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/P40KjQoAAQCNCgCIZiaQBAAAlAgAAACVCAAAvQIOBgAAkwgCBQEEU29tZQEBAJ8OAAGUCAAAvQIOBgACkwgAAQCoAiQGAACSCAEBAJ8OAAIAqQISjwQAnw4FAQVFMDUyNAABHwUFAAEABQCoAiQGAACSCAEBAaQOAAGTCAAAt2YmkgQAAJkIAAACALdmJpIEAJ8OBQGZCEEgY2xvc3VyZSB3YXMgdXNlZCBidXQgZGlkbid0IGltcGxlbWVudCB0aGUgZXhwZWN0ZWQgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTI1CnN0cnVjdCBYOwoKZm4gZm9vPFQ+KF86IFQpIHt9CmZuIGJhcjxUOiBGbih1MzIpPihfOiBUKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gWDsKICAgIGxldCBjbG9zdXJlID0gfF98IGZvbyh4KTsgLy8gZXJyb3I6IGV4cGVjdGVkIGEgY2xvc3VyZSB0aGF0IGltcGxlbWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHRoZSBgRm5gIHRyYWl0LCBidXQgdGhpcyBjbG9zdXJlIG9ubHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGltcGxlbWVudHMgYEZuT25jZWAKICAgIGJhcihjbG9zdXJlKTsKfQpgYGAKCkluIHRoZSBleGFtcGxlIGFib3ZlLCBgY2xvc3VyZWAgaXMgYW4gYEZuT25jZWAgY2xvc3VyZSB3aGVyZWFzIHRoZSBgYmFyYApmdW5jdGlvbiBleHBlY3RlZCBhbiBgRm5gIGNsb3N1cmUuIEluIHRoaXMgY2FzZSwgaXQncyBzaW1wbGUgdG8gZml4IHRoZSBpc3N1ZSwKeW91IGp1c3QgaGF2ZSB0byBpbXBsZW1lbnQgYENvcHlgIGFuZCBgQ2xvbmVgIHRyYWl0cyBvbiBgc3RydWN0IFhgIGFuZCBpdCdsbApiZSBvazoKCmBgYAojW2Rlcml2ZShDbG9uZSwgQ29weSldIC8vIFdlIGltcGxlbWVudCBgQ2xvbmVgIGFuZCBgQ29weWAgdHJhaXRzLgpzdHJ1Y3QgWDsKCmZuIGZvbzxUPihfOiBUKSB7fQpmbiBiYXI8VDogRm4odTMyKT4oXzogVCkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFg7CiAgICBsZXQgY2xvc3VyZSA9IHxffCBmb28oeCk7CiAgICBiYXIoY2xvc3VyZSk7IC8vIG9rIQp9CmBgYAoKVG8gYmV0dGVyIHVuZGVyc3RhbmQgaG93IHRoZXNlIHdvcmsgaW4gUnVzdCwgcmVhZCB0aGUgW0Nsb3N1cmVzXVtjbG9zdXJlc10KY2hhcHRlciBvZiB0aGUgQm9vay4KCltjbG9zdXJlc106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDEzLTAxLWNsb3N1cmVzLmh0bWwKABH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////D5kImQgAAQCZCAC3ZiaSBAAAmAgAAACZCAAAvQIOBgAAlwgCBQEEU29tZQEBAJ8OAAGYCAAAvQIOBgAClwgAAQCoAiQGAACWCAEBAJ8OAAIAqQISkQQAnw4FAQVFMDUyNQABHwUFAAEABQCoAiQGAACWCAEBAaQOAAGXCAAA5mYmlAQAAJ0IAAACAOZmJpQEAJ8OBQHKBFRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gYXJyYXkgb3Igc2xpY2UgcGF0dGVybiBkaWZmZXJlZCBmcm9tIHRoZSBudW1iZXIgb2YKZWxlbWVudHMgaW4gdGhlIGFycmF5IGJlaW5nIG1hdGNoZWQuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTI3CmxldCByID0gJlsxLCAyLCAzLCA0XTsKbWF0Y2ggciB7CiAgICAmW2EsIGJdID0+IHsgLy8gZXJyb3I6IHBhdHRlcm4gcmVxdWlyZXMgMiBlbGVtZW50cyBidXQgYXJyYXkKICAgICAgICAgICAgICAgICAvLyAgICAgICAgaGFzIDQKICAgICAgICBwcmludGxuISgiYT17fSwgYj17fSIsIGEsIGIpOwogICAgfQp9CmBgYAoKRW5zdXJlIHRoYXQgdGhlIHBhdHRlcm4gaXMgY29uc2lzdGVudCB3aXRoIHRoZSBzaXplIG9mIHRoZSBtYXRjaGVkCmFycmF5LiBBZGRpdGlvbmFsIGVsZW1lbnRzIGNhbiBiZSBtYXRjaGVkIHdpdGggYC4uYDoKCmBgYApsZXQgciA9ICZbMSwgMiwgMywgNF07Cm1hdGNoIHIgewogICAgJlthLCBiLCAuLl0gPT4geyAvLyBvayEKICAgICAgICBwcmludGxuISgiYT17fSwgYj17fSIsIGEsIGIpOwogICAgfQp9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8HygTKBAABAMoEAOZmJpQEAACcCAAAAJ0IAAC9Ag4GAACbCAIFAQRTb21lAQEAnw4AAZwIAAC9Ag4GAAKbCAABAKgCJAYAAJoIAQEAnw4AAgCpAhKTBACfDgUBBUUwNTI3AAEfBQUAAQAFAKgCJAYAAJoIAQEBpA4AAZsIAACVZyaWBAAAoQgAAAIAlWcmlgQAnw4FAdoFQW4gYXJyYXkgb3Igc2xpY2UgcGF0dGVybiByZXF1aXJlZCBtb3JlIGVsZW1lbnRzIHRoYW4gd2VyZSBwcmVzZW50IGluIHRoZQptYXRjaGVkIGFycmF5LgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUyOApsZXQgciA9ICZbMSwgMl07Cm1hdGNoIHIgewogICAgJlthLCBiLCBjLCByZXN0IEAgLi5dID0+IHsgLy8gZXJyb3I6IHBhdHRlcm4gcmVxdWlyZXMgYXQgbGVhc3QgMwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGVsZW1lbnRzIGJ1dCBhcnJheSBoYXMgMgogICAgICAgIHByaW50bG4hKCJhPXt9LCBiPXt9LCBjPXt9IHJlc3Q9ezo/fSIsIGEsIGIsIGMsIHJlc3QpOwogICAgfQp9CmBgYAoKRW5zdXJlIHRoYXQgdGhlIG1hdGNoZWQgYXJyYXkgaGFzIGF0IGxlYXN0IGFzIG1hbnkgZWxlbWVudHMgYXMgdGhlIHBhdHRlcm4KcmVxdWlyZXMuIFlvdSBjYW4gbWF0Y2ggYW4gYXJiaXRyYXJ5IG51bWJlciBvZiByZW1haW5pbmcgZWxlbWVudHMgd2l0aCBgLi5gOgoKYGBgCmxldCByID0gJlsxLCAyLCAzLCA0LCA1XTsKbWF0Y2ggciB7CiAgICAmW2EsIGIsIGMsIHJlc3QgQCAuLl0gPT4geyAvLyBvayEKICAgICAgICAvLyBwcmludHMgYGE9MSwgYj0yLCBjPTMgcmVzdD1bNCwgNV1gCiAgICAgICAgcHJpbnRsbiEoImE9e30sIGI9e30sIGM9e30gcmVzdD17Oj99IiwgYSwgYiwgYywgcmVzdCk7CiAgICB9Cn0KYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8f2gXaBQABANoFAJVnJpYEAACgCAAAAKEIAAC9Ag4GAACfCAIFAQRTb21lAQEAnw4AAaAIAAC9Ag4GAAKfCAABAKgCJAYAAJ4IAQEAnw4AAgCpAhKVBACfDgUBBUUwNTI4AAEfBQUAAQAFAKgCJAYAAJ4IAQEBpA4AAZ8IAADEZyaYBAAApQgAAAIAxGcmmAQAnw4FAcQDQW4gYXJyYXkgb3Igc2xpY2UgcGF0dGVybiB3YXMgbWF0Y2hlZCBhZ2FpbnN0IHNvbWUgb3RoZXIgdHlwZS4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjkKbGV0IHI6IGYzMiA9IDEuMDsKbWF0Y2ggciB7CiAgICBbYSwgYl0gPT4geyAvLyBlcnJvcjogZXhwZWN0ZWQgYW4gYXJyYXkgb3Igc2xpY2UsIGZvdW5kIGBmMzJgCiAgICAgICAgcHJpbnRsbiEoImE9e30sIGI9e30iLCBhLCBiKTsKICAgIH0KfQpgYGAKCkVuc3VyZSB0aGF0IHRoZSBwYXR0ZXJuIGFuZCB0aGUgZXhwcmVzc2lvbiBiZWluZyBtYXRjaGVkIG9uIGFyZSBvZiBjb25zaXN0ZW50CnR5cGVzOgoKYGBgCmxldCByID0gWzEuMCwgMi4wXTsKbWF0Y2ggciB7CiAgICBbYSwgYl0gPT4geyAvLyBvayEKICAgICAgICBwcmludGxuISgiYT17fSwgYj17fSIsIGEsIGIpOwogICAgfQp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEPxAPEAwABAMQDAMRnJpgEAACkCAAAAKUIAAC9Ag4GAACjCAIFAQRTb21lAQEAnw4AAaQIAAC9Ag4GAAKjCAABAKgCJAYAAKIIAQEAnw4AAgCpAhKXBACfDgUBBUUwNTI5AAEfBQUAAQAFAKgCJAYAAKIIAQEBpA4AAaMIAADzZyaaBAAAqQgAAAIA82cmmgQAnw4FAf0DQSBiaW5kaW5nIHNoYWRvd2VkIHNvbWV0aGluZyBpdCBzaG91bGRuJ3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTMwCnN0YXRpYyBURVNUOiBpMzIgPSAwOwoKbGV0IHI6IChpMzIsIGkzMikgPSAoMCwgMCk7Cm1hdGNoIHIgewogICAgVEVTVCA9PiB7fSAvLyBlcnJvcjogbWF0Y2ggYmluZGluZ3MgY2Fubm90IHNoYWRvdyBzdGF0aWNzCn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwganVzdCBjaGFuZ2UgdGhlIGJpbmRpbmcncyBuYW1lIGluIG9yZGVyIHRvIGF2b2lkIHNoYWRvd2luZwpvbmUgb2YgdGhlIGZvbGxvd2luZzoKCiogc3RydWN0IG5hbWUKKiBzdHJ1Y3QvZW51bSB2YXJpYW50Ciogc3RhdGljCiogY29uc3QKKiBhc3NvY2lhdGVkIGNvbnN0CgpGaXhlZCBleGFtcGxlOgoKYGBgCnN0YXRpYyBURVNUOiBpMzIgPSAwOwoKbGV0IHI6IChpMzIsIGkzMikgPSAoMCwgMCk7Cm1hdGNoIHIgewogICAgc29tZXRoaW5nID0+IHt9IC8vIG9rIQp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////x/9A/0DAAEA/QMA82cmmgQAAKgIAAAAqQgAAL0CDgYAAKcIAgUBBFNvbWUBAQCfDgABqAgAAL0CDgYAAqcIAAEAqAIkBgAApggBAQCfDgACAKkCEpkEAJ8OBQEFRTA1MzAAAR8FBQABAAUAqAIkBgAApggBAQGkDgABpwgAAKJoJpwEAACtCAAAAgCiaCacBACfDgUB5gVBbiB1bmtub3duIHR1cGxlIHN0cnVjdC92YXJpYW50IGhhcyBiZWVuIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTMxCmxldCBUeXBlKHgpID0gVHlwZSgxMik7IC8vIGVycm9yIQptYXRjaCBCYXIoMTIpIHsKICAgIEJhcih4KSA9PiB7fSAvLyBlcnJvciEKICAgIF8gPT4ge30KfQpgYGAKCkluIG1vc3QgY2FzZXMsIGl0J3MgZWl0aGVyIGEgZm9yZ290dGVuIGltcG9ydCBvciBhIHR5cG8uIEhvd2V2ZXIsIGxldCdzIGxvb2sgYXQKaG93IHlvdSBjYW4gaGF2ZSBzdWNoIGEgdHlwZToKCmBgYGVkaXRpb24yMDE4CnN0cnVjdCBUeXBlKHUzMik7IC8vIHRoaXMgaXMgYSB0dXBsZSBzdHJ1Y3QKCmVudW0gRm9vIHsKICAgIEJhcih1MzIpLCAvLyB0aGlzIGlzIGEgdHVwbGUgdmFyaWFudAp9Cgp1c2UgRm9vOjoqOyAvLyBUbyB1c2UgRm9vJ3MgdmFyaWFudCBkaXJlY3RseSwgd2UgbmVlZCB0byBpbXBvcnQgdGhlbSBpbgogICAgICAgICAgICAvLyB0aGUgc2NvcGUuCmBgYAoKRWl0aGVyIHdheSwgaXQgc2hvdWxkIHdvcmsgZmluZSB3aXRoIG91ciBwcmV2aW91cyBjb2RlOgoKYGBgZWRpdGlvbjIwMTgKc3RydWN0IFR5cGUodTMyKTsKCmVudW0gRm9vIHsKICAgIEJhcih1MzIpLAp9CnVzZSBGb286Oio7CgpsZXQgVHlwZSh4KSA9IFR5cGUoMTIpOyAvLyBvayEKbWF0Y2ggVHlwZSgxMikgewogICAgVHlwZSh4KSA9PiB7fSAvLyBvayEKICAgIF8gPT4ge30KfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////B+YF5gUAAQDmBQCiaCacBAAArAgAAACtCAAAvQIOBgAAqwgCBQEEU29tZQEBAJ8OAAGsCAAAvQIOBgACqwgAAQCoAiQGAACqCAEBAJ8OAAIAqQISmwQAnw4FAQVFMDUzMQABHwUFAAEABQCoAiQGAACqCAEBAaQOAAGrCAAA0WgmngQAALEIAAACANFoJp4EAJ8OBQG5BVBhdHRlcm4gYXJtIGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQga2luZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MzIKZW51bSBTdGF0ZSB7CiAgICBTdWNjZWVkZWQsCiAgICBGYWlsZWQoU3RyaW5nKSwKfQoKZm4gcHJpbnRfb25fZmFpbHVyZShzdGF0ZTogJlN0YXRlKSB7CiAgICBtYXRjaCAqc3RhdGUgewogICAgICAgIC8vIGVycm9yOiBleHBlY3RlZCB1bml0IHN0cnVjdCwgdW5pdCB2YXJpYW50IG9yIGNvbnN0YW50LCBmb3VuZCB0dXBsZQogICAgICAgIC8vICAgICAgICB2YXJpYW50IGBTdGF0ZTo6RmFpbGVkYAogICAgICAgIFN0YXRlOjpGYWlsZWQgPT4gcHJpbnRsbiEoIkZhaWxlZCIpLAogICAgICAgIF8gPT4gKCkKICAgIH0KfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBlbnN1cmUgdGhlIG1hdGNoIGFybSBraW5kIGlzIHRoZSBzYW1lIGFzIHRoZSBleHByZXNzaW9uCm1hdGNoZWQuCgpGaXhlZCBleGFtcGxlOgoKYGBgCmVudW0gU3RhdGUgewogICAgU3VjY2VlZGVkLAogICAgRmFpbGVkKFN0cmluZyksCn0KCmZuIHByaW50X29uX2ZhaWx1cmUoc3RhdGU6ICZTdGF0ZSkgewogICAgbWF0Y2ggKnN0YXRlIHsKICAgICAgICBTdGF0ZTo6RmFpbGVkKHJlZiBtc2cpID0+IHByaW50bG4hKCJGYWlsZWQgd2l0aCB7fSIsIG1zZyksCiAgICAgICAgXyA9PiAoKQogICAgfQp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wG5BbkFAAEAuQUA0WgmngQAALAIAAAAsQgAAL0CDgYAAK8IAgUBBFNvbWUBAQCfDgABsAgAAL0CDgYAAq8IAAEAqAIkBgAArggBAQCfDgACAKkCEp0EAJ8OBQEFRTA1MzIAAR8FBQABAAUAqAIkBgAArggBAQGkDgABrwgAAIBpJqAEAAC1CAAAAgCAaSagBACfDgUB4ARBbiBpdGVtIHdoaWNoIGlzbid0IGEgdW5pdCBzdHJ1Y3QsIGEgdmFyaWFudCwgbm9yIGEgY29uc3RhbnQgaGFzIGJlZW4gdXNlZCBhcyBhCm1hdGNoIHBhdHRlcm4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTMzCnN0cnVjdCBUb3J0b2lzZTsKCmltcGwgVG9ydG9pc2UgewogICAgZm4gdHVydGxlKCZzZWxmKSAtPiB1MzIgeyAwIH0KfQoKbWF0Y2ggMHUzMiB7CiAgICBUb3J0b2lzZTo6dHVydGxlID0+IHt9IC8vIEVycm9yIQogICAgXyA9PiB7fQp9CmlmIGxldCBUb3J0b2lzZTo6dHVydGxlID0gMHUzMiB7fSAvLyBTYW1lIGVycm9yIQpgYGAKCklmIHlvdSB3YW50IHRvIG1hdGNoIGFnYWluc3QgYSB2YWx1ZSByZXR1cm5lZCBieSBhIG1ldGhvZCwgeW91IG5lZWQgdG8gYmluZCB0aGUKdmFsdWUgZmlyc3Q6CgpgYGAKc3RydWN0IFRvcnRvaXNlOwoKaW1wbCBUb3J0b2lzZSB7CiAgICBmbiB0dXJ0bGUoJnNlbGYpIC0+IHUzMiB7IDAgfQp9CgptYXRjaCAwdTMyIHsKICAgIHggaWYgeCA9PSBUb3J0b2lzZS50dXJ0bGUoKSA9PiB7fSAvLyBCb3VuZCBpbnRvIGB4YCB0aGVuIHdlIGNvbXBhcmUgaXQhCiAgICBfID0+IHt9Cn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////w/gBOAEAAEA4AQAgGkmoAQAALQIAAAAtQgAAL0CDgYAALMIAgUBBFNvbWUBAQCfDgABtAgAAL0CDgYAArMIAAEAqAIkBgAAsggBAQCfDgACAKkCEp8EAJ8OBQEFRTA1MzMAAR8FBQABAAUAqAIkBgAAsggBAQGkDgABswgAAK9pJqIEAAC5CAAAAgCvaSaiBACfDgUBswVUaGUgYGlubGluZWAgYXR0cmlidXRlIHdhcyBtYWxmb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTM0CiNbaW5saW5lKCldIC8vIGVycm9yOiBleHBlY3RlZCBvbmUgYXJndW1lbnQKcHViIGZuIHNvbWV0aGluZygpIHt9CgpmbiBtYWluKCkge30KYGBgCgpUaGUgcGFyZW50aGVzaXplZCBgaW5saW5lYCBhdHRyaWJ1dGUgcmVxdWlyZXMgdGhlIHBhcmFtZXRlciB0byBiZSBzcGVjaWZpZWQ6CgpgYGAKI1tpbmxpbmUoYWx3YXlzKV0KZm4gc29tZXRoaW5nKCkge30KYGBgCgpvcjoKCmBgYAojW2lubGluZShuZXZlcildCmZuIHNvbWV0aGluZygpIHt9CmBgYAoKQWx0ZXJuYXRpdmVseSwgYSBwYXJlbi1sZXNzIHZlcnNpb24gb2YgdGhlIGF0dHJpYnV0ZSBtYXkgYmUgdXNlZCB0byBoaW50IHRoZQpjb21waWxlciBhYm91dCBpbmxpbmluZyBvcHBvcnR1bml0eToKCmBgYAojW2lubGluZV0KZm4gc29tZXRoaW5nKCkge30KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIFtgaW5saW5lYCBhdHRyaWJ1dGVdW2lubGluZS1hdHRyaWJ1dGVdIHNlY3Rpb24Kb2YgdGhlIFJlZmVyZW5jZS4KCltpbmxpbmUtYXR0cmlidXRlXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvYXR0cmlidXRlcy9jb2RlZ2VuLmh0bWwjdGhlLWlubGluZS1hdHRyaWJ1dGUKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////wOzBbMFAAEAswUAr2kmogQAALgIAAAAuQgAAL0CDgYAALcIAgUBBFNvbWUBAQCfDgABuAgAAL0CDgYAArcIAAEAqAIkBgAAtggBAQCfDgACAKkCEqEEAJ8OBQEFRTA1MzQAAR8FBQABAAUAqAIkBgAAtggBAQGkDgABtwgAAN5pJqQEAAC9CAAAAgDeaSakBACfDgUB6ARBbiB1bmtub3duIGFyZ3VtZW50IHdhcyBnaXZlbiB0byB0aGUgYGlubGluZWAgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzNQojW2lubGluZSh1bmtub3duKV0gLy8gZXJyb3I6IGludmFsaWQgYXJndW1lbnQKcHViIGZuIHNvbWV0aGluZygpIHt9CgpmbiBtYWluKCkge30KYGBgCgpUaGUgYGlubGluZWAgYXR0cmlidXRlIG9ubHkgc3VwcG9ydHMgdHdvIGFyZ3VtZW50czoKCiAqIGFsd2F5cwogKiBuZXZlcgoKQWxsIG90aGVyIGFyZ3VtZW50cyBnaXZlbiB0byB0aGUgYGlubGluZWAgYXR0cmlidXRlIHdpbGwgcmV0dXJuIHRoaXMgZXJyb3IuCkV4YW1wbGU6CgpgYGAKI1tpbmxpbmUobmV2ZXIpXSAvLyBvayEKcHViIGZuIHNvbWV0aGluZygpIHt9CgpmbiBtYWluKCkge30KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIFtgaW5saW5lYCBBdHRyaWJ1dGVdW2lubGluZS1hdHRyaWJ1dGVdIHNlY3Rpb24Kb2YgdGhlIFJlZmVyZW5jZS4KCltpbmxpbmUtYXR0cmlidXRlXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvYXR0cmlidXRlcy9jb2RlZ2VuLmh0bWwjdGhlLWlubGluZS1hdHRyaWJ1dGUKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////x/oBOgEAAEA6AQA3mkmpAQAALwIAAAAvQgAAL0CDgYAALsIAgUBBFNvbWUBAQCfDgABvAgAAL0CDgYAArsIAAEAqAIkBgAAuggBAQCfDgACAKkCEqMEAJ8OBQEFRTA1MzUAAR8FBQABAAUAqAIkBgAAuggBAQGkDgABuwgAAI1qJqYEAADBCAAAAgCNaiamBACfDgUBqQRUaGUgYG5vdGAgY2ZnLXByZWRpY2F0ZSB3YXMgbWFsZm9ybWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzNgojW2NmZyhub3QoKSldIC8vIGVycm9yOiBleHBlY3RlZCAxIGNmZy1wYXR0ZXJuCnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKcHViIGZuIG1haW4oKSB7fQpgYGAKClRoZSBgbm90YCBwcmVkaWNhdGUgZXhwZWN0cyBvbmUgY2ZnLXBhdHRlcm4uIEV4YW1wbGU6CgpgYGAKI1tjZmcobm90KHRhcmdldF9vcyA9ICJsaW51eCIpKV0gLy8gb2shCnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKcHViIGZuIG1haW4oKSB7fQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgY2ZnYCBhdHRyaWJ1dGUsIHJlYWQgdGhlIHNlY3Rpb24gb24KW0NvbmRpdGlvbmFsIENvbXBpbGF0aW9uXVtjb25kaXRpb25hbC1jb21waWxhdGlvbl0gaW4gdGhlIFJlZmVyZW5jZS4KCltjb25kaXRpb25hbC1jb21waWxhdGlvbl06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uLmh0bWwKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////P6kEqQQAAQCpBACNaiamBAAAwAgAAADBCAAAvQIOBgAAvwgCBQEEU29tZQEBAJ8OAAHACAAAvQIOBgACvwgAAQCoAiQGAAC+CAEBAJ8OAAIAqQISpQQAnw4FAQVFMDUzNgABHwUFAAEABQCoAiQGAAC+CAEBAaQOAAG/CAAAvGomqAQAAMUIAAACALxqJqgEAJ8OBQHsBEFuIHVua25vd24gcHJlZGljYXRlIHdhcyB1c2VkIGluc2lkZSB0aGUgYGNmZ2AgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzNwojW2NmZyh1bmtub3duKCkpXSAvLyBlcnJvcjogaW52YWxpZCBwcmVkaWNhdGUgYHVua25vd25gCnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKcHViIGZuIG1haW4oKSB7fQpgYGAKClRoZSBgY2ZnYCBhdHRyaWJ1dGUgc3VwcG9ydHMgb25seSB0aHJlZSBraW5kcyBvZiBwcmVkaWNhdGVzOgoKICogYW55CiAqIGFsbAogKiBub3QKCkV4YW1wbGU6CgpgYGAKI1tjZmcobm90KHRhcmdldF9vcyA9ICJsaW51eCIpKV0gLy8gb2shCnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKcHViIGZuIG1haW4oKSB7fQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgY2ZnYCBhdHRyaWJ1dGUsIHJlYWQgdGhlIHNlY3Rpb24gb24KW0NvbmRpdGlvbmFsIENvbXBpbGF0aW9uXVtjb25kaXRpb25hbC1jb21waWxhdGlvbl0gaW4gdGhlIFJlZmVyZW5jZS4KCltjb25kaXRpb25hbC1jb21waWxhdGlvbl06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uLmh0bWwKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8D7ATsBAABAOwEALxqJqgEAADECAAAAMUIAAC9Ag4GAADDCAIFAQRTb21lAQEAnw4AAcQIAAC9Ag4GAALDCAABAKgCJAYAAMIIAQEAnw4AAgCpAhKnBACfDgUBBUUwNTM3AAEfBQUAAQAFAKgCJAYAAMIIAQEBpA4AAcMIAADraiaqBAAAyQgAAAIA62omqgQAnw4FAcEEQXR0cmlidXRlIGNvbnRhaW5zIHNhbWUgbWV0YSBpdGVtIG1vcmUgdGhhbiBvbmNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzOAojW2RlcHJlY2F0ZWQoCiAgICBzaW5jZT0iMS4wLjAiLAogICAgbm90ZT0iRmlyc3QgZGVwcmVjYXRpb24gbm90ZS4iLAogICAgbm90ZT0iU2Vjb25kIGRlcHJlY2F0aW9uIG5vdGUuIiAvLyBlcnJvcjogbXVsdGlwbGUgc2FtZSBtZXRhIGl0ZW0KKV0KZm4gZGVwcmVjYXRlZF9mdW5jdGlvbigpIHt9CmBgYAoKTWV0YSBpdGVtcyBhcmUgdGhlIGtleS12YWx1ZSBwYWlycyBpbnNpZGUgb2YgYW4gYXR0cmlidXRlLiBFYWNoIGtleSBtYXkgb25seSBiZQp1c2VkIG9uY2UgaW4gZWFjaCBhdHRyaWJ1dGUuCgpUbyBmaXggdGhlIHByb2JsZW0sIHJlbW92ZSBhbGwgYnV0IG9uZSBvZiB0aGUgbWV0YSBpdGVtcyB3aXRoIHRoZSBzYW1lIGtleS4KCkV4YW1wbGU6CgpgYGAKI1tkZXByZWNhdGVkKAogICAgc2luY2U9IjEuMC4wIiwKICAgIG5vdGU9IkZpcnN0IGRlcHJlY2F0aW9uIG5vdGUuIgopXQpmbiBkZXByZWNhdGVkX2Z1bmN0aW9uKCkge30KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BAcEEwQQAAQDBBADraiaqBAAAyAgAAADJCAAAvQIOBgAAxwgCBQEEU29tZQEBAJ8OAAHICAAAvQIOBgACxwgAAQCoAiQGAADGCAEBAJ8OAAIAqQISqQQAnw4FAQVFMDUzOAABHwUFAAEABQCoAiQGAADGCAEBAaQOAAHHCAAAmmsmrAQAAM0IAAACAJprJqwEAJ8OBQHrCUFuIGludmFsaWQgbWV0YS1pdGVtIHdhcyB1c2VkIGluc2lkZSBhbiBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTM5CiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1tydXN0Y19kZXByZWNhdGVkKHJlYXNvbildIC8vIGVycm9yIQojW3Vuc3RhYmxlKGZlYXR1cmUgPSAiZGVwcmVjYXRlZF9mbiIsIGlzc3VlID0gIjEyMyIpXQpmbiBkZXByZWNhdGVkKCkge30KCiNbdW5zdGFibGUoZmVhdHVyZSA9ICJ1bnN0YWJsZV9zdHJ1Y3QiLCBpc3N1ZSldIC8vIGVycm9yIQpzdHJ1Y3QgVW5zdGFibGU7CgojW3J1c3RjX2NvbnN0X3Vuc3RhYmxlKGZlYXR1cmUpXSAvLyBlcnJvciEKY29uc3QgZm4gdW5zdGFibGVfZm4oKSB7fQoKI1tzdGFibGUoZmVhdHVyZSA9ICJzdGFibGVfc3RydWN0Iiwgc2luY2UpXSAvLyBlcnJvciEKc3RydWN0IFN0YWJsZTsKCiNbcnVzdGNfY29uc3Rfc3RhYmxlKGZlYXR1cmUpXSAvLyBlcnJvciEKY29uc3QgZm4gc3RhYmxlX2ZuKCkge30KYGBgCgpNZXRhIGl0ZW1zIGFyZSB0aGUga2V5LXZhbHVlIHBhaXJzIGluc2lkZSBvZiBhbiBhdHRyaWJ1dGUuClRvIGZpeCB0aGVzZSBpc3N1ZXMgeW91IG5lZWQgdG8gZ2l2ZSByZXF1aXJlZCBrZXktdmFsdWUgcGFpcnMuCgpgYGAKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3J1c3RjX2RlcHJlY2F0ZWQoc2luY2UgPSAiMS4zOS4wIiwgcmVhc29uID0gInJlYXNvbiIpXSAvLyBvayEKI1t1bnN0YWJsZShmZWF0dXJlID0gImRlcHJlY2F0ZWRfZm4iLCBpc3N1ZSA9ICIxMjMiKV0KZm4gZGVwcmVjYXRlZCgpIHt9CgojW3Vuc3RhYmxlKGZlYXR1cmUgPSAidW5zdGFibGVfc3RydWN0IiwgaXNzdWUgPSAiMTIzIildIC8vIG9rIQpzdHJ1Y3QgVW5zdGFibGU7CgojW3J1c3RjX2NvbnN0X3Vuc3RhYmxlKGZlYXR1cmUgPSAidW5zdGFibGVfZm4iLCBpc3N1ZSA9ICIxMjQiKV0gLy8gb2shCmNvbnN0IGZuIHVuc3RhYmxlX2ZuKCkge30KCiNbc3RhYmxlKGZlYXR1cmUgPSAic3RhYmxlX3N0cnVjdCIsIHNpbmNlID0gIjEuMzkuMCIpXSAvLyBvayEKc3RydWN0IFN0YWJsZTsKCiNbcnVzdGNfY29uc3Rfc3RhYmxlKGZlYXR1cmUgPSAic3RhYmxlX2ZuIiwgc2luY2UgPSAiMS4zOS4wIildIC8vIG9rIQpjb25zdCBmbiBzdGFibGVfZm4oKSB7fQpgYGAKABT///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////AesJ6wkAAQDrCQCaayasBAAAzAgAAADNCAAAvQIOBgAAywgCBQEEU29tZQEBAJ8OAAHMCAAAvQIOBgACywgAAQCoAiQGAADKCAEBAJ8OAAIAqQISqwQAnw4FAQVFMDUzOQABHwUFAAEABQCoAiQGAADKCAEBAaQOAAHLCAAAyWsmrgQAANEIAAACAMlrJq4EAJ8OBQHoBUFuIHVua25vd24gbWV0YSBpdGVtIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU0MQojW2RlcHJlY2F0ZWQoCiAgICBzaW5jZT0iMS4wLjAiLAogICAgLy8gZXJyb3I6IHVua25vd24gbWV0YSBpdGVtCiAgICByZWFzb249IkV4YW1wbGUgaW52YWxpZCBtZXRhIGl0ZW0uIFNob3VsZCBiZSAnbm90ZSciKQpdCmZuIGRlcHJlY2F0ZWRfZnVuY3Rpb24oKSB7fQpgYGAKCk1ldGEgaXRlbXMgYXJlIHRoZSBrZXktdmFsdWUgcGFpcnMgaW5zaWRlIG9mIGFuIGF0dHJpYnV0ZS4gVGhlIGtleXMgcHJvdmlkZWQKbXVzdCBiZSBvbmUgb2YgdGhlIHZhbGlkIGtleXMgZm9yIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlLgoKVG8gZml4IHRoZSBwcm9ibGVtLCBlaXRoZXIgcmVtb3ZlIHRoZSB1bmtub3duIG1ldGEgaXRlbSwgb3IgcmVuYW1lIGl0IGlmIHlvdQpwcm92aWRlZCB0aGUgd3JvbmcgbmFtZS4KCkluIHRoZSBlcnJvbmVvdXMgY29kZSBleGFtcGxlIGFib3ZlLCB0aGUgd3JvbmcgbmFtZSB3YXMgcHJvdmlkZWQsIHNvIGNoYW5naW5nCnRvIGEgY29ycmVjdCBvbmUgaXQgd2lsbCBmaXggdGhlIGVycm9yLiBFeGFtcGxlOgoKYGBgCiNbZGVwcmVjYXRlZCgKICAgIHNpbmNlPSIxLjAuMCIsCiAgICBub3RlPSJUaGlzIGlzIGEgdmFsaWQgbWV0YSBpdGVtIGZvciB0aGUgZGVwcmVjYXRlZCBhdHRyaWJ1dGUuIgopXQpmbiBkZXByZWNhdGVkX2Z1bmN0aW9uKCkge30KYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////x/oBegFAAEA6AUAyWsmrgQAANAI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IiBzZWN0aW9uXSBvZiB0aGUgUnVzdG9ub21pY29uLgoKWyJBbHRlcm5hdGl2ZSBSZXByZXNlbnRhdGlvbnMiIHNlY3Rpb25dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL25vbWljb24vb3RoZXItcmVwcnMuaHRtbAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEPhAWEBQABAIQFANZsJrQEAADcCAAAAN0IAAC9Ag4GAADbCAIFAQRTb21lAQEAnw4AAdwIAAC9Ag4GAALbCAABAKgCJAYAANoIAQEAnw4AAgCpAhKzBACfDgUBBUUwNTUyAAEfBQUAAQAFAKgCJAYAANoIAQEBpA4AAdsIAACFbSa2BAAA4QgAAAIAhW0mtgQAnw4FAdYDRmVhdHVyZSBhdHRyaWJ1dGVzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIG5pZ2h0bHkgcmVsZWFzZSBjaGFubmVsLiBTdGFibGUgb3IKYmV0YSBjb21waWxlcnMgd2lsbCBub3QgY29tcGx5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGlnbm9yZSAoZGVwZW5kcyBvbiByZWxlYXNlIGNoYW5uZWwpCiMhW2ZlYXR1cmUobm9uX2FzY2lpX2lkZW50cyldIC8vIGVycm9yOiBgIyFbZmVhdHVyZV1gIG1heSBub3QgYmUgdXNlZCBvbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHN0YWJsZSByZWxlYXNlIGNoYW5uZWwKYGBgCgpJZiB5b3UgbmVlZCB0aGUgZmVhdHVyZSwgbWFrZSBzdXJlIHRvIHVzZSBhIG5pZ2h0bHkgcmVsZWFzZSBvZiB0aGUgY29tcGlsZXIKKGJ1dCBiZSB3YXJuZWQgdGhhdCB0aGUgZmVhdHVyZSBtYXkgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGluIHRoZSBmdXR1cmUpLgoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8B1gPWAwABANYDAIVtJrYEAADgCAAAAOEIAAC9Ag4GAADfCAIFAQRTb21lAQEAnw4AAeAIAAC9Ag4GAALfCAABAKgCJAYAAN4IAQEAnw4AAgCpAhK1BACfDgUBBUUwNTU0AAEfBQUAAQAFAKgCJAYAAN4IAQEBpA4AAd8IAAC0bSa4BAAA5QgAAAIAtG0muAQAnw4FAeoCVGhlIGBmZWF0dXJlYCBhdHRyaWJ1dGUgd2FzIGJhZGx5IGZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NTYKIyFbZmVhdHVyZShmb29fYmFyX2JheiwgZm9vKGJhciksIGZvbyA9ICJiYXoiLCBmb28pXSAvLyBlcnJvciEKIyFbZmVhdHVyZV0gLy8gZXJyb3IhCiMhW2ZlYXR1cmUgPSAiZm9vIl0gLy8gZXJyb3IhCmBgYAoKVGhlIGBmZWF0dXJlYCBhdHRyaWJ1dGUgb25seSBhY2NlcHQgYSAiZmVhdHVyZSBmbGFnIiBhbmQgY2FuIG9ubHkgYmUgdXNlZCBvbgpuaWdodGx5LiBFeGFtcGxlOgoKYGBgaWdub3JlIChvbmx5IHdvcmtzIGluIG5pZ2h0bHkpCiMhW2ZlYXR1cmUoZmxhZyldCmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B//////9/6gLqAgABAOoCALRtJrgEAADkCAAAAOUIAAC9Ag4GAADjCAIFAQRTb21lAQEAnw4AAeQIAAC9Ag4GAALjCAABAKgCJAYAAOIIAQEAnw4AAgCpAhK3BACfDgUBBUUwNTU2AAEfBQUAAQAFAKgCJAYAAOIIAQEBpA4AAeMIAADjbSa6BAAA6QgAAAIA420mugQAnw4FAdYBQSBmZWF0dXJlIGF0dHJpYnV0ZSBuYW1lZCBhIGZlYXR1cmUgdGhhdCBoYXMgYmVlbiByZW1vdmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU1NwojIVtmZWF0dXJlKG1hbmFnZWRfYm94ZXMpXSAvLyBlcnJvcjogZmVhdHVyZSBoYXMgYmVlbiByZW1vdmVkCmBgYAoKRGVsZXRlIHRoZSBvZmZlbmRpbmcgZmVhdHVyZSBhdHRyaWJ1dGUuCgAE////////////Af///////////wH///////////8B////AdYB1gEAAQDWAQDjbSa6BAAA6AgAAADpCAAAvQIOBgAA5wgCBQEEU29tZQEBAJ8OAAHoCAAAvQIOBgAC5wgAAQCoAiQGAADmCAEBAJ8OAAIAqQISuQQAnw4FAQVFMDU1NwABHwUFAAEABQCoAiQGAADmCAEBAaQOAAHnCAAAkm4mvAQAAO0IAAACAJJuJrwEAJ8OBQGlA0FuIHVua25vd24gZmllbGQgd2FzIHNwZWNpZmllZCBpbnRvIGFuIGVudW0ncyBzdHJ1Y3R1cmUgdmFyaWFudC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NTkKZW51bSBGaWVsZCB7CiAgICBGb29sIHsgeDogdTMyIH0sCn0KCmxldCBzID0gRmllbGQ6OkZvb2wgeyBqb2tlOiAwIH07Ci8vIGVycm9yOiBzdHJ1Y3QgdmFyaWFudCBgRmllbGQ6OkZvb2xgIGhhcyBubyBmaWVsZCBuYW1lZCBgam9rZWAKYGBgCgpWZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgZmllbGQncyBuYW1lIG9yIHRoYXQgdGhlIGZpZWxkIGV4aXN0cy4gRXhhbXBsZToKCmBgYAplbnVtIEZpZWxkIHsKICAgIEZvb2wgeyBqb2tlOiB1MzIgfSwKfQoKbGV0IHMgPSBGaWVsZDo6Rm9vbCB7IGpva2U6IDAgfTsgLy8gb2shCmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////A6UDpQMAAQClAwCSbia8BAAA7AgAAADtCAAAvQIOBgAA6wgCBQEEU29tZQEBAJ8OAAHsCAAAvQIOBgAC6wgAAQCoAiQGAADqCAEBAJ8OAAIAqQISuwQAnw4FAQVFMDU1OQABHwUFAAEABQCoAiQGAADqCAEBAaQOAAHrCAAAwW4mvgQAAPEIAAACAMFuJr4EAJ8OBQGkA0FuIHVua25vd24gZmllbGQgd2FzIHNwZWNpZmllZCBpbnRvIGEgc3RydWN0dXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2MApzdHJ1Y3QgU2ltYmEgewogICAgbW90aGVyOiB1MzIsCn0KCmxldCBzID0gU2ltYmEgeyBtb3RoZXI6IDEsIGZhdGhlcjogMCB9OwovLyBlcnJvcjogc3RydWN0dXJlIGBTaW1iYWAgaGFzIG5vIGZpZWxkIG5hbWVkIGBmYXRoZXJgCmBgYAoKVmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIGZpZWxkJ3MgbmFtZSBvciB0aGF0IHRoZSBmaWVsZCBleGlzdHMuIEV4YW1wbGU6CgpgYGAKc3RydWN0IFNpbWJhIHsKICAgIG1vdGhlcjogdTMyLAogICAgZmF0aGVyOiB1MzIsCn0KCmxldCBzID0gU2ltYmEgeyBtb3RoZXI6IDEsIGZhdGhlcjogMCB9OyAvLyBvayEKYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8BpAOkAwABAKQDAMFuJr4EAADwCAAAAPEIAAC9Ag4GAADvCAIFAQRTb21lAQEAnw4AAfAIAAC9Ag4GAALvCAABAKgCJAYAAO4IAQEAnw4AAgCpAhK9BACfDgUBBUUwNTYwAAEfBQUAAQAFAKgCJAYAAO4IAQEBpA4AAe8IAADwbibABAAA9QgAAAIA8G4mwAQAnw4FAZIEQSBub24taWRlbnQgb3Igbm9uLXdpbGRjYXJkIHBhdHRlcm4gaGFzIGJlZW4gdXNlZCBhcyBhIHBhcmFtZXRlciBvZiBhIGZ1bmN0aW9uCnBvaW50ZXIgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NjEKdHlwZSBBMSA9IGZuKG11dCBwYXJhbTogdTgpOyAvLyBlcnJvciEKdHlwZSBBMiA9IGZuKCZwYXJhbTogdTMyKTsgLy8gZXJyb3IhCmBgYAoKV2hlbiB1c2luZyBhbiBhbGlhcyBvdmVyIGEgZnVuY3Rpb24gdHlwZSwgeW91IGNhbm5vdCBlLmcuIGRlbm90ZSBhIHBhcmFtZXRlciBhcwpiZWluZyBtdXRhYmxlLgoKVG8gZml4IHRoZSBpc3N1ZSwgcmVtb3ZlIHBhdHRlcm5zIChgX2AgaXMgYWxsb3dlZCB0aG91Z2gpLiBFeGFtcGxlOgoKYGBgCnR5cGUgQTEgPSBmbihwYXJhbTogdTgpOyAvLyBvayEKdHlwZSBBMiA9IGZuKF86IHUzMik7IC8vIG9rIQpgYGAKCllvdSBjYW4gYWxzbyBvbWl0IHRoZSBwYXJhbWV0ZXIgbmFtZToKCmBgYAp0eXBlIEEzID0gZm4oaTE2KTsgLy8gb2shCmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8PkgSSBAABAJIEAPBuJsAEAAD0CAAAAPUIAAC9Ag4GAADzCAIFAQRTb21lAQEAnw4AAfQIAAC9Ag4GAALzCAABAKgCJAYAAPIIAQEAnw4AAgCpAhK/BACfDgUBBUUwNTYxAAEfBQUAAQAFAKgCJAYAAPIIAQEBpA4AAfMIAACfbybCBAAA+QgAAAIAn28mwgQAnw4FAYQGQWJzdHJhY3QgcmV0dXJuIHR5cGVzICh3cml0dGVuIGBpbXBsIFRyYWl0YCBmb3Igc29tZSB0cmFpdCBgVHJhaXRgKSBhcmUgb25seQphbGxvd2VkIGFzIGZ1bmN0aW9uIGFuZCBpbmhlcmVudCBpbXBsIHJldHVybiB0eXBlcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NjIKZm4gbWFpbigpIHsKICAgIGxldCBjb3VudF90b190ZW46IGltcGwgSXRlcmF0b3I8SXRlbT11c2l6ZT4gPSAwLi4xMDsKICAgIC8vIGVycm9yOiBgaW1wbCBUcmFpdGAgbm90IGFsbG93ZWQgb3V0c2lkZSBvZiBmdW5jdGlvbiBhbmQgaW5oZXJlbnQgbWV0aG9kCiAgICAvLyAgICAgICAgcmV0dXJuIHR5cGVzCiAgICBmb3IgaSBpbiBjb3VudF90b190ZW4gewogICAgICAgIHByaW50bG4hKCJ7fSIsIGkpOwogICAgfQp9CmBgYAoKTWFrZSBzdXJlIGBpbXBsIFRyYWl0YCBvbmx5IGFwcGVhcnMgaW4gcmV0dXJuLXR5cGUgcG9zaXRpb24uCgpgYGAKZm4gY291bnRfdG9fbihuOiB1c2l6ZSkgLT4gaW1wbCBJdGVyYXRvcjxJdGVtPXVzaXplPiB7CiAgICAwLi5uCn0KCmZuIG1haW4oKSB7CiAgICBmb3IgaSBpbiBjb3VudF90b19uKDEwKSB7ICAvLyBvayEKICAgICAgICBwcmludGxuISgie30iLCBpKTsKICAgIH0KfQpgYGAKClNlZSBbUkZDIDE1MjJdIGZvciBtb3JlIGRldGFpbHMuCgpbUkZDIDE1MjJdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8xNTIyLWNvbnNlcnZhdGl2ZS1pbXBsLXRyYWl0Lm1kCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BD4QGhAYAAQCEBgCfbybCBAAA+AgAAAD5CAAAvQIOBgAA9wgCBQEEU29tZQEBAJ8OAAH4CAAAvQIOBgAC9wgAAQCoAiQGAAD2CAEBAJ8OAAIAqQISwQQAnw4FAQVFMDU2MgABHwUFAAEABQCoAiQGAAD2CAEBAaQOAAH3CAAAzm8mxAQAAP0IAAACAM5vJsQEAJ8OBQG/A0EgbGl0ZXJhbCB3YXMgdXNlZCBpbiBhIGJ1aWx0LWluIGF0dHJpYnV0ZSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBsaXRlcmFscy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NjUKI1tyZXByKCJDIildIC8vIGVycm9yOiBtZXRhIGl0ZW0gaW4gYHJlcHJgIG11c3QgYmUgYW4gaWRlbnRpZmllcgpzdHJ1Y3QgUmVwciB7fQoKZm4gbWFpbigpIHt9CmBgYAoKTGl0ZXJhbHMgaW4gYXR0cmlidXRlcyBhcmUgbmV3IGFuZCBsYXJnZWx5IHVuc3VwcG9ydGVkIGluIGJ1aWx0LWluIGF0dHJpYnV0ZXMuCldvcmsgdG8gc3VwcG9ydCBsaXRlcmFscyB3aGVyZSBhcHByb3ByaWF0ZSBpcyBvbmdvaW5nLiBUcnkgdXNpbmcgYW4gdW5xdW90ZWQKbmFtZSBpbnN0ZWFkOgoKYGBgCiNbcmVwcihDKV0gLy8gb2shCnN0cnVjdCBSZXByIHt9CgpmbiBtYWluKCkge30KYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////9/vwO/AwABAL8DAM5vJsQEAAD8CAAAAP0IAAC9Ag4GAAD7CAIFAQRTb21lAQEAnw4AAfwIAAC9Ag4GAAL7CAABAKgCJAYAAPoIAQEAnw4AAgCpAhLDBACfDgUBBUUwNTY1AAEfBQUAAQAFAKgCJAYAAPoIAQEBpA4AAfsIAAD9bybGBAAAgQkAAAIA/W8mxgQAnw4FAa8DQ29uZmxpY3RpbmcgcmVwcmVzZW50YXRpb24gaGludHMgaGF2ZSBiZWVuIHVzZWQgb24gYSBzYW1lIGl0ZW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTY2CiNbcmVwcih1MzIsIHU2NCldCmVudW0gUmVwciB7IEEgfQpgYGAKCkluIG1vc3QgY2FzZXMgKGlmIG5vdCBhbGwpLCB1c2luZyBqdXN0IG9uZSByZXByZXNlbnRhdGlvbiBoaW50IGlzIG1vcmUgdGhhbgplbm91Z2guIElmIHlvdSB3YW50IHRvIGhhdmUgYSByZXByZXNlbnRhdGlvbiBoaW50IGRlcGVuZGluZyBvbiB0aGUgY3VycmVudAphcmNoaXRlY3R1cmUsIHVzZSBgY2ZnX2F0dHJgLiBFeGFtcGxlOgoKYGBgCiNbY2ZnX2F0dHIobGludXgsIHJlcHIodTMyKSldCiNbY2ZnX2F0dHIobm90KGxpbnV4KSwgcmVwcih1NjQpKV0KZW51bSBSZXByIHsgQSB9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////x+vA68DAAEArwMA/W8mxgQAAIAJAAAAgQkAAL0CDgYAAP8IAgUBBFNvbWUBAQCfDgABgAkAAL0CDgYAAv8IAAEAqAIkBgAA/ggBAQCfDgACAKkCEsUEAJ8OBQEFRTA1NjYAAR8FBQABAAUAqAIkBgAA/ggBAQGkDgAB/wgAAKxwJsgEAACFCQAAAgCscCbIBACfDgUByQNHZW5lcmljcyBoYXZlIGJlZW4gdXNlZCBvbiBhbiBhdXRvIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2NwojIVtmZWF0dXJlKG9wdGluX2J1aWx0aW5fdHJhaXRzKV0KCmF1dG8gdHJhaXQgR2VuZXJpYzxUPiB7fSAvLyBlcnJvciEKIyBmbiBtYWluKCkge30KYGBgCgpTaW5jZSBhbiBhdXRvIHRyYWl0IGlzIGltcGxlbWVudGVkIG9uIGFsbCBleGlzdGluZyB0eXBlcywgdGhlCmNvbXBpbGVyIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGluZmVyIHRoZSB0eXBlcyBvZiB0aGUgdHJhaXQncyBnZW5lcmljCnBhcmFtZXRlcnMuCgpUbyBmaXggdGhpcyBpc3N1ZSwganVzdCByZW1vdmUgdGhlIGdlbmVyaWNzOgoKYGBgCiMhW2ZlYXR1cmUob3B0aW5fYnVpbHRpbl90cmFpdHMpXQoKYXV0byB0cmFpdCBHZW5lcmljIHt9IC8vIG9rIQojIGZuIG1haW4oKSB7fQpgYGAKAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/wPJA8kDAAEAyQMArHAmyAQAAIQJAAAAhQkAAL0CDgYAAIMJAgUBBFNvbWUBAQCfDgABhAkAAL0CDgYAAoMJAAEAqAIkBgAAggkBAQCfDgACAKkCEscEAJ8OBQEFRTA1NjcAAR8FBQABAAUAqAIkBgAAggkBAQGkDgABgwkAANtwJsoEAACJCQAAAgDbcCbKBACfDgUBvARBIHN1cGVyIHRyYWl0IGhhcyBiZWVuIGFkZGVkIHRvIGFuIGF1dG8gdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTY4CiMhW2ZlYXR1cmUob3B0aW5fYnVpbHRpbl90cmFpdHMpXQoKYXV0byB0cmFpdCBCb3VuZCA6IENvcHkge30gLy8gZXJyb3IhCgpmbiBtYWluKCkge30KYGBgCgpTaW5jZSBhbiBhdXRvIHRyYWl0IGlzIGltcGxlbWVudGVkIG9uIGFsbCBleGlzdGluZyB0eXBlcywgYWRkaW5nIGEgc3VwZXIgdHJhaXQKd291bGQgZmlsdGVyIG91dCBhIGxvdCBvZiB0aG9zZSB0eXBlcy4gSW4gdGhlIGN1cnJlbnQgZXhhbXBsZSwgYWxtb3N0IG5vbmUgb2YKYWxsIHRoZSBleGlzdGluZyB0eXBlcyBjb3VsZCBpbXBsZW1lbnQgYEJvdW5kYCBiZWNhdXNlIHZlcnkgZmV3IG9mIHRoZW0gaGF2ZSB0aGUKYENvcHlgIHRyYWl0LgoKVG8gZml4IHRoaXMgaXNzdWUsIGp1c3QgcmVtb3ZlIHRoZSBzdXBlciB0cmFpdDoKCmBgYAojIVtmZWF0dXJlKG9wdGluX2J1aWx0aW5fdHJhaXRzKV0KCmF1dG8gdHJhaXQgQm91bmQge30gLy8gb2shCgpmbiBtYWluKCkge30KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////w+8BLwEAAEAvAQA23AmygQAAIgJAAAAiQkAAL0CDgYAAIcJAgUBBFNvbWUBAQCfDgABiAkAAL0CDgYAAocJAAEAqAIkBgAAhgkBAQCfDgACAKkCEskEAJ8OBQEFRTA1NjgAAR8FBQABAAUAqAIkBgAAhgkBAQGkDgABhwkAAIpxJswEAACNCQAAAgCKcSbMBACfDgUBxARJZiBhbiBpbXBsIGhhcyBhIGdlbmVyaWMgcGFyYW1ldGVyIHdpdGggdGhlIGAjW21heV9kYW5nbGVdYCBhdHRyaWJ1dGUsIHRoZW4KdGhhdCBpbXBsIG11c3QgYmUgZGVjbGFyZWQgYXMgYW4gYHVuc2FmZSBpbXBsYC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21w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b29wczoKCmBgYAojIGxldCBtdXQgaSA9IDE7CiMgZm4gc2F0aXNmaWVkKG46IHVzaXplKSAtPiBib29sIHsgbiAlIDIzID09IDAgfQpsZXQgcmVzdWx0ID0gbG9vcCB7IC8vIFRoaXMgaXMgbm93IGEgImxvb3AiIGxvb3AuCiAgICBpZiBzYXRpc2ZpZWQoaSkgewogICAgICAgIGJyZWFrIDIgKiBpOyAvLyBvayEKICAgIH0KICAgIGkgKz0gMTsKfTsKYGBgCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/3+OBo4GAAEAjgYA6HEm0AQAAJQJAAAAlQkAAL0CDgYAAJMJAgUBBFNvbWUBAQCfDgABlAkAAL0CDgYAApMJAAEAqAIkBgAAkgkBAQCfDgACAKkCEs8EAJ8OBQEFRTA1NzEAAR8FBQABAAUAqAIkBgAAkgkBAQGkDgABkwkAAJdyJtIEAACZCQAAAgCXcibSBACfDgUBkgNBIHJldHVybiBzdGF0ZW1lbnQgd2FzIGZvdW5kIG91dHNpZGUgb2YgYSBmdW5jdGlvbiBib2R5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU3Mgpjb25zdCBGT086IHUzMiA9IHJldHVybiAwOyAvLyBlcnJvcjogcmV0dXJuIHN0YXRlbWVudCBvdXRzaWRlIG9mIGZ1bmN0aW9uIGJvZHkKCmZuIG1haW4oKSB7fQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCBqdXN0IHJlbW92ZSB0aGUgcmV0dXJuIGtleXdvcmQgb3IgbW92ZSB0aGUgZXhwcmVzc2lvbiBpbnRvIGEKZnVuY3Rpb24uIEV4YW1wbGU6CgpgYGAKY29uc3QgRk9POiB1MzIgPSAwOwoKZm4gc29tZV9mbigpIC0+IHUzMiB7CiAgICByZXR1cm4gRk9POwp9CgpmbiBtYWluKCkgewogICAgc29tZV9mbigpOwp9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//D5IDkgMAAQCSAwCXcibSBAAAmAkAAACZCQAAvQIOBgAAlwkCBQEEU29tZQEBAJ8OAAGYCQAAvQIOBgAClwkAAQCoAiQGAACWCQEBAJ8OAAIAqQIS0QQAnw4FAQVFMDU3MgABHwUFAAEABQCoAiQGAACWCQEBAaQOAAGXCQAAxnIm1AQAAJ0JAAACAMZyJtQEAJ8OBQHQClNvbWV0aGluZyBvdGhlciB0aGFuIGEgdHlwZSBoYXMgYmVlbiB1c2VkIHdoZW4gb25lIHdhcyBleHBlY3RlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNTczCmVudW0gRHJhZ29uIHsKICAgIEJvcm4sCn0KCmZuIG9ibGl2aW9uKCkgLT4gRHJhZ29uOjpCb3JuIHsgLy8gZXJyb3IhCiAgICBEcmFnb246OkJvcm4KfQoKY29uc3QgSE9CQklUOiB1MzIgPSAyOwppbXBsIEhPQkJJVCB7fSAvLyBlcnJvciEKCmVudW0gV2l6YXJkIHsKICAgIEdhbmRhbGYsCiAgICBTYXJ1bWFuLAp9Cgp0cmFpdCBJc2VuZ2FyZCB7CiAgICBmbiB3aXphcmQoXzogV2l6YXJkOjpTYXJ1bWFuKTsgLy8gZXJyb3IhCn0KYGBgCgpJbiBhbGwgdGhlc2UgZXJyb3JzLCBhIHR5cGUgd2FzIGV4cGVjdGVkLiBGb3IgZXhhbXBsZSwgaW4gdGhlIGZpcnN0IGVycm9yLCBpZgp3ZSB3YW50IHRvIHJldHVybiB0aGUgYEJvcm5gIHZhcmlhbnQgZnJvbSB0aGUgYERyYWdvbmAgZW51bSwgd2UgbXVzdCBzZXQgdGhlCmZ1bmN0aW9uIHRvIHJldHVybiB0aGUgZW51bSBhbmQgbm90IGl0cyB2YXJpYW50OgoKYGBgCmVudW0gRHJhZ29uIHsKICAgIEJvcm4sCn0KCmZuIG9ibGl2aW9uKCkgLT4gRHJhZ29uIHsgLy8gb2shCiAgICBEcmFnb246OkJvcm4KfQpgYGAKCkluIHRoZSBzZWNvbmQgZXJyb3IsIHlvdSBjYW4ndCBpbXBsZW1lbnQgc29tZXRoaW5nIG9uIGFuIGl0ZW0sIG9ubHkgb24gdHlwZXMuCldlIHdvdWxkIG5lZWQgdG8gY3JlYXRlIGEgbmV3IHR5cGUgaWYgd2Ugd2FudGVkIHRvIGRvIHNvbWV0aGluZyBzaW1pbGFyOgoKYGBgCnN0cnVjdCBIb2JiaXQodTMyKTsgLy8gd2UgY3JlYXRlIGEgbmV3IHR5cGUKCmNvbnN0IEhPQkJJVDogSG9iYml0ID0gSG9iYml0KDIpOwppbXBsIEhvYmJpdCB7fSAvLyBvayEKYGBgCgpJbiB0aGUgdGhpcmQgY2FzZSwgd2UgdHJpZWQgdG8gb25seSBleHBlY3Qgb25lIHZhcmlhbnQgb2YgdGhlIGBXaXphcmRgIGVudW0sCndoaWNoIGlzIG5vdCBwb3NzaWJsZS4gVG8gbWFrZSB0aGlzIHdvcmssIHdlIG5lZWQgdG8gdXNpbmcgcGF0dGVybiBtYXRjaGluZwpvdmVyIHRoZSBgV2l6YXJkYCBlbnVtOgoKYGBgCmVudW0gV2l6YXJkIHsKICAgIEdhbmRhbGYsCiAgICBTYXJ1bWFuLAp9Cgp0cmFpdCBJc2VuZ2FyZCB7CiAgICBmbiB3aXphcmQodzogV2l6YXJkKSB7IC8vIG9rIQogICAgICAgIG1hdGNoIHcgewogICAgICAgICAgICBXaXphcmQ6OlNhcnVtYW4gPT4gewogICAgICAgICAgICAgICAgLy8gZG8gc29tZXRoaW5nCiAgICAgICAgICAgIH0KICAgICAgICAgICAgXyA9PiB7fSAvLyBpZ25vcmUgZXZlcnl0aGluZyBlbHNlCiAgICAgICAgfQogICAgfQp9CmBgYAoAFv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//A9AK0AoAAQDQCgDGcibUBAAAnAkAAACdCQAAvQIOBgAAmwkCBQEEU29tZQEBAJ8OAAGcCQAAvQIOBgACmwkAAQCoAiQGAACaCQEBAJ8OAAIAqQIS0wQAnw4FAQVFMDU3MwABHwUFAAEABQCoAiQGAACaCQEBAaQOAAGbCQAA9XIm1gQAAKEJAAACAPVyJtYEAJ8OBQGUB1NvbWV0aGluZyBvdGhlciB0aGFuIGEgc3RydWN0LCB2YXJpYW50IG9yIHVuaW9uIGhhcyBiZWVuIHVzZWQgd2hlbiBvbmUgd2FzCmV4cGVjdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU3NAptb2QgTW9yZG9yIHt9CgpsZXQgc2F1cm9uID0gTW9yZG9yIHsgeDogKCkgfTsgLy8gZXJyb3IhCgplbnVtIEphayB7CiAgICBEYXh0ZXIgeyBpOiBpc2l6ZSB9LAp9CgpsZXQgZWNvID0gSmFrOjpEYXh0ZXIgeyBpOiAxIH07Cm1hdGNoIGVjbyB7CiAgICBKYWsgeyBpIH0gPT4ge30gLy8gZXJyb3IhCn0KYGBgCgpJbiBhbGwgdGhlc2UgZXJyb3JzLCBhIHR5cGUgd2FzIGV4cGVjdGVkLiBGb3IgZXhhbXBsZSwgaW4gdGhlIGZpcnN0IGVycm9yLAp3ZSB0cmllZCB0byBpbnN0YW50aWF0ZSB0aGUgYE1vcmRvcmAgbW9kdWxlLCB3aGljaCBpcyBpbXBvc3NpYmxlLiBJZiB5b3Ugd2FudAp0byBpbnN0YW50aWF0ZSBhIHR5cGUgaW5zaWRlIGEgbW9kdWxlLCB5b3UgY2FuIGRvIGl0IGFzIGZvbGxvdzoKCmBgYAptb2QgTW9yZG9yIHsKICAgIHB1YiBzdHJ1Y3QgVGhlUmluZyB7CiAgICAgICAgcHViIHg6IHVzaXplLAogICAgfQp9CgpsZXQgc2F1cm9uID0gTW9yZG9yOjpUaGVSaW5nIHsgeDogMSB9OyAvLyBvayEKYGBgCgpJbiB0aGUgc2Vjb25kIGVycm9yLCB3ZSB0cmllZCB0byBiaW5kIHRoZSBgSmFrYCBlbnVtIGRpcmVjdGx5LCB3aGljaCBpcyBub3QKcG9zc2libGU6IHlvdSBjYW4gb25seSBiaW5kIG9uZSBvZiBpdHMgdmFyaWFudHMuIFRvIGRvIHNvOgoKYGBgCmVudW0gSmFrIHsKICAgIERheHRlciB7IGk6IGlzaXplIH0sCn0KCmxldCBlY28gPSBKYWs6OkRheHRlciB7IGk6IDEgfTsKbWF0Y2ggZWNvIHsKICAgIEphazo6RGF4dGVyIHsgaSB9ID0+IHt9IC8vIG9rIQp9CmBgYAoAD////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8/lAeUBwABAJQHAPVyJtYEAACgCQAAAKEJAAC9Ag4GAACfCQIFAQRTb21lAQEAnw4AAaAJAAC9Ag4GAAKfCQABAKgCJAYAAJ4JAQEAnw4AAgCpAhLVBACfDgUBBUUwNTc0AAEfBQUAAQAFAKgCJAYAAJ4JAQEBpA4AAZ8JAACkcybYBAAApQkAAAIApHMm2AQAnw4FAdgHU29tZXRoaW5nIG90aGVyIHRoYW4gYSB0eXBlIG9yIGFuIGFzc29jaWF0ZWQgdHlwZSB3YXMgZ2l2ZW4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTc1CmVudW0gUmljayB7IE1vcnR5IH0KCmxldCBfOiA8dTggYXMgUmljaz46Ok1vcnR5OyAvLyBlcnJvciEKCnRyYWl0IEFnZSB7CiAgICB0eXBlIEVtcGlyZTsKICAgIGZuIE15dGhvbG9neSgpIHt9Cn0KCmltcGwgQWdlIGZvciB1OCB7CiAgICB0eXBlIEVtcGlyZSA9IHUxNjsKfQoKbGV0IF86IDx1OCBhcyBBZ2U+OjpNeXRob2xvZ3k7IC8vIGVycm9yIQpgYGAKCkluIGJvdGggY2FzZXMsIHdlJ3JlIGRlY2xhcmluZyBhIHZhcmlhYmxlIChjYWxsZWQgYF9gKSBhbmQgd2UncmUgZ2l2aW5nIGl0IGEKdHlwZS4gSG93ZXZlciwgYDx1OCBhcyBSaWNrPjo6TW9ydHlgIGFuZCBgPHU4IGFzIEFnZT46Ok15dGhvbG9neWAgYXJlbid0IHR5cGVzLAp0aGVyZWZvcmUgdGhlIGNvbXBpbGVyIHRocm93cyBhbiBlcnJvci4KCmA8dTggYXMgUmljaz46Ok1vcnR5YCBpcyBhbiBlbnVtIHZhcmlhbnQsIHlvdSBjYW5ub3QgdXNlIGEgdmFyaWFudCBhcyBhIHR5cGUsCnlvdSBoYXZlIHRvIHVzZSB0aGUgZW51bSBkaXJlY3RseToKCmBgYAplbnVtIFJpY2sgeyBNb3J0eSB9CgpsZXQgXzogUmljazsgLy8gb2shCmBgYAoKYDx1OCBhcyBBZ2U+OjpNeXRob2xvZ3lgIGlzIGEgdHJhaXQgbWV0aG9kLCB3aGljaCBpcyBkZWZpbml0ZWx5IG5vdCBhIHR5cGUuCkhvd2V2ZXIsIHRoZSBgQWdlYCB0cmFpdCBwcm92aWRlcyBhbiBhc3NvY2lhdGVkIHR5cGUgYEVtcGlyZWAgd2hpY2ggY2FuIGJlCnVzZWQgYXMgYSB0eXBlOgoKYGBgCnRyYWl0IEFnZSB7CiAgICB0eXBlIEVtcGlyZTsKICAgIGZuIE15dGhvbG9neSgpIHt9Cn0KCmltcGwgQWdlIGZvciB1OCB7CiAgICB0eXBlIEVtcGlyZSA9IHUxNjsKfQoKbGV0IF86IDx1OCBhcyBBZ2U+OjpFbXBpcmU7IC8vIG9rIQpgYGAKABD///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8H2AfYBwABANgHAKRzJtgEAACkCQAAAKUJAAC9Ag4GAACjCQIFAQRTb21lAQEAnw4AAaQJAAC9Ag4GAAKjCQABAKgCJAYAAKIJAQEAnw4AAgCpAhLXBACfDgUBBUUwNTc1AAEfBQUAAQAFAKgCJAYAAKIJAQEBpA4AAaMJAADTcybaBAAAqQkAAAIA03Mm2gQAnw4FAaIDQW4gYXNzb2NpYXRlZCBpdGVtIHdhc24ndCBmb3VuZCBpbiB0aGUgZ2l2ZW4gdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBj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YGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQ+EBIQEAAEAhAQAsXQm3gQAALAJAAAAsQkAAL0CDgYAAK8JAgUBBFNvbWUBAQCfDgABsAkAAL0CDgYAAq8JAAEAqAIkBgAArgkBAQCfDgACAKkCEt0EAJ8OBQEFRTA1NzgAAR8FBQABAAUAqAIkBgAArgkBAQGkDgABrwkAAOB0JuAEAAC1CQAAAgDgdCbgBACfDgUB0wRBIGxvd2VyIHJhbmdlIHdhc24ndCBsZXNzIHRoYW4gdGhlIHVwcGVyIHJhbmdlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU3OQojIVtmZWF0dXJlKGV4Y2x1c2l2ZV9yYW5nZV9wYXR0ZXJuKV0KCmZuIG1haW4oKSB7CiAgICBtYXRjaCA1dTMyIHsKICAgICAgICAvLyBUaGlzIHJhbmdlIGlzIG9rLCBhbGJlaXQgcG9pbnRsZXNzLgogICAgICAgIDEgLi4gMiA9PiB7fQogICAgICAgIC8vIFRoaXMgcmFuZ2UgaXMgZW1wdHksIGFuZCB0aGUgY29tcGlsZXIgY2FuIHRlbGwuCiAgICAgICAgNSAuLiA1ID0+IHt9IC8vIGVycm9yIQogICAgfQp9CmBgYAoKV2hlbiBtYXRjaGluZyBhZ2FpbnN0IGFuIGV4Y2x1c2l2ZSByYW5nZSwgdGhlIGNvbXBpbGVyIHZlcmlmaWVzIHRoYXQgdGhlIHJhbmdlCmlzIG5vbi1lbXB0eS4gRXhjbHVzaXZlIHJhbmdlIHBhdHRlcm5zIGluY2x1ZGUgdGhlIHN0YXJ0IHBvaW50IGJ1dCBub3QgdGhlIGVuZApwb2ludCwgc28gdGhpcyBpcyBlcXVpdmFsZW50IHRvIHJlcXVpcmluZyB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHRvIGJlIGxlc3MKdGhhbiB0aGUgZW5kIG9mIHRoZSByYW5nZS4KAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//x/TBNMEAAEA0wQA4HQm4AQAALQJAAAAtQkAAL0CDgYAALMJAgUBBFNvbWUBAQCfDgABtAkAAL0CDgYAArMJAAEAqAIkBgAAsgkBAQCfDgACAKkCEt8EAJ8OBQEFRTA1NzkAAR8FBQABAAUAqAIkBgAAsgkBAQGkDgABswkAAI91JuIEAAC5CQAAAgCPdSbiBACfDgUBoQNUaGUgYG1haW5gIGZ1bmN0aW9uIHdhcyBpbmNvcnJlY3RseSBkZWNsYXJlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODAKZm4gbWFpbih4OiBpMzIpIHsgLy8gZXJyb3I6IG1haW4gZnVuY3Rpb24gaGFzIHdyb25nIHR5cGUKICAgIHByaW50bG4hKCJ7fSIsIHgpOwp9CmBgYAoKVGhlIGBtYWluYCBmdW5jdGlvbiBwcm90b3R5cGUgc2hvdWxkIG5ldmVyIHRha2UgYXJndW1lbnRzLgpFeGFtcGxlOgoKYGBgCmZuIG1haW4oKSB7CiAgICAvLyB5b3VyIGNvZGUKfQpgYGAKCklmIHlvdSB3YW50IHRvIGdldCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCB1c2UgYHN0ZDo6ZW52OjphcmdzYC4gVG8gZXhpdCB3aXRoIGEKc3BlY2lmaWVkIGV4aXQgY29kZSwgdXNlIGBzdGQ6OnByb2Nlc3M6OmV4aXRgLgoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8foQOhAwABAKEDAI91JuIEAAC4CQAAALkJAAC9Ag4GAAC3CQIFAQRTb21lAQEAnw4AAbgJAAC9Ag4GAAK3CQABAKgCJAYAALYJAQEAnw4AAgCpAhLhBACfDgUBBUUwNTgwAAEfBQUAAQAFAKgCJAYAALYJAQEBpA4AAbcJAAC+dSbkBAAAvQkAAAIAvnUm5AQAnw4FAdMGSW4gYSBgZm5gIHR5cGUsIGEgbGlmZXRpbWUgYXBwZWFycyBvbmx5IGluIHRoZSByZXR1cm4gdHlwZQphbmQgbm90IGluIHRoZSBhcmd1bWVudHMgdHlwZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTgxCmZuIG1haW4oKSB7CiAgICAvLyBIZXJlLCBgJ2FgIGFwcGVhcnMgb25seSBpbiB0aGUgcmV0dXJuIHR5cGU6CiAgICBsZXQgeDogZm9yPCdhPiBmbigpIC0+ICYnYSBpMzI7Cn0KYGBgCgpUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgdGhlIGxpZmV0aW1lIGlzbid0IGNvbnRyYWluZWQgYnkgYW55IG9mIHRoZSBhcmd1bWVudHMsCm1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIGRldGVybWluZSBob3cgbG9uZyBpdCdzIHN1cHBvc2VkIHRvIGxpdmUuCgpUbyBmaXggdGhpcyBpc3N1ZSwgZWl0aGVyIHVzZSB0aGUgbGlmZXRpbWUgaW4gdGhlIGFyZ3VtZW50cywgb3IgdXNlIHRoZQpgJ3N0YXRpY2AgbGlmZXRpbWUuIEV4YW1wbGU6CgpgYGAKZm4gbWFpbigpIHsKICAgIC8vIEhlcmUsIGAnYWAgYXBwZWFycyBvbmx5IGluIHRoZSByZXR1cm4gdHlwZToKICAgIGxldCB4OiBmb3I8J2E+IGZuKCYnYSBpMzIpIC0+ICYnYSBpMzI7CiAgICBsZXQgeTogZm4oKSAtPiAmJ3N0YXRpYyBpMzI7Cn0KYGBgCgpOb3RlOiBUaGUgZXhhbXBsZXMgYWJvdmUgdXNlZCB0byBiZSAoZXJyb25lb3VzbHkpIGFjY2VwdGVkIGJ5IHRoZQpjb21waWxlciwgYnV0IHRoaXMgd2FzIHNpbmNlIGNvcnJlY3RlZC4gU2VlIFtpc3N1ZSAjMzM2ODVdIGZvciBtb3JlCmRldGFpbHMuCgpbaXNzdWUgIzMzNjg1XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy8zMzY4NQoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//x/TBtMGAAEA0wYAvnUm5AQAALwJAAAAvQkAAL0CDgYAALsJAgUBBFNvbWUBAQCfDgABvAkAAL0CDgYAArsJAAEAqAIkBgAAugkBAQCfDgACAKkCEuMEAJ8OBQEFRTA1ODEAAR8FBQABAAUAqAIkBgAAugkBAQGkDgABuwkAAO11JuYEAADBCQAAAgDtdSbmBACfDgUBoAZBIGxpZmV0aW1lIGlzIG9ubHkgcHJlc2VudCBpbiBhbiBhc3NvY2lhdGVkLXR5cGUgYmluZGluZywgYW5kIG5vdCBpbiB0aGUgaW5wdXQKdHlwZXMgdG8gdGhlIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4MgpmbiBiYXI8Rj4odDogRikKICAgIC8vIE5vIHR5cGUgY2FuIHNhdGlzZnkgdGhpcyByZXF1aXJlbWVudCwgc2luY2UgYCdhYCBkb2VzIG5vdAogICAgLy8gYXBwZWFyIGluIGFueSBvZiB0aGUgaW5wdXQgdHlwZXMgKGhlcmUsIGBpMzJgKToKICAgIHdoZXJlIEY6IGZvcjwnYT4gRm4oaTMyKSAtPiBPcHRpb248JidhIGkzMj4Kewp9CgpmbiBtYWluKCkgeyB9CmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIGVpdGhlciB1c2UgdGhlIGxpZmV0aW1lIGluIHRoZSBpbnB1dHMsIG9yIHVzZQpgJ3N0YXRpY2AuIEV4YW1wbGU6CgpgYGAKZm4gYmFyPEYsIEc+KHQ6IEYsIHU6IEcpCiAgICB3aGVyZSBGOiBmb3I8J2E+IEZuKCYnYSBpMzIpIC0+IE9wdGlvbjwmJ2EgaTMyPiwKICAgICAgICAgIEc6IEZuKGkzMikgLT4gT3B0aW9uPCYnc3RhdGljIGkzMj4sCnsKfQoKZm4gbWFpbigpIHsgfQpgYGAKCk5vdGU6IFRoZSBleGFtcGxlcyBhYm92ZSB1c2VkIHRvIGJlIChlcnJvbmVvdXNseSkgYWNjZXB0ZWQgYnkgdGhlCmNvbXBpbGVyLCBidXQgdGhpcyB3YXMgc2luY2UgY29ycmVjdGVkLiBTZWUgW2lzc3VlICMzMzY4NV0gZm9yIG1vcmUKZGV0YWlscy4KCltpc3N1ZSAjMzM2ODVdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzMzNjg1CgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////w+gBqAGAAEAoAYA7XUm5gQAAMAJAAAAwQkAAL0CDgYAAL8JAgUBBFNvbWUBAQCfDgABwAkAAL0CDgYAAr8JAAEAqAIkBgAAvgkBAQCfDgACAKkCEuUEAJ8OBQEFRTA1ODIAAR8FBQABAAUAqAIkBgAAvgkBAQGkDgABvwkAAJx2JugEAADFCQAAAgCcdiboBACfDgUBoQNBIGZpbGUgd2Fzbid0IGZvdW5kIGZvciBhbiBvdXQtb2YtbGluZSBtb2R1bGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTgzCm1vZCBmaWxlX3RoYXRfZG9lc250X2V4aXN0OyAvLyBlcnJvcjogZmlsZSBub3QgZm91bmQgZm9yIG1vZHVsZQoKZm4gbWFpbigpIHt9CmBgYAoKUGxlYXNlIGJlIHN1cmUgdGhhdCBhIGZpbGUgY29ycmVzcG9uZGluZyB0byB0aGUgbW9kdWxlIGV4aXN0cy4gSWYgeW91CndhbnQgdG8gdXNlIGEgbW9kdWxlIG5hbWVkIGBmaWxlX3RoYXRfZG9lc250X2V4aXN0YCwgeW91IG5lZWQgdG8gaGF2ZSBhIGZpbGUKbmFtZWQgYGZpbGVfdGhhdF9kb2VzbnRfZXhpc3QucnNgIG9yIGBmaWxlX3RoYXRfZG9lc250X2V4aXN0L21vZC5yc2AgaW4gdGhlCnNhbWUgZGlyZWN0b3J5LgoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8foQOhAwABAKEDAJx2JugEAADECQAAAMUJAAC9Ag4GAADDCQIFAQRTb21lAQEAnw4AAcQJAAC9Ag4GAALDCQABAKgCJAYAAMIJAQEAnw4AAgCpAhLnBACfDgUBBUUwNTgzAAEfBQUAAQAFAKgCJAYAAMIJAQEBpA4AAcMJAADLdibqBAAAyQkAAAIAy3Ym6gQAnw4FAYgEQSBkb2MgY29tbWVudCB0aGF0IGlzIG5vdCBhdHRhY2hlZCB0byBhbnl0aGluZyBoYXMgYmVlbiBlbmNvdW50ZXJlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODQKdHJhaXQgSXNsYW5kIHsKICAgIGZuIGxvc3QoKTsKCiAgICAvLy8gSSdtIGxvc3QhCn0KYGBgCgpBIGxpdHRsZSByZW1pbmRlcjogYSBkb2MgY29tbWVudCBoYXMgdG8gYmUgcGxhY2VkIGJlZm9yZSB0aGUgaXRlbSBpdCdzIHN1cHBvc2VkCnRvIGRvY3VtZW50LiBTbyBpZiB5b3Ugd2FudCB0byBkb2N1bWVudCB0aGUgYElzbGFuZGAgdHJhaXQsIHlvdSBuZWVkIHRvIHB1dCBhCmRvYyBjb21tZW50IGJlZm9yZSBpdCwgbm90IGluc2lkZSBpdC4gU2FtZSBnb2VzIGZvciB0aGUgYGxvc3RgIG1ldGhvZDogdGhlIGRvYwpjb21tZW50IG5lZWRzIHRvIGJlIGJlZm9yZSBpdDoKCmBgYAovLy8gSSdtIFRIRSBpc2xhbmQhCnRyYWl0IElzbGFuZCB7CiAgICAvLy8gSSdtIGxvc3QhCiAgICBmbiBsb3N0KCk7Cn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/AYgEiAQAAQCIBADLdibqBAAAyAkAAADJCQAAvQIOBgAAxwkCBQEEU29tZQEBAJ8OAAHICQAAvQIOBgACxwkAAQCoAiQGAADGCQEBAJ8OAAIAqQIS6QQAnw4FAQVFMDU4NAABHwUFAAEABQCoAiQGAADGCQEBAaQOAAHHCQAA+nYm7AQAAM0JAAACAPp2JuwEAJ8OBQG5A0EgZG9jdW1lbnRhdGlvbiBjb21tZW50IHRoYXQgZG9lc24ndCBkb2N1bWVudCBhbnl0aGluZyB3YXMgZm91bmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTg1CmZuIG1haW4oKSB7CiAgICAvLyBUaGUgZm9sbG93aW5nIGRvYyBjb21tZW50IHdpbGwgZmFpbDoKICAgIC8vLyBUaGlzIGlzIGEgdXNlbGVzcyBkb2MgY29tbWVudCEKfQpgYGAKCkRvY3VtZW50YXRpb24gY29tbWVudHMgbmVlZCB0byBiZSBmb2xsb3dlZCBieSBpdGVtcywgaW5jbHVkaW5nIGZ1bmN0aW9ucywKdHlwZXMsIG1vZHVsZXMsIGV0Yy4gRXhhbXBsZXM6CgpgYGAKLy8vIEknbSBkb2N1bWVudGluZyB0aGUgZm9sbG93aW5nIHN0cnVjdDoKc3RydWN0IEZvbzsKCi8vLyBJJ20gZG9jdW1lbnRpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKZm4gZm9vKCkge30KYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8BuQO5AwABALkDAPp2JuwEAADMCQAAAM0JAAC9Ag4GAADLCQIFAQRTb21lAQEAnw4AAcwJAAC9Ag4GAALLCQABAKgCJAYAAMoJAQEAnw4AAgCpAhLrBACfDgUBBUUwNTg1AAEfBQUAAQAFAKgCJAYAAMoJAQEBpA4AAcsJAACpdybuBAAA0QkAAAIAqXcm7gQAnw4FAeMEQW4gaW5jbHVzaXZlIHJhbmdlIHdhcyB1c2VkIHdpdGggbm8gZW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4NgpmbiBtYWluKCkgewogICAgbGV0IHRtcCA9IHZlYyFbMCwgMSwgMiwgMywgNCwgNCwgMywgMywgMiwgMV07CiAgICBsZXQgeCA9ICZ0bXBbMS4uPV07IC8vIGVycm9yOiBpbmNsdXNpdmUgcmFuZ2Ugd2FzIHVzZWQgd2l0aCBubyBlbmQKfQpgYGAKCkFuIGluY2x1c2l2ZSByYW5nZSBuZWVkcyBhbiBlbmQgaW4gb3JkZXIgdG8gKmluY2x1ZGUqIGl0LiBJZiB5b3UganVzdCBuZWVkIGEKc3RhcnQgYW5kIG5vIGVuZCwgdXNlIGEgbm9uLWluY2x1c2l2ZSByYW5nZSAod2l0aCBgLi5gKToKCmBgYApmbiBtYWluKCkgewogICAgbGV0IHRtcCA9IHZlYyFbMCwgMSwgMiwgMywgNCwgNCwgMywgMywgMiwgMV07CiAgICBsZXQgeCA9ICZ0bXBbMS4uXTsgLy8gb2shCn0KYGBgCgpPciBwdXQgYW4gZW5kIHRvIHlvdXIgaW5jbHVzaXZlIHJhbmdlOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgdG1wID0gdmVjIVswLCAxLCAyLCAzLCA0LCA0LCAzLCAzLCAyLCAxXTsKICAgIGxldCB4ID0gJnRtcFsxLi49M107IC8vIG9rIQp9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////9/4wTjBAABAOMEAKl3Ju4EAADQCQAAANEJAAC9Ag4GAADPCQIFAQRTb21lAQEAnw4AAdAJAAC9Ag4GAALPCQABAKgCJAYAAM4JAQEAnw4AAgCpAhLtBACfDgUBBUUwNTg2AAEfBQUAAQAFAKgCJAYAAM4JAQEBpA4AAc8JAADYdybwBAAA1QkAAAIA2Hcm8AQAnw4FAesCQSB0eXBlIGhhcyBib3RoIGBwYWNrZWRgIGFuZCBgYWxpZ25gIHJlcHJlc2VudGF0aW9uIGhpbnRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4NwojW3JlcHIocGFja2VkLCBhbGlnbig4KSldIC8vIGVycm9yIQpzdHJ1Y3QgVW1icmVsbGEoaTMyKTsKYGBgCgpZb3UgY2Fubm90IHVzZSBgcGFja2VkYCBhbmQgYGFsaWduYCBoaW50cyBvbiBhIHNhbWUgdHlwZS4gSWYgeW91IHdhbnQgdG8gcGFjayBhCnR5cGUgdG8gYSBnaXZlbiBzaXplLCB5b3Ugc2hvdWxkIHByb3ZpZGUgYSBzaXplIHRvIHBhY2tlZDoKCmBgYAojW3JlcHIocGFja2VkKV0gLy8gb2shCnN0cnVjdCBVbWJyZWxsYShpMzIpOwpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af///////wHrAusCAAEA6wIA2Hcm8AQAANQJAAAA1QkAAL0CDgYAANMJAgUBBFNvbWUBAQCfDgAB1AkAAL0CDgYAAtMJAAEAqAIkBgAA0gkBAQCfDgACAKkCEu8EAJ8OBQEFRTA1ODcAAR8FBQABAAUAqAIkBgAA0gkBAQGkDgAB0wkAAId4JvIEAADZCQAAAgCHeCbyBACfDgUBlARBIHR5cGUgd2l0aCBgcGFja2VkYCByZXByZXNlbnRhdGlvbiBoaW50IGhhcyBhIGZpZWxkIHdpdGggYGFsaWduYApyZXByZXNlbnRhdGlvbiBoaW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4OAojW3JlcHIoYWxpZ24oMTYpKV0Kc3RydWN0IEFsaWduZWQoaTMyKTsKCiNbcmVwcihwYWNrZWQpXSAvLyBlcnJvciEKc3RydWN0IFBhY2tlZChBbGlnbmVkKTsKYGBgCgpKdXN0IGxpa2UgeW91IGNhbm5vdCBoYXZlIGJvdGggYGFsaWduYCBhbmQgYHBhY2tlZGAgcmVwcmVzZW50YXRpb24gaGludHMgb24gYQpzYW1lIHR5cGUsIGEgYHBhY2tlZGAgdHlwZSBjYW5ub3QgY29udGFpbiBhbm90aGVyIHR5cGUgd2l0aCB0aGUgYGFsaWduYApyZXByZXNlbnRhdGlvbiBoaW50LiBIb3dldmVyLCB5b3UgY2FuIGRvIHRoZSBvcHBvc2l0ZToKCmBgYAojW3JlcHIocGFja2VkKV0Kc3RydWN0IFBhY2tlZChpMzIpOwoKI1tyZXByKGFsaWduKDE2KSldIC8vIG9rIQpzdHJ1Y3QgQWxpZ25lZChQYWNrZWQpOwpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//P5QElAQAAQCUBACHeCbyBAAA2AkAAADZCQAAvQIOBgAA1wkCBQEEU29tZQEBAJ8OAAHYCQAAvQIOBgAC1wkAAQCoAiQGAADWCQEBAJ8OAAIAqQIS8QQAnw4FAQVFMDU4OAABHwUFAAEABQCoAiQGAADWCQEBAaQOAAHXCQAAtngm9AQAAN0JAAACALZ4JvQEAJ8OBQGLAlRoZSB2YWx1ZSBvZiBgTmAgdGhhdCB3YXMgc3BlY2lmaWVkIGZvciBgcmVwcihhbGlnbihOKSlgIHdhcyBub3QgYSBwb3dlcgpvZiB0d28sIG9yIHdhcyBncmVhdGVyIHRoYW4gMl4yOS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODkKI1tyZXByKGFsaWduKDE1KSldIC8vIGVycm9yOiBpbnZhbGlkIGByZXByKGFsaWduKWAgYXR0cmlidXRlOiBub3QgYSBwb3dlciBvZiB0d28KZW51bSBGb28gewogICAgQmFyKHU2NCksCn0KYGBgCgAF////////////Af///////////wH///////////8B////////////Af8PiwKLAgABAIsCALZ4JvQEAADcCQAAAN0JAAC9Ag4GAADbCQIFAQRTb21lAQEAnw4AAdwJAAC9Ag4GAALbCQABAKgCJAYAANoJAQEAnw4AAgCpAhLzBACfDgUBBUUwNTg5AAEfBQUAAQAFAKgCJAYAANoJAQEBpA4AAdsJAADleCb2BAAA4QkAAAIA5Xgm9gQAnw4FAeACYGJyZWFrYCBvciBgY29udGludWVgIGtleXdvcmRzIHdlcmUgdXNlZCBpbiBhIGNvbmRpdGlvbiBvZiBhIGB3aGlsZWAgbG9vcAp3aXRob3V0IGEgbGFiZWwuCgpFcnJvbmVvdXMgY29kZSBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTkwCndoaWxlIGJyZWFrIHt9CmBgYAoKYGJyZWFrYCBvciBgY29udGludWVgIG11c3QgaW5jbHVkZSBhIGxhYmVsIHdoZW4gdXNlZCBpbiB0aGUgY29uZGl0aW9uIG9mIGEKYHdoaWxlYCBsb29wLgoKVG8gZml4IHRoaXMsIGFkZCBhIGxhYmVsIHNwZWNpZnlpbmcgd2hpY2ggbG9vcCBpcyBiZWluZyBicm9rZW4gb3V0IG9mOgoKYGBgCidmb286IHdoaWxlIGJyZWFrICdmb28ge30KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH/////D+AC4AIAAQDgAgDleCb2BAAA4AkAAADhCQAAvQIOBgAA3wkCBQEEU29tZQEBAJ8OAAHgCQAAvQIOBgAC3wkAAQCoAiQGAADeCQEBAJ8OAAIAqQIS9QQAnw4FAQVFMDU5MAABHwUFAAEABQCoAiQGAADeCQEBAaQOAAHfCQAAlHkm+AQAAOUJAAACAJR5JvgEAJ8OBQGWFVBlciBbUkZDIDQwMV1bcmZjNDAxXSwgaWYgeW91IGhhdmUgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbiBgZm9vYDoKCmBgYAovLyBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZXhwbGFuYXRpb24sIGFsbCBvZiB0aGVzZQovLyBkaWZmZXJlbnQga2luZHMgb2YgYGZuYCBkZWNsYXJhdGlvbnMgYXJlIGVxdWl2YWxlbnQ6CnN0cnVjdCBTOwpmbiBmb28oeDogUykgeyAvKiAuLi4gKi8gfQojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQpleHRlcm4gIkMiIHsgZm4gZm9vKHg6IFMpOyB9CiMgI1tjZmcoZm9yX2RlbW9uc3RyYXRpb25fb25seSldCmltcGwgUyB7IGZuIGZvbyhzZWxmKSB7IC8qIC4uLiAqLyB9IH0KYGBgCgp0aGUgdHlwZSBvZiBgZm9vYCBpcyAqKm5vdCoqIGBmbihTKWAsIGFzIG9uZSBtaWdodCBleHBlY3QuClJhdGhlciwgaXQgaXMgYSB1bmlxdWUsIHplcm8tc2l6ZWQgbWFya2VyIHR5cGUgd3JpdHRlbiBoZXJlIGFzIGB0eXBlb2YoZm9vKWAuCkhvd2V2ZXIsIGB0eXBlb2YoZm9vKWAgY2FuIGJlIF9jb2VyY2VkXyB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgYGZuKFMpYCwKc28geW91IHJhcmVseSBub3RpY2UgdGhpczoKCmBgYAojIHN0cnVjdCBTOwojIGZuIGZvbyhfOiBTKSB7fQpsZXQgeDogZm4oUykgPSBmb287IC8vIE9LLCBjb2VyY2VzCmBgYAoKVGhlIHJlYXNvbiB0aGF0IHRoaXMgbWF0dGVyIGlzIHRoYXQgdGhlIHR5cGUgYGZuKFMpYCBpcyBub3Qgc3BlY2lmaWMgdG8KYW55IHBhcnRpY3VsYXIgZnVuY3Rpb246IGl0J3MgYSBmdW5jdGlvbiBfcG9pbnRlcl8uIFNvIGNhbGxpbmcgYHgoKWAgcmVzdWx0cwppbiBhIHZpcnR1YWwgY2FsbCwgd2hlcmVhcyBgZm9vKClgIGlzIHN0YXRpY2FsbHkgZGlzcGF0Y2hlZCwgYmVjYXVzZSB0aGUgdHlwZQpvZiBgZm9vYCB0ZWxscyB1cyBwcmVjaXNlbHkgd2hhdCBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuCgpBcyBub3RlZCBhYm92ZSwgY29lcmNpb25zIG1lYW4gdGhhdCBtb3N0IGNvZGUgZG9lc24ndCBoYXZlIHRvIGJlCmNvbmNlcm5lZCB3aXRoIHRoaXMgZGlzdGluY3Rpb24uIEhvd2V2ZXIsIHlvdSBjYW4gdGVsbCB0aGUgZGlmZmVyZW5jZQp3aGVuIHVzaW5nICoqdHJhbnNtdXRlKiogdG8gY29udmVydCBhIGZuIGl0ZW0gaW50byBhIGZuIHBvaW50ZXIuCgpUaGlzIGlzIHNvbWV0aW1lcyBkb25lIGFzIHBhcnQgb2YgYW4gRkZJOgoKYGBgY29tcGlsZV9mYWlsLEUwNTkxCmV4dGVybiAiQyIgZm4gZm9vKHVzZXJkYXRhOiBCb3g8aTMyPikgewogICAgLyogLi4uICovCn0KCiMgZm4gY2FsbGJhY2soXzogZXh0ZXJuICJDIiBmbigqbXV0IGkzMikpIHt9CiMgdXNlIHN0ZDo6bWVtOjp0cmFuc211dGU7CiMgdW5zYWZlIHsKbGV0IGY6IGV4dGVybiAiQyIgZm4oKm11dCBpMzIpID0gdHJhbnNtdXRlKGZvbyk7CmNhbGxiYWNrKGYpOwojIH0KYGBgCgpIZXJlLCB0cmFuc211dGUgaXMgYmVpbmcgdXNlZCB0byBjb252ZXJ0IHRoZSB0eXBlcyBvZiB0aGUgZm4gYXJndW1lbnRzLgpUaGlzIHBhdHRlcm4gaXMgaW5jb3JyZWN0IGJlY2F1c2UsIGJlY2F1c2UgdGhlIHR5cGUgb2YgYGZvb2AgaXMgYSBmdW5jdGlvbgoqKml0ZW0qKiAoYHR5cGVvZihmb28pYCksIHdoaWNoIGlzIHplcm8tc2l6ZWQsIGFuZCB0aGUgdGFyZ2V0IHR5cGUgKGBmbigpYCkKaXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBpcyBub3QgemVyby1zaXplZC4KVGhpcyBwYXR0ZXJuIHNob3VsZCBiZSByZXdyaXR0ZW4uIFRoZXJlIGFyZSBhIGZldyBwb3NzaWJsZSB3YXlzIHRvIGRvIHRoaXM6CgotIGNoYW5nZSB0aGUgb3JpZ2luYWwgZm4gZGVjbGFyYXRpb24gdG8gbWF0Y2ggdGhlIGV4cGVjdGVkIHNpZ25hdHVyZSwKICBhbmQgZG8gdGhlIGNhc3QgaW4gdGhlIGZuIGJvZHkgKHRoZSBwcmVmZXJyZWQgb3B0aW9uKQotIGNhc3QgdGhlIGZuIGl0ZW0gb2YgYSBmbiBwb2ludGVyIGJlZm9yZSBjYWxsaW5nIHRyYW5zbXV0ZSwgYXMgc2hvd24gaGVyZToKCiAgICBgYGAKICAgICMgZXh0ZXJuICJDIiBmbiBmb28oXzogQm94PGkzMj4pIHt9CiAgICAjIHVzZSBzdGQ6Om1lbTo6dHJhbnNtdXRlOwogICAgIyB1bnNhZmUgewogICAgbGV0IGY6IGV4dGVybiAiQyIgZm4oKm11dCBpMzIpID0gdHJhbnNtdXRlKGZvbyBhcyBleHRlcm4gIkMiIGZuKF8pKTsKICAgIGxldCBmOiBleHRlcm4gIkMiIGZuKCptdXQgaTMyKSA9IHRyYW5zbXV0ZShmb28gYXMgdXNpemUpOyAvLyB3b3JrcyB0b28KICAgICMgfQogICAgYGBgCgpUaGUgc2FtZSBhcHBsaWVzIHRvIHRyYW5zbXV0ZXMgdG8gYCptdXQgZm4oKWAsIHdoaWNoIHdlcmUgb2JzZXJ2ZWQgaW4gcHJhY3RpY2UuCk5vdGUgdGhvdWdoIHRoYXQgdXNlIG9mIHRoaXMgdHlwZSBpcyBnZW5lcmFsbHkgaW5jb3JyZWN0LgpUaGUgaW50ZW50aW9uIGlzIHR5cGljYWxseSB0byBkZXNjcmliZSBhIGZ1bmN0aW9uIHBvaW50ZXIsIGJ1dCBqdXN0IGBmbigpYAphbG9uZSBzdWZmaWNlcyBmb3IgdGhhdC4gYCptdXQgZm4oKWAgaXMgYSBwb2ludGVyIHRvIGEgZm4gcG9pbnRlci4KKFNpbmNlIHRoZXNlIHZhbHVlcyBhcmUgdHlwaWNhbGx5IGp1c3QgcGFzc2VkIHRvIEMgY29kZSwgaG93ZXZlciwgdGhpcyByYXJlbHkKbWFrZXMgYSBkaWZmZXJlbmNlIGluIHByYWN0aWNlLikKCltyZmM0MDFdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8wNDAxLWNvZXJjaW9ucy5tZAoAK////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wGWFZYVAAEAlhUAlHkm+AQAAOQJAAAA5QkAAL0CDgYAAOMJAgUBBFNvbWUBAQCfDgAB5AkAAL0CDgYAAuMJAAEAqAIkBgAA4gkBAQCfDgACAKkCEvcEAJ8OBQEFRTA1OTEAAR8FBQABAAUAqAIkBgAA4gkBAQGkDgAB4wkAAMN5JvoEAADpCQAAAgDDeSb6BACfDgUBjwRUaGlzIGVycm9yIG9jY3VycyB3aGVuIHlvdSBkZWZpbmVkIG1ldGhvZHMgb3IgYXNzb2NpYXRlZCBmdW5jdGlvbnMgd2l0aCBzYW1lCm5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTkyCnN0cnVjdCBGb287CgppbXBsIEZvbyB7CiAgICBmbiBiYXIoKSB7fSAvLyBwcmV2aW91cyBkZWZpbml0aW9uIGhlcmUKfQoKaW1wbCBGb28gewogICAgZm4gYmFyKCkge30gLy8gZHVwbGljYXRlIGRlZmluaXRpb24gaGVyZQp9CmBgYAoKQSBzaW1pbGFyIGVycm9yIGlzIEUwMjAxLiBUaGUgZGlmZmVyZW5jZSBpcyB3aGV0aGVyIHRoZXJlIGlzIG9uZSBkZWNsYXJhdGlvbgpibG9jayBvciBub3QuIFRvIGF2b2lkIHRoaXMgZXJyb3IsIHlvdSBtdXN0IGdpdmUgZWFjaCBgZm5gIGEgdW5pcXVlIG5hbWUuCgpgYGAKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIGJhcigpIHt9Cn0KCmltcGwgRm9vIHsKICAgIGZuIGJheigpIHt9IC8vIGRlZmluZSB3aXRoIGRpZmZlcmVudCBuYW1lCn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wGPBI8EAAEAjwQAw3km+gQAAOgJAAAA6QkAAL0CDgYAAOcJAgUBBFNvbWUBAQCfDgAB6AkAAL0CDgYAAucJAAEAqAIkBgAA5gkBAQCfDgACAKkCEvkEAJ8OBQEFRTA1OTIAAR8FBQABAAUAqAIkBgAA5gkBAQGkDgAB5wkAAPJ5JvwEAADtCQAAAgDyeSb8BACfDgUB/QNZb3UgdHJpZWQgdG8gc3VwcGx5IGFuIGBGbmAtYmFzZWQgdHlwZSB3aXRoIGFuIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCnRoYW4gd2hhdCB3YXMgZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTkzCmZuIGZvbzxGOiBGbigpPih4OiBGKSB7IH0KCmZuIG1haW4oKSB7CiAgICAvLyBbRTA1OTNdIGNsb3N1cmUgdGFrZXMgMSBhcmd1bWVudCBidXQgMCBhcmd1bWVudHMgYXJlIHJlcXVpcmVkCiAgICBmb28ofHl8IHsgfSk7Cn0KYGBgCgpZb3UgaGF2ZSB0byBwcm92aWRlIHRoZSBzYW1lIG51bWJlciBvZiBhcmd1bWVudHMgYXMgZXhwZWN0ZWQgYnkgdGhlIGBGbmAtYmFzZWQKdHlwZS4gU28gdG8gZml4IHRoZSBwcmV2aW91cyBleGFtcGxlLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgYHlgIGFyZ3VtZW50OgoKYGBgCmZuIGZvbzxGOiBGbigpPih4OiBGKSB7IH0KCmZuIG1haW4oKSB7CiAgICBmb28ofHwgeyB9KTsgLy8gb2shCn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////H/0D/QMAAQD9AwDyeSb8BAAA7AkAAADtCQAAvQIOBgAA6wkCBQEEU29tZQEBAJ8OAAHsCQAAvQIOBgAC6wkAAQCoAiQGAADqCQEBAJ8OAAIAqQIS+wQAnw4FAQVFMDU5MwABHwUFAAEABQCoAiQGAADqCQEBAaQOAAHrCQAAoXom/gQAAPEJAAACAKF6Jv4EAJ8OBQGTA0Egbm9uLW11dGFibGUgdmFsdWUgd2FzIGFzc2lnbmVkIGEgdmFsdWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk0CnN0cnVjdCBTb2xhclN5c3RlbSB7CiAgICBlYXJ0aDogaTMyLAp9CgpsZXQgc3MgPSBTb2xhclN5c3RlbSB7IGVhcnRoOiAzIH07CnNzLmVhcnRoID0gMjsgLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGRlY2xhcmUgYHNzYCBhcyBtdXRhYmxlIGJ5IHVzaW5nIHRoZSBgbXV0YCBrZXl3b3JkOgoKYGBgCnN0cnVjdCBTb2xhclN5c3RlbSB7CiAgICBlYXJ0aDogaTMyLAp9CgpsZXQgbXV0IHNzID0gU29sYXJTeXN0ZW0geyBlYXJ0aDogMyB9OyAvLyBkZWNsYXJpbmcgYHNzYCBhcyBtdXRhYmxlCnNzLmVhcnRoID0gMjsgLy8gb2shCmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//H5MDkwMAAQCTAwCheib+BAAA8AkAAADxCQAAvQIOBgAA7wkCBQEEU29tZQEBAJ8OAAHwCQAAvQIOBgAC7wkAAQCoAiQGAADuCQEBAJ8OAAIAqQIS/QQAnw4FAQVFMDU5NAABHwUFAAEABQCoAiQGAADuCQEBAaQOAAHvCQAA0HomgAUAAPUJAAACANB6JoAFAJ8OBQHvAiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkNsb3N1cmVzIGNhbm5vdCBtdXRhdGUgaW1tdXRhYmxlIGNhcHR1cmVkIHZhcmlhYmxlcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTQKbGV0IHggPSAzOyAvLyBlcnJvcjogY2xvc3VyZSBjYW5ub3QgYXNzaWduIHRvIGltbXV0YWJsZSBsb2NhbCB2YXJpYWJsZSBgeGAKbGV0IG11dCBjID0gfHwgeyB4ICs9IDEgfTsKYGBgCgpNYWtlIHRoZSB2YXJpYWJsZSBiaW5kaW5nIG11dGFibGU6CgpgYGAKbGV0IG11dCB4ID0gMzsgLy8gb2shCmxldCBtdXQgYyA9IHx8IHsgeCArPSAxIH07CmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B////////H+8C7wIAAQDvAgDQeiaABQAA9AkAAAD1CQAAvQIOBgAA8wkCBQEEU29tZQEBAJ8OAAH0CQAAvQIOBgAC8wkAAQCoAiQGAADyCQEBAJ8OAAIAqQIS/wQAnw4FAQVFMDU5NQABHwUFAAEABQCoAiQGAADyCQEBAaQOAAHzCQAA/3omggUAAPkJAAACAP96JoIFAJ8OBQHwAlRoaXMgZXJyb3Igb2NjdXJzIGJlY2F1c2UgeW91IHRyaWVkIHRvIG11dGFibHkgYm9ycm93IGEgbm9uLW11dGFibGUgdmFyaWFibGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk2CmxldCB4ID0gMTsKbGV0IHkgPSAmbXV0IHg7IC8vIGVycm9yOiBjYW5ub3QgYm9ycm93IG11dGFibHkKYGBgCgpJbiBoZXJlLCBgeGAgaXNuJ3QgbXV0YWJsZSwgc28gd2hlbiB3ZSB0cnkgdG8gbXV0YWJseSBib3Jyb3cgaXQgaW4gYHlgLCBpdApmYWlscy4gVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBuZWVkIHRvIG1ha2UgYHhgIG11dGFibGU6CgpgYGAKbGV0IG11dCB4ID0gMTsKbGV0IHkgPSAmbXV0IHg7IC8vIG9rIQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af///////z/wAvACAAEA8AIA/3omggUAAPgJAAAA+QkAAL0CDgYAAPcJAgUBBFNvbWUBAQCfDgAB+AkAAL0CDgYAAvcJAAEAqAIkBgAA9gkBAQCfDgACAKkCEoEFAJ8OBQEFRTA1OTYAAR8FBQABAAUAqAIkBgAA9gkBAQGkDgAB9wkAAK57JoQFAAD9CQAAAgCueyaEBQCfDgUB/wRUaGlzIGVycm9yIG9jY3VycyBiZWNhdXNlIGEgdmFsdWUgd2FzIGRyb3BwZWQgd2hpbGUgaXQgd2FzIHN0aWxsIGJvcnJvd2VkCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk3CnN0cnVjdCBGb288J2E+IHsKICAgIHg6IE9wdGlvbjwmJ2EgdTMyPiwKfQoKbGV0IG11dCB4ID0gRm9vIHsgeDogTm9uZSB9Owp7CiAgICBsZXQgeSA9IDA7CiAgICB4LnggPSBTb21lKCZ5KTsgLy8gZXJyb3I6IGB5YCBkb2VzIG5vdCBsaXZlIGxvbmcgZW5vdWdoCn0KcHJpbnRsbiEoIns6P30iLCB4LngpOwpgYGAKCkluIGhlcmUsIGB5YCBpcyBkcm9wcGVkIGF0IHRoZSBlbmQgb2YgdGhlIGlubmVyIHNjb3BlLCBidXQgaXQgaXMgYm9ycm93ZWQgYnkKYHhgIHVudGlsIHRoZSBgcHJpbnRsbmAuIFRvIGZpeCB0aGUgcHJldmlvdXMgZXhhbXBsZSwganVzdCByZW1vdmUgdGhlIHNjb3BlCnNvIHRoYXQgYHlgIGlzbid0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgdGhlIHByaW50bG4KCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiBPcHRpb248JidhIHUzMj4sCn0KCmxldCBtdXQgeCA9IEZvbyB7IHg6IE5vbmUgfTsKCmxldCB5ID0gMDsKeC54ID0gU29tZSgmeSk7CgpwcmludGxuISgiezo/fSIsIHgueCk7CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////f/8E/wQAAQD/BACueyaEBQAA/AkAAAD9CQAAvQIOBgAA+wkCBQEEU29tZQEBAJ8OAAH8CQAAvQIOBgAC+wkAAQCoAiQGAAD6CQEBAJ8OAAIAqQISgwUAnw4FAQVFMDU5NwABHwUFAAEABQCoAiQGAAD6CQEBAaQOAAH7CQAA3XsmhgUAAIEKAAACAN17JoYFAJ8OBQGvBFRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYSBtZXRob2QgaXMgdXNlZCBvbiBhIHR5cGUgd2hpY2ggZG9lc24ndCBpbXBsZW1lbnQgaXQ6CgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk5CnN0cnVjdCBNb3V0aDsKCmxldCB4ID0gTW91dGg7CnguY2hvY29sYXRlKCk7IC8vIGVycm9yOiBubyBtZXRob2QgbmFtZWQgYGNob2NvbGF0ZWAgZm91bmQgZm9yIHR5cGUgYE1vdXRoYAogICAgICAgICAgICAgICAvLyAgICAgICAgaW4gdGhlIGN1cnJlbnQgc2NvcGUKYGBgCgpJbiB0aGlzIGNhc2UsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGUgYGNob2NvbGF0ZWAgbWV0aG9kIHRvIGZpeCB0aGUgZXJyb3I6CgpgYGAKc3RydWN0IE1vdXRoOwoKaW1wbCBNb3V0aCB7CiAgICBmbiBjaG9jb2xhdGUoJnNlbGYpIHsgLy8gV2UgaW1wbGVtZW50IHRoZSBgY2hvY29sYXRlYCBtZXRob2QgaGVyZS4KICAgICAgICBwcmludGxuISgiSG1tbSEgSSBsb3ZlIGNob2NvbGF0ZSEiKTsKICAgIH0KfQoKbGV0IHggPSBNb3V0aDsKeC5jaG9jb2xhdGUoKTsgLy8gb2shCmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////H68ErwQAAQCvBADdeyaGBQAAgAoAAACBCgAAvQIOBgAA/wkCBQEEU29tZQEBAJ8OAAGACgAAvQIOBgAC/wkAAQCoAiQGAAD+CQEBAJ8OAAIAqQIShQUAnw4FAQVFMDU5OQABHwUFAAEABQCoAiQGAAD+CQEBAaQOAAH/CQAAjHwmiAUAAIUKAAACAIx8JogFAJ8OBQHTBkFuIHVuYXJ5IG9wZXJhdG9yIHdhcyB1c2VkIG9uIGEgdHlwZSB3aGljaCBkb2Vzbid0IGltcGxlbWVudCBpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MDAKZW51bSBRdWVzdGlvbiB7CiAgICBZZXMsCiAgICBObywKfQoKIVF1ZXN0aW9uOjpZZXM7IC8vIGVycm9yOiBjYW5ub3QgYXBwbHkgdW5hcnkgb3BlcmF0b3IgYCFgIHRvIHR5cGUgYFF1ZXN0aW9uYApgYGAKCkluIHRoaXMgY2FzZSwgYFF1ZXN0aW9uYCB3b3VsZCBuZWVkIHRvIGltcGxlbWVudCB0aGUgYHN0ZDo6b3BzOjpOb3RgIHRyYWl0IGluCm9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIGAhYCBvbiBpdC4gTGV0J3MgaW1wbGVtZW50IGl0OgoKYGBgCnVzZSBzdGQ6Om9wczo6Tm90OwoKZW51bSBRdWVzdGlvbiB7CiAgICBZZXMsCiAgICBObywKfQoKLy8gV2UgaW1wbGVtZW50IHRoZSBgTm90YCB0cmFpdCBvbiB0aGUgZW51bS4KaW1wbCBOb3QgZm9yIFF1ZXN0aW9uIHsKICAgIHR5cGUgT3V0cHV0ID0gYm9vbDsKCiAgICBmbiBub3Qoc2VsZikgLT4gYm9vbCB7CiAgICAgICAgbWF0Y2ggc2VsZiB7CiAgICAgICAgICAgIFF1ZXN0aW9uOjpZZXMgPT4gZmFsc2UsIC8vIElmIHRoZSBgQW5zd2VyYCBpcyBgWWVzYCwgdGhlbiBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlLgogICAgICAgICAgICBRdWVzdGlvbjo6Tm8gPT4gdHJ1ZSwgLy8gQW5kIGhlcmUgd2UgZG8gdGhlIG9wcG9zaXRlLgogICAgICAgIH0KICAgIH0KfQoKYXNzZXJ0X2VxISghUXVlc3Rpb246OlllcywgZmFsc2UpOwphc3NlcnRfZXEhKCFRdWVzdGlvbjo6Tm8sIHRydWUpOwpgYGAKAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8f0wbTBgABANMGAIx8JogFAACECgAAAIUKAAC9Ag4GAACDCgIFAQRTb21lAQEAnw4AAYQKAAC9Ag4GAAKDCgABAKgCJAYAAIIKAQEAnw4AAgCpAhKHBQCfDgUBBUUwNjAwAAEfBQUAAQAFAKgCJAYAAIIKAQEBpA4AAYMKAAC7fCaKBQAAiQoAAAIAu3wmigUAnw4FAcUCTm8gYG1haW5gIGZ1bmN0aW9uIHdhcyBmb3VuZCBpbiBhIGJpbmFyeSBjcmF0ZS4KClRvIGZpeCB0aGlzIGVycm9yLCBhZGQgYSBgbWFpbmAgZnVuY3Rpb246CgpgYGAKZm4gbWFpbigpIHsKICAgIC8vIFlvdXIgcHJvZ3JhbSB3aWxsIHN0YXJ0IGhlcmUuCiAgICBwcmludGxuISgiSGVsbG8gd29ybGQhIik7Cn0KYGBgCgpJZiB5b3UgZG9uJ3Qga25vdyB0aGUgYmFzaWNzIG9mIFJ1c3QsIHlvdSBjYW4gbG9vayBhdCB0aGUKW1J1c3QgQm9va11bcnVzdC1ib29rXSB0byBnZXQgc3RhcnRlZC4KCltydXN0LWJvb2tdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svCgAG////////////Af///////////wH///////////8B////////////Af///////////wEfxQLFAgABAMUCALt8JooFAACICgAAAIkKAAC9Ag4GAACHCgIFAQRTb21lAQEAnw4AAYgKAAC9Ag4GAAKHCgABAKgCJAYAAIYKAQEAnw4AAgCpAhKJBQCfDgUBBUUwNjAxAAEfBQUAAQAFAKgCJAYAAIYKAQEBpA4AAYcKAADqfCaMBQAAjQoAAAIA6nwmjAUAnw4FAfkBQW4gdW5rbm93biBsaW50IHdhcyB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgc2gKcnVzdGMgLUQgYm9ndXMgcnVzdF9maWxlLnJzCmBgYAoKTWF5YmUgeW91IGp1c3QgbWlzc3BlbGxlZCB0aGUgbGludCBuYW1lIG9yIHRoZSBsaW50IGRvZXNuJ3QgZXhpc3QgYW55bW9yZS4KRWl0aGVyIHdheSwgdHJ5IHRvIHVwZGF0ZS9yZW1vdmUgaXQgaW4gb3JkZXIgdG8gZml4IHRoZSBlcnJvci4KAAT///////////8B////////////Af///////////wH//////////wH5AfkBAAEA+QEA6nwmjAUAAIwKAAAAjQoAAL0CDgYAAIsKAgUBBFNvbWUBAQCfDgABjAoAAL0CDgYAAosKAAEAqAIkBgAAigoBAQCfDgACAKkCEosFAJ8OBQEFRTA2MDIAAR8FBQABAAUAqAIkBgAAigoBAQGkDgABiwoAAJl9Jo4FAACRCgAAAgCZfSaOBQCfDgUBsAZBIHByaXZhdGUgaXRlbSB3YXMgdXNlZCBvdXRzaWRlIGl0cyBzY29wZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MDMKbW9kIFNvbWVNb2R1bGUgewogICAgY29uc3QgUFJJVkFURTogdTMyID0gMHhfYV9iYWRfMWRlYV91MzI7IC8vIFRoaXMgY29uc3QgaXMgcHJpdmF0ZSwgc28gd2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4ndCB1c2UgaXQgb3V0c2lkZSBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgU29tZU1vZHVsZWAgbW9kdWxlLgp9CgpwcmludGxuISgiY29uc3QgdmFsdWU6IHt9IiwgU29tZU1vZHVsZTo6UFJJVkFURSk7IC8vIGVycm9yOiBjb25zdGFudCBgUFJJVkFURWAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgaXMgcHJpdmF0ZQpgYGAKCkluIG9yZGVyIHRvIGZpeCB0aGlzIGVycm9yLCB5b3UgbmVlZCB0byBtYWtlIHRoZSBpdGVtIHB1YmxpYyBieSB1c2luZyB0aGUgYHB1YmAKa2V5d29yZC4gRXhhbXBsZToKCmBgYAptb2QgU29tZU1vZHVsZSB7CiAgICBwdWIgY29uc3QgUFJJVkFURTogdTMyID0gMHhfYV9iYWRfMWRlYV91MzI7IC8vIFdlIHNldCBpdCBwdWJsaWMgYnkgdXNpbmcgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGBwdWJgIGtleXdvcmQuCn0KCnByaW50bG4hKCJjb25zdCB2YWx1ZToge30iLCBTb21lTW9kdWxlOjpQUklWQVRFKTsgLy8gb2shCmBgYAoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////z+wBrAGAAEAsAYAmX0mjgUAAJAKAAAAkQoAAL0CDgYAAI8KAgUBBFNvbWUBAQCfDgABkAoAAL0CDgYAAo8KAAEAqAIkBgAAjgoBAQCfDgACAKkCEo0FAJ8OBQEFRTA2MDMAAR8FBQABAAUAqAIkBgAAjgoBAQGkDgABjwoAAMh9JpAFAACVCgAAAgDIfSaQBQCfDgUB+wNBIGNhc3QgdG8gYGNoYXJgIHdhcyBhdHRlbXB0ZWQgb24gYSB0eXBlIG90aGVyIHRoYW4gYHU4YC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MDQKMHUzMiBhcyBjaGFyOyAvLyBlcnJvcjogb25seSBgdThgIGNhbiBiZSBjYXN0IGFzIGBjaGFyYCwgbm90IGB1MzJgCmBgYAoKQXMgdGhlIGVycm9yIG1lc3NhZ2UgaW5kaWNhdGVzLCBvbmx5IGB1OGAgY2FuIGJlIGNhc3QgaW50byBgY2hhcmAuIEV4YW1wbGU6CgpgYGAKbGV0IGMgPSA4NnU4IGFzIGNoYXI7IC8vIG9rIQphc3NlcnRfZXEhKGMsICdWJyk7CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY2FzdHMsIHRha2UgYSBsb29rIGF0IHRoZSBUeXBlIGNhc3Qgc2VjdGlvbiBpbgpbVGhlIFJlZmVyZW5jZSBCb29rXVsxXS4KClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMvb3BlcmF0b3ItZXhwci5odG1sI3R5cGUtY2FzdC1leHByZXNzaW9ucwoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wf7A/sDAAEA+wMAyH0mkAUAAJQKAAAAlQoAAL0CDgYAAJMKAgUBBFNvbWUBAQCfDgABlAoAAL0CDgYAApMKAAEAqAIkBgAAkgoBAQCfDgACAKkCEo8FAJ8OBQEFRTA2MDQAAR8FBQABAAUAqAIkBgAAkgoBAQGkDgABkwoAAPd9JpIFAACZCgAAAgD3fSaSBQCfDgUBngVBbiBpbnZhbGlkIGNhc3Qgd2FzIGF0dGVtcHRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNjA1CmxldCB4ID0gMHU4Owp4IGFzIFZlYzx1OD47IC8vIGVycm9yOiBub24tcHJpbWl0aXZlIGNhc3Q6IGB1OGAgYXMgYHN0ZDo6dmVjOjpWZWM8dTg+YAoKLy8gQW5vdGhlciBleGFtcGxlCgpsZXQgdiA9IGNvcmU6OnB0cjo6bnVsbDo6PHU4PigpOyAvLyBTbyBoZXJlLCBgdmAgaXMgYSBgKmNvbnN0IHU4YC4KdiBhcyAmdTg7IC8vIGVycm9yOiBub24tcHJpbWl0aXZlIGNhc3Q6IGAqY29uc3QgdThgIGFzIGAmdThgCmBgYAoKT25seSBwcmltaXRpdmUgdHlwZXMgY2FuIGJlIGNhc3QgaW50byBlYWNoIG90aGVyLiBFeGFtcGxlczoKCmBgYApsZXQgeCA9IDB1ODsKeCBhcyB1MzI7IC8vIG9rIQoKbGV0IHYgPSBjb3JlOjpwdHI6Om51bGw6Ojx1OD4oKTsKdiBhcyAqY29uc3QgaTg7IC8vIG9rIQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNhc3RzLCB0YWtlIGEgbG9vayBhdCB0aGUgVHlwZSBjYXN0IHNlY3Rpb24gaW4KW1RoZSBSZWZlcmVuY2UgQm9va11bMV0uCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2V4cHJlc3Npb25zL29wZXJhdG9yLWV4cHIuaHRtbCN0eXBlLWNhc3QtZXhwcmVzc2lvbnMKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wOeBZ4FAAEAngUA930mkgUAAJgKAAAAmQoAAL0CDgYAAJcKAgUBBFNvbWUBAQCfDgABmAoAAL0CDgYAApcKAAEAqAIkBgAAlgoBAQCfDgACAKkCEpEFAJ8OBQEFRTA2MDUAAR8FBQABAAUAqAIkBgAAlgoBAQGkDgABlwoAAKZ+JpQFAACdCgAAAgCmfiaUBQCfDgUBvQRBbiBpbmNvbXBhdGlibGUgY2FzdCB3YXMgYXR0ZW1wdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYwNgpsZXQgeCA9ICYwdTg7IC8vIEhlcmUsIGB4YCBpcyBhIGAmdThgLgpsZXQgeTogdTMyID0geCBhcyB1MzI7IC8vIGVycm9yOiBjYXN0aW5nIGAmdThgIGFzIGB1MzJgIGlzIGludmFsaWQKYGBgCgpXaGVuIGNhc3RpbmcsIGtlZXAgaW4gbWluZCB0aGF0IG9ubHkgcHJpbWl0aXZlIHR5cGVzIGNhbiBiZSBjYXN0IGludG8gZWFjaApvdGhlci4gRXhhbXBsZToKCmBgYApsZXQgeCA9ICYwdTg7CmxldCB5OiB1MzIgPSAqeCBhcyB1MzI7IC8vIFdlIGRlcmVmZXJlbmNlIGl0IGZpcnN0IGFuZCB0aGVuIGNhc3QgaXQuCmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY2FzdHMsIHRha2UgYSBsb29rIGF0IHRoZSBUeXBlIGNhc3Qgc2VjdGlvbiBpbgpbVGhlIFJlZmVyZW5jZSBCb29rXVsxXS4KClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMvb3BlcmF0b3ItZXhwci5odG1sI3R5cGUtY2FzdC1leHByZXNzaW9ucwoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8fvQS9BAABAL0EAKZ+JpQFAACcCgAAAJ0KAAC9Ag4GAACbCgIFAQRTb21lAQEAnw4AAZwKAAC9Ag4GAAKbCgABAKgCJAYAAJoKAQEAnw4AAgCpAhKTBQCfDgUBBUUwNjA2AAEfBQUAAQAFAKgCJAYAAJoKAQEBpA4AAZsKAADVfiaWBQAAoQoAAAIA1X4mlgUAnw4FAYIHQSBjYXN0IGJldHdlZW4gYSB0aGluIGFuZCBhIGZhdCBwb2ludGVyIHdhcyBhdHRlbXB0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjA3CmxldCB2ID0gY29yZTo6cHRyOjpudWxsOjo8dTg+KCk7CnYgYXMgKmNvbnN0IFt1OF07CmBgYAoKRmlyc3Q6IHdoYXQgYXJlIHRoaW4gYW5kIGZhdCBwb2ludGVycz8KClRoaW4gcG9pbnRlcnMgYXJlICJzaW1wbGUiIHBvaW50ZXJzOiB0aGV5IGFyZSBwdXJlbHkgYSByZWZlcmVuY2UgdG8gYSBtZW1vcnkKYWRkcmVzcy4KCkZhdCBwb2ludGVycyBhcmUgcG9pbnRlcnMgcmVmZXJlbmNpbmcgRHluYW1pY2FsbHkgU2l6ZWQgVHlwZXMgKGFsc28gY2FsbGVkIERTVCkuCkRTVCBkb24ndCBoYXZlIGEgc3RhdGljYWxseSBrbm93biBzaXplLCB0aGVyZWZvcmUgdGhleSBjYW4gb25seSBleGlzdCBiZWhpbmQKc29tZSBraW5kIG9mIHBvaW50ZXJzIHRoYXQgY29udGFpbiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLiBTbGljZXMgYW5kIHRyYWl0Cm9iamVjdHMgYXJlIERTVHMuIEluIHRoZSBjYXNlIG9mIHNsaWNlcywgdGhlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdGhlIGZhdApwb2ludGVyIGhvbGRzIGlzIHRoZWlyIHNpemUuCgpUbyBmaXggdGhpcyBlcnJvciwgZG9uJ3QgdHJ5IHRvIGNhc3QgZGlyZWN0bHkgYmV0d2VlbiB0aGluIGFuZCBmYXQgcG9pbnRlcnMuCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjYXN0cywgdGFrZSBhIGxvb2sgYXQgdGhlIFR5cGUgY2FzdCBzZWN0aW9uIGluCltUaGUgUmVmZXJlbmNlIEJvb2tdWzFdLgoKWzFdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9leHByZXNzaW9ucy9vcGVyYXRvci1leHByLmh0bWwjdHlwZS1jYXN0LWV4cHJlc3Npb25zCgAP////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEDggeCBwABAIIHANV+JpYFAACgCgAAAKEKAAC9Ag4GAACfCgIFAQRTb21lAQEAnw4AAaAKAAC9Ag4GAAKfCgABAKgCJAYAAJ4KAQEAnw4AAgCpAhKVBQCfDgUBBUUwNjA3AAEfBQUAAQAFAKgCJAYAAJ4KAQEBpA4AAZ8KAACEfyaYBQAApQoAAAIAhH8mmAUA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b250YWluaW5nIHR3byBmaWVsZHM6CnN0cnVjdCBGb28gewogICAgeDogdTMyLAogICAgeTogaTY0LAp9CgovLyBXZSBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3Q6CmxldCB2YXJpYWJsZSA9IEZvbyB7IHg6IDAsIHk6IC0xMiB9OwovLyBBbmQgd2UgY2FuIG5vdyBhY2Nlc3MgaXRzIGZpZWxkczoKcHJpbnRsbiEoIng6IHt9LCB5OiB7fSIsIHZhcmlhYmxlLngsIHZhcmlhYmxlLnkpOwpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFtwcmltaXRpdmVzXSBhbmQgW3N0cnVjdHNdLCB0YWtlIGEgbG9vayBhdCB0aGUgQm9vay4KCltwcmltaXRpdmVzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDMtMDItZGF0YS10eXBlcy5odG1sCltzdHJ1Y3RzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDUtMDAtc3RydWN0cy5odG1sCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////x/vBu8GAAEA7wYA4n8mnAUAAKwKAAAArQoAAL0CDgYAAKsKAgUBBFNvbWUBAQCfDgABrAoAAL0CDgYAAqsKAAEAqAIkBgAAqgoBAQCfDgACAKkCEpsFAJ8OBQEFRTA2MTAAAR8FBQABAAUAqAIkBgAAqgoBAQGkDgABqwoAAJGAASaeBQAAsQoAAAIAkYABJp4FAJ8OBQHxAkF0dGVtcHRlZCB0byBkZXJlZmVyZW5jZSBhIHZhcmlhYmxlIHdoaWNoIGNhbm5vdCBiZSBkZXJlZmVyZW5jZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjE0CmxldCB5ID0gMHUzMjsKKnk7IC8vIGVycm9yOiB0eXBlIGB1MzJgIGNhbm5vdCBiZSBkZXJlZmVyZW5jZWQKYGBgCgpPbmx5IHR5cGVzIGltcGxlbWVudGluZyBgc3RkOjpvcHM6OkRlcmVmYCBjYW4gYmUgZGVyZWZlcmVuY2VkIChzdWNoIGFzIGAmVGApLgpFeGFtcGxlOgoKYGBgCmxldCB5ID0gMHUzMjsKbGV0IHggPSAmeTsKLy8gU28gaGVyZSwgYHhgIGlzIGEgYCZ1MzJgLCBzbyB3ZSBjYW4gZGVyZWZlcmVuY2UgaXQ6Cip4OyAvLyBvayEKYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH///////9/8QLxAgABAPECAJGAASaeBQAAsAoAAACxCgAAvQIOBgAArwoCBQEEU29tZQEBAJ8OAAGwCgAAvQIOBgACrwoAAQCoAiQGAACuCgEBAJ8OAAIAqQISnQUAnw4FAQVFMDYxNAABHwUFAAEABQCoAiQGAACuCgEBAaQOAAGvCgAAwIABJqAFAAC1CgAAAgDAgAEmoAUAnw4FAf0EQXR0ZW1wdGVkIHRvIGFjY2VzcyBhIG1ldGhvZCBsaWtlIGEgZmllbGQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjE1CnN0cnVjdCBGb28gewogICAgeDogdTMyLAp9CgppbXBsIEZvbyB7CiAgICBmbiBtZXRob2QoJnNlbGYpIHt9Cn0KCmxldCBmID0gRm9vIHsgeDogMCB9OwpmLm1ldGhvZDsgLy8gZXJyb3I6IGF0dGVtcHRlZCB0byB0YWtlIHZhbHVlIG9mIG1ldGhvZCBgbWV0aG9kYCBvbiB0eXBlIGBGb29gCmBgYAoKSWYgeW91IHdhbnQgdG8gdXNlIGEgbWV0aG9kLCBhZGQgYCgpYCBhZnRlciBpdDoKCmBgYAojIHN0cnVjdCBGb28geyB4OiB1MzIgfQojIGltcGwgRm9vIHsgZm4gbWV0aG9kKCZzZWxmKSB7fSB9CiMgbGV0IGYgPSBGb28geyB4OiAwIH07CmYubWV0aG9kKCk7CmBgYAoKSG93ZXZlciwgaWYgeW91IHdhbnRlZCB0byBhY2Nlc3MgYSBmaWVsZCBvZiBhIHN0cnVjdCBjaGVjayB0aGF0IHRoZSBmaWVsZCBuYW1lCmlzIHNwZWxsZWQgY29ycmVjdGx5LiBFeGFtcGxlOgoKYGBgCiMgc3RydWN0IEZvbyB7IHg6IHUzMiB9CiMgaW1wbCBGb28geyBmbiBtZXRob2QoJnNlbGYpIHt9IH0KIyBsZXQgZiA9IEZvbyB7IHg6IDAgfTsKcHJpbnRsbiEoInt9IiwgZi54KTsKYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8f/QT9BAABAP0EAMCAASagBQAAtAoAAAC1CgAAvQIOBgAAswoCBQEEU29tZQEBAJ8OAAG0CgAAvQIOBgACswoAAQCoAiQGAACyCgEBAJ8OAAIAqQISnwUAnw4FAQVFMDYxNQABHwUFAAEABQCoAiQGAACyCgEBAaQOAAGzCgAA74ABJqIFAAC5CgAAAgDvgAEmogUAnw4FAZwIQXR0ZW1wdGVkIHRvIGFjY2VzcyBhIHByaXZhdGUgZmllbGQgb24gYSBzdHJ1Y3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjE2Cm1vZCBzb21lX21vZHVsZSB7CiAgICBwdWIgc3RydWN0IEZvbyB7CiAgICAgICAgeDogdTMyLCAvLyBTbyBgeGAgaXMgcHJpdmF0ZSBpbiBoZXJlLgogICAgfQoKICAgIGltcGwgRm9vIHsKICAgICAgICBwdWIgZm4gbmV3KCkgLT4gRm9vIHsgRm9vIHsgeDogMCB9IH0KICAgIH0KfQoKbGV0IGYgPSBzb21lX21vZHVsZTo6Rm9vOjpuZXcoKTsKcHJpbnRsbiEoInt9IiwgZi54KTsgLy8gZXJyb3I6IGZpZWxkIGB4YCBvZiBzdHJ1Y3QgYHNvbWVfbW9kdWxlOjpGb29gIGlzIHByaXZhdGUKYGBgCgpJZiB5b3Ugd2FudCB0byBhY2Nlc3MgdGhpcyBmaWVsZCwgeW91IGhhdmUgdHdvIG9wdGlvbnM6CgoxKSBTZXQgdGhlIGZpZWxkIHB1YmxpYzoKCmBgYAptb2Qgc29tZV9tb2R1bGUgewogICAgcHViIHN0cnVjdCBGb28gewogICAgICAgIHB1YiB4OiB1MzIsIC8vIGB4YCBpcyBub3cgcHVibGljLgogICAgfQoKICAgIGltcGwgRm9vIHsKICAgICAgICBwdWIgZm4gbmV3KCkgLT4gRm9vIHsgRm9vIHsgeDogMCB9IH0KICAgIH0KfQoKbGV0IGYgPSBzb21lX21vZHVsZTo6Rm9vOjpuZXcoKTsKcHJpbnRsbiEoInt9IiwgZi54KTsgLy8gb2shCmBgYAoKMikgQWRkIGEgZ2V0dGVyIGZ1bmN0aW9uOgoKYGBgCm1vZCBzb21lX21vZHVsZSB7CiAgICBwdWIgc3RydWN0IEZvbyB7CiAgICAgICAgeDogdTMyLCAvLyBTbyBgeGAgaXMgc3RpbGwgcHJpdmF0ZSBpbiBoZXJlLgogICAgfQoKICAgIGltcGwgRm9vIHsKICAgICAgICBwdWIgZm4gbmV3KCkgLT4gRm9vIHsgRm9vIHsgeDogMCB9IH0KCiAgICAgICAgLy8gV2UgY3JlYXRlIHRoZSBnZXR0ZXIgZnVuY3Rpb24gaGVyZToKICAgICAgICBwdWIgZm4gZ2V0X3goJnNlbGYpIC0+ICZ1MzIgeyAmc2VsZi54IH0KICAgIH0KfQoKbGV0IGYgPSBzb21lX21vZHVsZTo6Rm9vOjpuZXcoKTsKcHJpbnRsbiEoInt9IiwgZi5nZXRfeCgpKTsgLy8gb2shCmBgYAoAEf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///9/nAicCAABAJwIAO+AASaiBQAAuAoAAAC5CgAAvQIOBgAAtwoCBQEEU29tZQEBAJ8OAAG4CgAAvQIOBgACtwoAAQCoAiQGAAC2CgEBAJ8OAAIAqQISoQUAnw4FAQVFMDYxNgABHwUFAAEABQCoAiQGAAC2CgEBAaQOAAG3CgAAnoEBJqQFAAC9CgAAAgCegQEmpAUAnw4FAfYFQXR0ZW1wdGVkIHRvIHBhc3MgYW4gaW52YWxpZCB0eXBlIG9mIHZhcmlhYmxlIGludG8gYSB2YXJpYWRpYyBmdW5jdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTcKZXh0ZXJuIHsKICAgIGZuIHByaW50ZihjOiAqY29uc3QgaTgsIC4uLik7Cn0KCnVuc2FmZSB7CiAgICBwcmludGYoOjpzdGQ6OnB0cjo6bnVsbCgpLCAwZjMyKTsKICAgIC8vIGVycm9yOiBjYW5ub3QgcGFzcyBhbiBgZjMyYCB0byB2YXJpYWRpYyBmdW5jdGlvbiwgY2FzdCB0byBgY19kb3VibGVgCn0KYGBgCgpDZXJ0YWluIFJ1c3QgdHlwZXMgbXVzdCBiZSBjYXN0IGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gYSB2YXJpYWRpYyBmdW5jdGlvbiwKYmVjYXVzZSBvZiBhcmNhbmUgQUJJIHJ1bGVzIGRpY3RhdGVkIGJ5IHRoZSBDIHN0YW5kYXJkLiBUbyBmaXggdGhlIGVycm9yLApjYXN0IHRoZSB2YWx1ZSB0byB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgdGhlIGVycm9yIG1lc3NhZ2UgKHdoaWNoIHlvdSBtYXkgbmVlZAp0byBpbXBvcnQgZnJvbSBgc3RkOjpvczo6cmF3YCkuCgpJbiB0aGlzIGNhc2UsIGBjX2RvdWJsZWAgaGFzIHRoZSBzYW1lIHNpemUgYXMgYGY2NGAgc28gd2UgY2FuIHVzZSBpdCBkaXJlY3RseToKCmBgYG5vX3J1bgojIGV4dGVybiB7CiMgICAgIGZuIHByaW50ZihjOiAqY29uc3QgaTgsIC4uLik7CiMgfQp1bnNhZmUgewogICAgcHJpbnRmKDo6c3RkOjpwdHI6Om51bGwoKSwgMGY2NCk7IC8vIG9rIQp9CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////x/2BfYFAAEA9gUAnoEBJqQFAAC8CgAAAL0KAAC9Ag4GAAC7CgIFAQRTb21lAQEAnw4AAbwKAAC9Ag4GAAK7CgABAKgCJAYAALoKAQEAnw4AAgCpAhKjBQCfDgUBBUUwNjE3AAEfBQUAAQAFAKgCJAYAALoKAQEBpA4AAbsKAADNgQEmpgUAAMEKAAACAM2BASamBQCfDgUBhgRBdHRlbXB0ZWQgdG8gY2FsbCBzb21ldGhpbmcgd2hpY2ggaXNuJ3QgYSBmdW5jdGlvbiBub3IgYSBtZXRob2QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDYxOAplbnVtIFggewogICAgRW50cnksCn0KClg6OkVudHJ5KCk7IC8vIGVycm9yOiBleHBlY3RlZCBmdW5jdGlvbiwgdHVwbGUgc3RydWN0IG9yIHR1cGxlIHZhcmlhbnQsCiAgICAgICAgICAgIC8vIGZvdW5kIGBYOjpFbnRyeWAKCi8vIE9yIGV2ZW4gc2ltcGxlcjoKbGV0IHggPSAwaTMyOwp4KCk7IC8vIGVycm9yOiBleHBlY3RlZCBmdW5jdGlvbiwgdHVwbGUgc3RydWN0IG9yIHR1cGxlIHZhcmlhbnQsIGZvdW5kIGBpMzJgCmBgYAoKT25seSBmdW5jdGlvbnMgYW5kIG1ldGhvZHMgY2FuIGJlIGNhbGxlZCB1c2luZyBgKClgLiBFeGFtcGxlOgoKYGBgCi8vIFdlIGRlY2xhcmUgYSBmdW5jdGlvbjoKZm4gaV9hbV9hX2Z1bmN0aW9uKCkge30KCi8vIEFuZCB3ZSBjYWxsIGl0OgppX2FtX2FfZnVuY3Rpb24oKTsKYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wE/hgSGBAABAIYEAM2BASamBQAAwAoAAADBCgAAvQIOBgAAvwoCBQEEU29tZQEBAJ8OAAHACgAAvQIOBgACvwoAAQCoAiQGAAC+CgEBAJ8OAAIAqQISpQUAnw4FAQVFMDYxOAABHwUFAAEABQCoAiQGAAC+CgEBAaQOAAG/CgAA/IEBJqgFAADFCgAAAgD8gQEmqAUAnw4FAaYKIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhlIHR5cGUtY2hlY2tlciBuZWVkZWQgdG8ga25vdyB0aGUgdHlwZSBvZiBhbiBleHByZXNzaW9uLCBidXQgdGhhdCB0eXBlIGhhZCBub3QKeWV0IGJlZW4gaW5mZXJyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCmxldCBtdXQgeCA9IHZlYyFbXTsKbWF0Y2ggeC5wb3AoKSB7CiAgICBTb21lKHYpID0+IHsKICAgICAgICAvLyBIZXJlLCB0aGUgdHlwZSBvZiBgdmAgaXMgbm90ICh5ZXQpIGtub3duLCBzbyB3ZQogICAgICAgIC8vIGNhbm5vdCByZXNvbHZlIHRoaXMgbWV0aG9kIGNhbGw6CiAgICAgICAgdi50b191cHBlcmNhc2UoKTsgLy8gZXJyb3I6IHRoZSB0eXBlIG9mIHRoaXMgdmFsdWUgbXVzdCBiZSBrbm93biBpbgogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGlzIGNvbnRleHQKICAgIH0KICAgIE5vbmUgPT4ge30KfQpgYGAKClR5cGUgaW5mZXJlbmNlIHR5cGljYWxseSBwcm9jZWVkcyBmcm9tIHRoZSB0b3Agb2YgdGhlIGZ1bmN0aW9uIHRvIHRoZSBib3R0b20sCmZpZ3VyaW5nIG91dCB0eXBlcyBhcyBpdCBnb2VzLiBJbiBzb21lIGNhc2VzIC0tIG5vdGFibHkgbWV0aG9kIGNhbGxzIGFuZApvdmVybG9hZGFibGUgb3BlcmF0b3JzIGxpa2UgYCpgIC0tIHRoZSB0eXBlIGNoZWNrZXIgbWF5IG5vdCBoYXZlIGVub3VnaAppbmZvcm1hdGlvbiAqeWV0KiB0byBtYWtlIHByb2dyZXNzLiBUaGlzIGNhbiBiZSB0cnVlIGV2ZW4gaWYgdGhlIHJlc3Qgb2YgdGhlCmZ1bmN0aW9uIHByb3ZpZGVzIGVub3VnaCBjb250ZXh0IChiZWNhdXNlIHRoZSB0eXBlLWNoZWNrZXIgaGFzbid0IGxvb2tlZCB0aGF0CmZhciBhaGVhZCB5ZXQpLiBJbiB0aGlzIGNhc2UsIHR5cGUgYW5ub3RhdGlvbnMgY2FuIGJlIHVzZWQgdG8gaGVscCBpdCBhbG9uZy4KClRvIGZpeCB0aGlzIGVycm9yLCBqdXN0IHNwZWNpZnkgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlLiBFeGFtcGxlOgoKYGBgCmxldCBtdXQgeDogVmVjPFN0cmluZz4gPSB2ZWMhW107IC8vIFdlIHByZWNpc2UgdGhlIHR5cGUgb2YgdGhlIHZlYyBlbGVtZW50cy4KbWF0Y2ggeC5wb3AoKSB7CiAgICBTb21lKHYpID0+IHsKICAgICAgICB2LnRvX3VwcGVyY2FzZSgpOyAvLyBTaW5jZSBydXN0YyBub3cga25vd3MgdGhlIHR5cGUgb2YgdGhlIHZlYyBlbGVtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjYW4gdXNlIGB2YCdzIG1ldGhvZHMuCiAgICB9CiAgICBOb25lID0+IHt9Cn0KYGBgCgAV////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wemCqYKAAEApgoA/IEBJqgFAADECgAAAMUKAAC9Ag4GAADDCgIFAQRTb21lAQEAnw4AAcQKAAC9Ag4GAALDCgABAKgCJAYAAMIKAQEAnw4AAgCpAhKnBQCfDgUBBUUwNjE5AAEfBQUAAQAFAKgCJAYAAMIKAQEBpA4AAcMKAACrggEmqgUAAMkKAAACAKuCASaqBQCfDgUBkwVBIGNhc3QgdG8gYW4gdW5zaXplZCB0eXBlIHdhcyBhdHRlbXB0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjIwCmxldCB4ID0gJlsxX3VzaXplLCAyXSBhcyBbdXNpemVdOyAvLyBlcnJvcjogY2FzdCB0byB1bnNpemVkIHR5cGU6IGAmW3VzaXplOyAyXWAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBhcyBgW3VzaXplXWAKYGBgCgpJbiBSdXN0LCBzb21lIHR5cGVzIGRvbid0IGhhdmUgYSBrbm93biBzaXplIGF0IGNvbXBpbGUtdGltZS4gRm9yIGV4YW1wbGUsIGluIGEKc2xpY2UgdHlwZSBsaWtlIGBbdTMyXWAsIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaXMgbm90IGtub3duIGF0IGNvbXBpbGUtdGltZSBhbmQKaGVuY2UgdGhlIG92ZXJhbGwgc2l6ZSBjYW5ub3QgYmUgY29tcHV0ZWQuIEFzIGEgcmVzdWx0LCBzdWNoIHR5cGVzIGNhbiBvbmx5IGJlCm1hbmlwdWxhdGVkIHRocm91Z2ggYSByZWZlcmVuY2UgKGUuZy4sIGAmVGAgb3IgYCZtdXQgVGApIG9yIG90aGVyIHBvaW50ZXItdHlwZQooZS5nLiwgYEJveGAgb3IgYFJjYCkuIFRyeSBjYXN0aW5nIHRvIGEgcmVmZXJlbmNlIGluc3RlYWQ6CgpgYGAKbGV0IHggPSAmWzFfdXNpemUsIDJdIGFzICZbdXNpemVdOyAvLyBvayEKYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//H5MFkwUAAQCTBQCrggEmqgUAAMgKAAAAyQoAAL0CDgYAAMcKAgUBBFNvbWUBAQCfDgAByAoAAL0CDgYAAscKAAEAqAIkBgAAxgoBAQCfDgACAKkCEqkFAJ8OBQEFRTA2MjAAAR8FBQABAAUAqAIkBgAAxgoBAQGkDgABxwoAANqCASasBQAAzQoAAAIA2oIBJqwFAJ8OBQH4CFRoaXMgZXJyb3IgY29kZSBpbmRpY2F0ZXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBsaWZldGltZXMgYXBwZWFyaW5nIGluIHRoZQpmdW5jdGlvbiBzaWduYXR1cmUgKGkuZS4sIHRoZSBwYXJhbWV0ZXIgdHlwZXMgYW5kIHRoZSByZXR1cm4gdHlwZSkgYW5kIHRoZQpkYXRhLWZsb3cgZm91bmQgaW4gdGhlIGZ1bmN0aW9uIGJvZHkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjIxCmZuIGZvbzwnYT4oeDogJidhIGkzMiwgeTogJmkzMikgLT4gJidhIGkzMiB7IC8vIGVycm9yOiBleHBsaWNpdCBsaWZldGltZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgcmVxdWlyZWQgaW4gdGhlIHR5cGUgb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGB5YAogICAgaWYgeCA+IHkgeyB4IH0gZWxzZSB7IHkgfQp9CmBgYAoKSW4gdGhlIGNvZGUgYWJvdmUsIHRoZSBmdW5jdGlvbiBpcyByZXR1cm5pbmcgZGF0YSBib3Jyb3dlZCBmcm9tIGVpdGhlciBgeGAgb3IKYHlgLCBidXQgdGhlIGAnYWAgYW5ub3RhdGlvbiBpbmRpY2F0ZXMgdGhhdCBpdCBpcyByZXR1cm5pbmcgZGF0YSBvbmx5IGZyb20gYHhgLgpUbyBmaXggdGhlIGVycm9yLCB0aGUgc2lnbmF0dXJlIGFuZCB0aGUgYm9keSBtdXN0IGJlIG1hZGUgdG8gbWF0Y2guIFR5cGljYWxseSwKdGhpcyBpcyBkb25lIGJ5IHVwZGF0aW5nIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUuIFNvLCBpbiB0aGlzIGNhc2UsIHdlIGNoYW5nZQp0aGUgdHlwZSBvZiBgeWAgdG8gYCYnYSBpMzJgLCBsaWtlIHNvOgoKYGBgCmZuIGZvbzwnYT4oeDogJidhIGkzMiwgeTogJidhIGkzMikgLT4gJidhIGkzMiB7CiAgICBpZiB4ID4geSB7IHggfSBlbHNlIHsgeSB9Cn0KYGBgCgpOb3cgdGhlIHNpZ25hdHVyZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZnVuY3Rpb24gZGF0YSBib3Jyb3dlZCBmcm9tIGVpdGhlciBgeGAgb3IKYHlgLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY291bGQgY2hhbmdlIHRoZSBib2R5IHRvIG5vdCByZXR1cm4gZGF0YSBmcm9tIGB5YDoKCmBgYApmbiBmb288J2E+KHg6ICYnYSBpMzIsIHk6ICZpMzIpIC0+ICYnYSBpMzIgewogICAgeAp9CmBgYAoAEv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////3/4CPgIAAEA+AgA2oIBJqwFAADMCgAAAM0KAAC9Ag4GAADLCgIFAQRTb21lAQEAnw4AAcwKAAC9Ag4GAALLCgABAKgCJAYAAMoKAQEAnw4AAgCpAhKrBQCfDgUBBUUwNjIxAAEfBQUAAQAFAKgCJAYAAMoKAQEBpA4AAcsKAACJgwEmrgUAANEKAAACAImDASauBQCfDgUB3wRBbiBpbnRyaW5zaWMgd2FzIGRlY2xhcmVkIHdpdGhvdXQgYmVpbmcgYSBmdW5jdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjIKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgcHViIHN0YXRpYyBicmVha3BvaW50IDogZm4oKTsgLy8gZXJyb3I6IGludHJpbnNpYyBtdXN0IGJlIGEgZnVuY3Rpb24KfQoKZm4gbWFpbigpIHsgdW5zYWZlIHsgYnJlYWtwb2ludCgpOyB9IH0KYGBgCgpBbiBpbnRyaW5zaWMgaXMgYSBmdW5jdGlvbiBhdmFpbGFibGUgZm9yIHVzZSBpbiBhIGdpdmVuIHByb2dyYW1taW5nIGxhbmd1YWdlCndob3NlIGltcGxlbWVudGF0aW9uIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGJ5IHRoZSBjb21waWxlci4gSW4gb3JkZXIgdG8gZml4IHRoaXMKZXJyb3IsIGp1c3QgZGVjbGFyZSBhIGZ1bmN0aW9uLiBFeGFtcGxlOgoKYGBgbm9fcnVuCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIHB1YiBmbiBicmVha3BvaW50KCk7IC8vIG9rIQp9CgpmbiBtYWluKCkgeyB1bnNhZmUgeyBicmVha3BvaW50KCk7IH0gfQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////B98E3wQAAQDfBACJgwEmrgUAANAKAAAA0QoAAL0CDgYAAM8KAgUBBFNvbWUBAQCfDgAB0AoAAL0CDgYAAs8KAAEAqAIkBgAAzgoBAQCfDgACAKkCEq0FAJ8OBQEFRTA2MjIAAR8FBQABAAUAqAIkBgAAzgoBAQGkDgABzwoAALiDASawBQAA1QoAAAIAuIMBJrAFAJ8OBQG0BkEgbGlmZXRpbWUgZGlkbid0IG1hdGNoIHdoYXQgd2FzIGV4cGVjdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyMwpzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiAmJ2EgaXNpemUsCn0KCmZuIGJhcjwnc2hvcnQsICdsb25nPihjOiBGb288J3Nob3J0PiwgbDogJidsb25nIGlzaXplKSB7CiAgICBsZXQgXzogRm9vPCdsb25nPiA9IGM7IC8vIGVycm9yIQp9CmBgYAoKSW4gdGhpcyBleGFtcGxlLCB3ZSB0cmllZCB0byBzZXQgYSB2YWx1ZSB3aXRoIGFuIGluY29tcGF0aWJsZSBsaWZldGltZSB0bwphbm90aGVyIG9uZSAoYCdsb25nYCBpcyB1bnJlbGF0ZWQgdG8gYCdzaG9ydGApLiBXZSBjYW4gc29sdmUgdGhpcyBpc3N1ZSBpbgp0d28gZGlmZmVyZW50IHdheXM6CgpFaXRoZXIgd2UgbWFrZSBgJ3Nob3J0YCBsaXZlIGF0IGxlYXN0IGFzIGxvbmcgYXMgYCdsb25nYDoKCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiAmJ2EgaXNpemUsCn0KCi8vIHdlIHNldCAnc2hvcnQgdG8gbGl2ZSBhdCBsZWFzdCBhcyBsb25nIGFzICdsb25nCmZuIGJhcjwnc2hvcnQ6ICdsb25nLCAnbG9uZz4oYzogRm9vPCdzaG9ydD4sIGw6ICYnbG9uZyBpc2l6ZSkgewogICAgbGV0IF86IEZvbzwnbG9uZz4gPSBjOyAvLyBvayEKfQpgYGAKCk9yIHdlIHVzZSBvbmx5IG9uZSBsaWZldGltZToKCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiAmJ2EgaXNpemUsCn0KZm4gYmFyPCdzaG9ydD4oYzogRm9vPCdzaG9ydD4sIGw6ICYnc2hvcnQgaXNpemUpIHsKICAgIGxldCBfOiBGb288J3Nob3J0PiA9IGM7IC8vIG9rIQp9CmBgYAoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8HtAa0BgABALQGALiDASawBQAA1AoAAADVCgAAvQIOBgAA0woCBQEEU29tZQEBAJ8OAAHUCgAAvQIOBgAC0woAAQCoAiQGAADSCgEBAJ8OAAIAqQISrwUAnw4FAQVFMDYyMwABHwUFAAEABQCoAiQGAADSCgEBAaQOAAHTCgAA54MBJrIFAADZCgAAAgDngwEmsgUAnw4FAZYHQSBwcml2YXRlIGl0ZW0gd2FzIHVzZWQgb3V0c2lkZSBvZiBpdHMgc2NvcGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjI0Cm1vZCBpbm5lciB7CiAgICBwdWIgc3RydWN0IEZvbzsKCiAgICBpbXBsIEZvbyB7CiAgICAgICAgZm4gbWV0aG9kKCZzZWxmKSB7fQogICAgfQp9CgpsZXQgZm9vID0gaW5uZXI6OkZvbzsKZm9vLm1ldGhvZCgpOyAvLyBlcnJvcjogbWV0aG9kIGBtZXRob2RgIGlzIHByaXZhdGUKYGBgCgpUd28gcG9zc2liaWxpdGllcyBhcmUgYXZhaWxhYmxlIHRvIHNvbHZlIHRoaXMgaXNzdWU6CgoxLiBPbmx5IHVzZSB0aGUgaXRlbSBpbiB0aGUgc2NvcGUgaXQgaGFzIGJlZW4gZGVmaW5lZDoKCmBgYAptb2QgaW5uZXIgewogICAgcHViIHN0cnVjdCBGb287CgogICAgaW1wbCBGb28gewogICAgICAgIGZuIG1ldGhvZCgmc2VsZikge30KICAgIH0KCiAgICBwdWIgZm4gY2FsbF9tZXRob2QoZm9vOiAmRm9vKSB7IC8vIFdlIGNyZWF0ZSBhIHB1YmxpYyBmdW5jdGlvbi4KICAgICAgICBmb28ubWV0aG9kKCk7IC8vIFdoaWNoIGNhbGxzIHRoZSBpdGVtLgogICAgfQp9CgpsZXQgZm9vID0gaW5uZXI6OkZvbzsKaW5uZXI6OmNhbGxfbWV0aG9kKCZmb28pOyAvLyBBbmQgc2luY2UgdGhlIGZ1bmN0aW9uIGlzIHB1YmxpYywgd2UgY2FuIGNhbGwgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWV0aG9kIHRocm91Z2ggaXQuCmBgYAoKMi4gTWFrZSB0aGUgaXRlbSBwdWJsaWM6CgpgYGAKbW9kIGlubmVyIHsKICAgIHB1YiBzdHJ1Y3QgRm9vOwoKICAgIGltcGwgRm9vIHsKICAgICAgICBwdWIgZm4gbWV0aG9kKCZzZWxmKSB7fSAvLyBJdCdzIG5vdyBwdWJsaWMuCiAgICB9Cn0KCmxldCBmb28gPSBpbm5lcjo6Rm9vOwpmb28ubWV0aG9kKCk7IC8vIE9rIQpgYGAKAA////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wGWB5YHAAEAlgcA54MBJrIFAADYCgAAANkKAAC9Ag4GAADXCgIFAQRTb21lAQEAnw4AAdgKAAC9Ag4GAALXCgABAKgCJAYAANYKAQEAnw4AAgCpAhKxBQCfDgUBBUUwNjI0AAEfBQUAAQAFAKgCJAYAANYKAQEBpA4AAdcKAACWhAEmtAUAAN0KAAACAJaEASa0BQCfDgUB7hJUaGlzIGVycm9yIG9jY3VycyBiZWNhdXNlIGEgYm9ycm93IGluIGEgZ2VuZXJhdG9yIHBlcnNpc3RzIGFjcm9zcyBhCnlpZWxkIHBvaW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyNgojICMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0LCBwaW4pXQojIHVzZSBzdGQ6Om9wczo6R2VuZXJhdG9yOwojIHVzZSBzdGQ6OnBpbjo6UGluOwpsZXQgbXV0IGIgPSB8fCB7CiAgICBsZXQgYSA9ICZTdHJpbmc6Om5ldygpOyAvLyA8LS0gVGhpcyBib3Jyb3cuLi4KICAgIHlpZWxkICgpOyAvLyAuLi5pcyBzdGlsbCBpbiBzY29wZSBoZXJlLCB3aGVuIHRoZSB5aWVsZCBvY2N1cnMuCiAgICBwcmludGxuISgie30iLCBhKTsKfTsKUGluOjpuZXcoJm11dCBiKS5yZXN1bWUoKCkpOwpgYGAKCkF0IHByZXNlbnQsIGl0IGlzIG5vdCBwZXJtaXR0ZWQgdG8gaGF2ZSBhIHlpZWxkIHRoYXQgb2NjdXJzIHdoaWxlIGEKYm9ycm93IGlzIHN0aWxsIGluIHNjb3BlLiBUbyByZXNvbHZlIHRoaXMgZXJyb3IsIHRoZSBib3Jyb3cgbXVzdAplaXRoZXIgYmUgImNvbnRhaW5lZCIgdG8gYSBzbWFsbGVyIHNjb3BlIHRoYXQgZG9lcyBub3Qgb3ZlcmxhcCB0aGUKeWllbGQgb3IgZWxzZSBlbGltaW5hdGVkIGluIGFub3RoZXIgd2F5LiBTbywgZm9yIGV4YW1wbGUsIHdlIG1pZ2h0CnJlc29sdmUgdGhlIHByZXZpb3VzIGV4YW1wbGUgYnkgcmVtb3ZpbmcgdGhlIGJvcnJvdyBhbmQganVzdCBzdG9yaW5nCnRoZSBpbnRlZ2VyIGJ5IHZhbHVlOgoKYGBgCiMgIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQsIHBpbildCiMgdXNlIHN0ZDo6b3BzOjpHZW5lcmF0b3I7CiMgdXNlIHN0ZDo6cGluOjpQaW47CmxldCBtdXQgYiA9IHx8IHsKICAgIGxldCBhID0gMzsKICAgIHlpZWxkICgpOwogICAgcHJpbnRsbiEoInt9IiwgYSk7Cn07ClBpbjo6bmV3KCZtdXQgYikucmVzdW1lKCgpKTsKYGBgCgpUaGlzIGlzIGEgdmVyeSBzaW1wbGUgY2FzZSwgb2YgY291cnNlLiBJbiBtb3JlIGNvbXBsZXggY2FzZXMsIHdlIG1heQp3aXNoIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSByZWZlcmVuY2UgdG8gdGhlIHZhbHVlIHRoYXQgd2FzIGJvcnJvd2VkIC0tCmluIHRob3NlIGNhc2VzLCBzb21ldGhpbmcgbGlrZSB0aGUgYFJjYCBvciBgQXJjYCB0eXBlcyBtYXkgYmUgdXNlZnVsLgoKVGhpcyBlcnJvciBhbHNvIGZyZXF1ZW50bHkgYXJpc2VzIHdpdGggaXRlcmF0aW9uOgoKYGBgY29tcGlsZV9mYWlsLEUwNjI2CiMgIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQsIHBpbildCiMgdXNlIHN0ZDo6b3BzOjpHZW5lcmF0b3I7CiMgdXNlIHN0ZDo6cGluOjpQaW47CmxldCBtdXQgYiA9IHx8IHsKICBsZXQgdiA9IHZlYyFbMSwyLDNdOwogIGZvciAmeCBpbiAmdiB7IC8vIDwtLSBib3Jyb3cgb2YgYHZgIGlzIHN0aWxsIGluIHNjb3BlLi4uCiAgICB5aWVsZCB4OyAvLyAuLi53aGVuIHRoaXMgeWllbGQgb2NjdXJzLgogIH0KfTsKUGluOjpuZXcoJm11dCBiKS5yZXN1bWUoKCkpOwpgYGAKClN1Y2ggY2FzZXMgY2FuIHNvbWV0aW1lcyBiZSByZXNvbHZlZCBieSBpdGVyYXRpbmcgImJ5IHZhbHVlIiAob3IgdXNpbmcKYGludG9faXRlcigpYCkgdG8gYXZvaWQgYm9ycm93aW5nOgoKYGBgCiMgIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQsIHBpbildCiMgdXNlIHN0ZDo6b3BzOjpHZW5lcmF0b3I7CiMgdXNlIHN0ZDo6cGluOjpQaW47CmxldCBtdXQgYiA9IHx8IHsKICBsZXQgdiA9IHZlYyFbMSwyLDNdOwogIGZvciB4IGluIHYgeyAvLyA8LS0gVGFrZSBvd25lcnNoaXAgb2YgdGhlIHZhbHVlcyBpbnN0ZWFkIQogICAgeWllbGQgeDsgLy8gPC0tIE5vdyB5aWVsZCBpcyBPSy4KICB9Cn07ClBpbjo6bmV3KCZtdXQgYikucmVzdW1lKCgpKTsKYGBgCgpJZiB0YWtpbmcgb3duZXJzaGlwIGlzIG5vdCBhbiBvcHRpb24sIHVzaW5nIGluZGljZXMgY2FuIHdvcmsgdG9vOgoKYGBgCiMgIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQsIHBpbildCiMgdXNlIHN0ZDo6b3BzOjpHZW5lcmF0b3I7CiMgdXNlIHN0ZDo6cGluOjpQaW47CmxldCBtdXQgYiA9IHx8IHsKICBsZXQgdiA9IHZlYyFbMSwyLDNdOwogIGxldCBsZW4gPSB2LmxlbigpOyAvLyAoKikKICBmb3IgaSBpbiAwLi5sZW4gewogICAgbGV0IHggPSB2W2ldOyAvLyAoKikKICAgIHlpZWxkIHg7IC8vIDwtLSBOb3cgeWllbGQgaXMgT0suCiAgfQp9OwpQaW46Om5ldygmbXV0IGIpLnJlc3VtZSgoKSk7CgovLyAoKikgLS0gVW5mb3J0dW5hdGVseSwgdGhlc2UgdGVtcG9yYXJpZXMgYXJlIGN1cnJlbnRseSByZXF1aXJlZC4KLy8gU2VlIDxodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzQzMTIyPi4KYGBgCgAm////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////w/uEu4SAAEA7hIAloQBJrQFAADcCgAAAN0KAAC9Ag4GAADbCgIFAQRTb21lAQEAnw4AAdwKAAC9Ag4GAALbCgABAKgCJAYAANoKAQEAnw4AAgCpAhKzBQCfDgUBBUUwNjI2AAEfBQUAAQAFAKgCJAYAANoKAQEBpA4AAdsKAADFhAEmtgUAAOEKAAACAMWEASa2BQCfDgUBuARBIHlpZWxkIGV4cHJlc3Npb24gd2FzIHVzZWQgb3V0c2lkZSBvZiB0aGUgZ2VuZXJhdG9yIGxpdGVyYWwuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjI3CiMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0KV0KCmZuIGZha2VfZ2VuZXJhdG9yKCkgLT4gJidzdGF0aWMgc3RyIHsKICAgIHlpZWxkIDE7CiAgICByZXR1cm4gImZvbyIKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgZ2VuZXJhdG9yID0gZmFrZV9nZW5lcmF0b3I7Cn0KYGBgCgpUaGUgZXJyb3Igb2NjdXJzIGJlY2F1c2Uga2V5d29yZCBgeWllbGRgIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHRoZSBnZW5lcmF0b3IKbGl0ZXJhbC4gVGhpcyBjYW4gYmUgZml4ZWQgYnkgY29uc3RydWN0aW5nIHRoZSBnZW5lcmF0b3IgY29ycmVjdGx5LgoKYGBgCiMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0KV0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IGdlbmVyYXRvciA9IHx8IHsKICAgICAgICB5aWVsZCAxOwogICAgICAgIHJldHVybiAiZm9vIgogICAgfTsKfQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////9/uAS4BAABALgEAMWEASa2BQAA4AoAAADhCgAAvQIOBgAA3woCBQEEU29tZQEBAJ8OAAHgCgAAvQIOBgAC3woAAQCoAiQGAADeCgEBAJ8OAAIAqQIStQUAnw4FAQVFMDYyNwABHwUFAAEABQCoAiQGAADeCgEBAaQOAAHfCgAA9IQBJrgFAADlCgAAAgD0hAEmuAUAnw4FAaIFTW9yZSB0aGFuIG9uZSBwYXJhbWV0ZXIgd2FzIHVzZWQgZm9yIGEgZ2VuZXJhdG9yLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyOAojIVtmZWF0dXJlKGdlbmVyYXRvcnMsIGdlbmVyYXRvcl90cmFpdCldCgpmbiBtYWluKCkgewogICAgbGV0IGdlbmVyYXRvciA9IHxhOiBpMzIsIGI6IGkzMnwgewogICAgICAgIC8vIGVycm9yOiB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBhIGdlbmVyYXRvcgogICAgICAgIC8vIEFsbG93ZWQgb25seSAwIG9yIDEgcGFyYW1ldGVyCiAgICAgICAgeWllbGQgYTsKICAgIH07Cn0KYGBgCgpBdCBwcmVzZW50LCBpdCBpcyBub3QgcGVybWl0dGVkIHRvIHBhc3MgbW9yZSB0aGFuIG9uZSBleHBsaWNpdApwYXJhbWV0ZXIgZm9yIGEgZ2VuZXJhdG9yLlRoaXMgY2FuIGJlIGZpeGVkIGJ5IHVzaW5nCmF0IG1vc3QgMSBwYXJhbWV0ZXIgZm9yIHRoZSBnZW5lcmF0b3IuIEZvciBleGFtcGxlLCB3ZSBtaWdodCByZXNvbHZlCnRoZSBwcmV2aW91cyBleGFtcGxlIGJ5IHBhc3Npbmcgb25seSBvbmUgcGFyYW1ldGVyLgoKYGBgCiMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0KV0KCmZuIG1haW4oKSB7CiAgICBsZXQgZ2VuZXJhdG9yID0gfGE6IGkzMnwgewogICAgICAgIHlpZWxkIGE7CiAgICB9Owp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////P6IFogUAAQCiBQD0hAEmuAUAAOQKAAAA5QoAAL0CDgYAAOMKAgUBBFNvbWUBAQCfDgAB5AoAAL0CDgYAAuMKAAEAqAIkBgAA4goBAQCfDgACAKkCErcFAJ8OBQEFRTA2MjgAAR8FBQABAAUAqAIkBgAA4goBAQGkDgAB4woAAKOFASa6BQAA6QoAAAIAo4UBJroFAJ8OBQHwA1RoaXMgZXJyb3IgaW5kaWNhdGVzIGEgdHlwZSBtaXNtYXRjaCBpbiBjbG9zdXJlIGFyZ3VtZW50cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MzEKZm4gZm9vPEY6IEZuKGkzMik+KGY6IEYpIHsKfQoKZm4gbWFpbigpIHsKICAgIGZvbyh8eDogJnN0cnwge30pOwp9CmBgYAoKVGhlIGVycm9yIG9jY3VycyBiZWNhdXNlIGBmb29gIGFjY2VwdHMgYSBjbG9zdXJlIHRoYXQgdGFrZXMgYW4gYGkzMmAgYXJndW1lbnQsCmJ1dCBpbiBgbWFpbmAsIGl0IGlzIHBhc3NlZCBhIGNsb3N1cmUgd2l0aCBhIGAmc3RyYCBhcmd1bWVudC4KClRoaXMgY2FuIGJlIHJlc29sdmVkIGJ5IGNoYW5naW5nIHRoZSB0eXBlIGFubm90YXRpb24gb3IgcmVtb3ZpbmcgaXQgZW50aXJlbHkKaWYgaXQgY2FuIGJlIGluZmVycmVkLgoKYGBgCmZuIGZvbzxGOiBGbihpMzIpPihmOiBGKSB7Cn0KCmZuIG1haW4oKSB7CiAgICBmb28ofHg6IGkzMnwge30pOwp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8/8APwAwABAPADAKOFASa6BQAA6AoAAADpCgAAvQIOBgAA5woCBQEEU29tZQEBAJ8OAAHoCgAAvQIOBgAC5woAAQCoAiQGAADmCgEBAJ8OAAIAqQISuQUAnw4FAQVFMDYzMQABHwUFAAEABQCoAiQGAADmCgEBAaQOAAHnCgAA0oUBJrwFAADtCgAAAgDShQEmvAUAnw4FAbgFVGhlIGB1bndpbmRgIGF0dHJpYnV0ZSB3YXMgbWFsZm9ybWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYzMwojIVtmZWF0dXJlKHVud2luZF9hdHRyaWJ1dGVzKV0KCiNbdW53aW5kKCldIC8vIGVycm9yOiBleHBlY3RlZCBvbmUgYXJndW1lbnQKcHViIGV4dGVybiBmbiBzb21ldGhpbmcoKSB7fQoKZm4gbWFpbigpIHt9CmBgYAoKVGhlIGAjW3Vud2luZF1gIGF0dHJpYnV0ZSBzaG91bGQgYmUgdXNlZCBhcyBmb2xsb3dzOgoKLSBgI1t1bndpbmQoYWJvcnRzKV1gIC0tIHNwZWNpZmllcyB0aGF0IGlmIGEgbm9uLVJ1c3QgQUJJIGZ1bmN0aW9uCiAgc2hvdWxkIGFib3J0IHRoZSBwcm9jZXNzIGlmIGl0IGF0dGVtcHRzIHRvIHVud2luZC4gVGhpcyBpcyB0aGUgc2FmZXIKICBhbmQgcHJlZmVycmVkIG9wdGlvbi4KCi0gYCNbdW53aW5kKGFsbG93ZWQpXWAgLS0gc3BlY2lmaWVzIHRoYXQgYSBub24tUnVzdCBBQkkgZnVuY3Rpb24KICBzaG91bGQgYmUgYWxsb3dlZCB0byB1bndpbmQuIFRoaXMgY2FuIGVhc2lseSByZXN1bHQgaW4gVW5kZWZpbmVkCiAgQmVoYXZpb3IgKFVCKSwgc28gYmUgY2FyZWZ1bC4KCk5CLiBUaGUgZGVmYXVsdCBiZWhhdmlvciBoZXJlIGlzICJhbGxvd2VkIiwgYnV0IHRoaXMgaXMgdW5zcGVjaWZpZWQKYW5kIGxpa2VseSB0byBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////3+4BbgFAAEAuAUA0oUBJrwFAADsCgAAAO0KAAC9Ag4GAADrCgIFAQRTb21lAQEAnw4AAewKAAC9Ag4GAALr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ZWxzZSB7CiAgICAgICAgc3RyMgogICAgfQp9CmBgYAoKYCdfYCwgY2Fubm90IGJlIHVzZWQgYXMgYSBsaWZldGltZSBpZGVudGlmaWVyIGJlY2F1c2UgaXQgaXMgYSByZXNlcnZlZCBmb3IgdGhlCmFub255bW91cyBsaWZldGltZS4gVG8gZml4IHRoaXMsIHVzZSBhIGxvd2VyY2FzZSBsZXR0ZXIgc3VjaCBhcyAnYSwgb3IgYSBzZXJpZXMKb2YgbG93ZXJjYXNlIGxldHRlcnMgc3VjaCBhcyBgJ2Zvb2AuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFt0aGUKYm9va11bYmstbm9dLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlIGFub255bW91cyBsaWZldGltZSBpbiBydXN0Cm5pZ2h0bHksIHNlZSBbdGhlIG5pZ2h0bHkgYm9va11bYmstYWxdLgoKQ29ycmVjdGVkIGV4YW1wbGU6CgpgYGAKZm4gbG9uZ2VzdDwnYT4oc3RyMTogJidhIHN0ciwgc3RyMjogJidhIHN0cikgLT4gJidhIHN0ciB7CiAgICBpZiBzdHIxLmxlbigpID4gc3RyMi5sZW4oKSB7CiAgICAgICAgc3RyMQogICAgfSBlbHNlIHsKICAgICAgICBzdHIyCiAgICB9Cn0KYGBgCgpbYmstbm9dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svYXBwZW5kaXgtMDItb3BlcmF0b3JzLmh0bWwjbm9uLW9wZXJhdG9yLXN5bWJvbHMKW2JrLWFsXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9uaWdodGx5L2VkaXRpb24tZ3VpZGUvcnVzdC0yMDE4L293bmVyc2hpcC1hbmQtbGlmZXRpbWVzL3RoZS1hbm9ueW1vdXMtbGlmZXRpbWUuaHRtbAoAEf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wGPCI8IAAEAjwgAjocBJsQFAAD8CgAAAP0KAAC9Ag4GAAD7CgIFAQRTb21lAQEAnw4AAfwKAAC9Ag4GAAL7CgABAKgCJAYAAPoKAQEAnw4AAgCpAhLDBQCfDgUBBUUwNjM3AAEfBQUAAQAFAKgCJAYAAPoKAQEBpA4AAfsKAAC9hwEmxgUAAIELAAACAL2HASbGBQCfDgUBhQtUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBzdHJ1Y3QsIGVudW0gb3IgZW51bSB2YXJpYW50IG11c3QgYmUgbWF0Y2hlZApub24tZXhoYXVzdGl2ZWx5IGFzIGl0IGhhcyBiZWVuIG1hcmtlZCBhcyBgbm9uX2V4aGF1c3RpdmVgLgoKV2hlbiBhcHBsaWVkIHdpdGhpbiBhIGNyYXRlLCBkb3duc3RyZWFtIHVzZXJzIG9mIHRoZSBjcmF0ZSB3aWxsIG5lZWQgdG8gdXNlIHRoZQpgX2AgcGF0dGVybiB3aGVuIG1hdGNoaW5nIGVudW1zIGFuZCB1c2UgdGhlIGAuLmAgcGF0dGVybiB3aGVuIG1hdGNoaW5nIHN0cnVjdHMuCkRvd25zdHJlYW0gY3JhdGVzIGNhbm5vdCBtYXRjaCBhZ2FpbnN0IG5vbi1leGhhdXN0aXZlIGVudW0gdmFyaWFudHMuCgpGb3IgZXhhbXBsZSwgaW4gdGhlIGJlbG93IGV4YW1wbGUsIHNpbmNlIHRoZSBlbnVtIGlzIG1hcmtlZCBhcwpgbm9uX2V4aGF1c3RpdmVgLCBpdCBpcyByZXF1aXJlZCB0aGF0IGRvd25zdHJlYW0gY3JhdGVzIG1hdGNoIG5vbi1leGhhdXN0aXZlbHkKb24gaXQuCgpgYGBydXN0LGlnbm9yZSAocHNldWRvLVJ1c3QpCiNbbm9uX2V4aGF1c3RpdmVdCnB1YiBlbnVtIEVycm9yIHsKICAgIE1lc3NhZ2UoU3RyaW5nKSwKICAgIE90aGVyLAp9CgppbXBsIERpc3BsYXkgZm9yIEVycm9yIHsKICAgIGZuIGZtdCgmc2VsZiwgZm9ybWF0dGVyOiAmbXV0IGZtdDo6Rm9ybWF0dGVyKSAtPiBmbXQ6OlJlc3VsdCB7CiAgICAgICAgLy8gVGhpcyB3aWxsIG5vdCBlcnJvciwgZGVzcGl0ZSBiZWluZyBtYXJrZWQgYXMgbm9uX2V4aGF1c3RpdmUsIGFzIHRoaXMKICAgICAgICAvLyBlbnVtIGlzIGRlZmluZWQgd2l0aGluIHRoZSBjdXJyZW50IGNyYXRlLCBpdCBjYW4gYmUgbWF0Y2hlZAogICAgICAgIC8vIGV4aGF1c3RpdmVseS4KICAgICAgICBsZXQgZGlzcGxheSA9IG1hdGNoIHNlbGYgewogICAgICAgICAgICBNZXNzYWdlKHMpID0+IHMsCiAgICAgICAgICAgIE90aGVyID0+ICJvdGhlciBvciB1bmtub3duIGVycm9yIiwKICAgICAgICB9OwogICAgICAgIGZvcm1hdHRlci53cml0ZV9zdHIoZGlzcGxheSkKICAgIH0KfQpgYGAKCkFuIGV4YW1wbGUgb2YgbWF0Y2hpbmcgbm9uLWV4aGF1c3RpdmVseSBvbiB0aGUgYWJvdmUgZW51bSBpcyBwcm92aWRlZCBiZWxvdzoKCmBgYHJ1c3QsaWdub3JlIChwc2V1ZG8tUnVzdCkKdXNlIG15Y3JhdGU6OkVycm9yOwoKLy8gVGhpcyB3aWxsIG5vdCBlcnJvciBhcyB0aGUgbm9uX2V4aGF1c3RpdmUgRXJyb3IgZW51bSBoYXMgYmVlbiBtYXRjaGVkIHdpdGggYQovLyB3aWxkY2FyZC4KbWF0Y2ggZXJyb3IgewogICAgTWVzc2FnZShzKSA9PiAuLi4sCiAgICBPdGhlciA9PiAuLi4sCiAgICBfID0+IC4uLiwKfQpgYGAKClNpbWlsYXJseSwgZm9yIHN0cnVjdHMsIG1hdGNoIHdpdGggYC4uYCB0byBhdm9pZCB0aGlzIGVycm9yLgoAF////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEfhQuFCwABAIULAL2HASbGBQAAgAsAAACBCwAAvQIOBgAA/woCBQEEU29tZQEBAJ8OAAGACwAAvQIOBgAC/woAAQCoAiQGAAD+CgEBAJ8OAAIAqQISxQUAnw4FAQVFMDYzOAABHwUFAAEABQCoAiQGAAD+CgEBAaQOAAH/CgAA7IcBJsgFAACFCwAAAgDshwEmyAUAnw4FAd8EVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RydWN0LCBlbnVtIG9yIGVudW0gdmFyaWFudCBjYW5ub3QgYmUKaW5zdGFudGlhdGVkIGZyb20gb3V0c2lkZSBvZiB0aGUgZGVmaW5pbmcgY3JhdGUgYXMgaXQgaGFzIGJlZW4gbWFya2VkCmFzIGBub25fZXhoYXVzdGl2ZWAgYW5kIGFzIHN1Y2ggbW9yZSBmaWVsZHMvdmFyaWFudHMgbWF5IGJlIGFkZGVkIGluCmZ1dHVyZSB0aGF0IGNvdWxkIGNhdXNlIGFkdmVyc2Ugc2lkZSBlZmZlY3RzIGZvciB0aGlzIGNvZGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgaWdub3JlIChpdCBvbmx5IHdvcmtzIGNyb3NzLWNyYXRlKQojW25vbl9leGhhdXN0aXZlXQpwdWIgc3RydWN0IE5vcm1hbFN0cnVjdCB7CiAgICBwdWIgZmlyc3RfZmllbGQ6IHUxNiwKICAgIHB1YiBzZWNvbmRfZmllbGQ6IHUxNiwKfQoKbGV0IG5zID0gTm9ybWFsU3RydWN0IHsgZmlyc3RfZmllbGQ6IDY0MCwgc2Vjb25kX2ZpZWxkOiA0ODAgfTsgLy8gZXJyb3IhCmBgYAoKSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgbG9vayBmb3IgYSBgbmV3YCBmdW5jdGlvbiBvciBlcXVpdmFsZW50IGluIHRoZQpjcmF0ZSdzIGRvY3VtZW50YXRpb24uCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wffBN8EAAEA3wQA7IcBJsgFAACECwAAAIULAAC9Ag4GAACDCwIFAQRTb21lAQEAnw4AAYQLAAC9Ag4GAAKDCwABAKgCJAYAAIILAQEAnw4AAgCpAhLHBQCfDgUBBUUwNjM5AAEfBQUAAQAFAKgCJAYAAIILAQEBpA4AAYMLAACbiAEmygUAAIkLAAACAJuIASbKBQCfDgUBywNBdHRlbXB0ZWQgdG8gY2FzdCB0by9mcm9tIGEgcG9pbnRlciB3aXRoIGFuIHVua25vd24ga2luZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDEKbGV0IGIgPSAwIGFzICpjb25zdCBfOyAvLyBlcnJvcgpgYGAKClR5cGUgaW5mb3JtYXRpb24gbXVzdCBiZSBwcm92aWRlZCBpZiBhIHBvaW50ZXIgdHlwZSBiZWluZyBjYXN0IGZyb20vaW50byBhbm90aGVyCnR5cGUgd2hpY2ggY2Fubm90IGJlIGluZmVycmVkOgoKYGBgCi8vIENyZWF0aW5nIGEgcG9pbnRlciBmcm9tIHJlZmVyZW5jZTogdHlwZSBjYW4gYmUgaW5mZXJyZWQKbGV0IGEgPSAmKFN0cmluZzo6ZnJvbSgiSGVsbG8gd29ybGQhIikpIGFzICpjb25zdCBfOyAvLyBvayEKCmxldCBiID0gMCBhcyAqY29uc3QgaTMyOyAvLyBvayEKCmxldCBjOiAqY29uc3QgaTMyID0gMCBhcyAqY29uc3QgXzsgLy8gb2shCmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/D8sDywMAAQDLAwCbiAEmygUAAIgLAAAAiQsAAL0CDgYAAIcLAgUBBFNvbWUBAQCfDgABiAsAAL0CDgYAAocLAAEAqAIkBgAAhgsBAQCfDgACAKkCEskFAJ8OBQEFRTA2NDEAAR8FBQABAAUAqAIkBgAAhgsBAQGkDgABhwsAAMqIASbMBQAAjQsAAAIAyogBJswFAJ8OBQHuAlRyYWl0IG1ldGhvZHMgY3VycmVudGx5IGNhbm5vdCB0YWtlIHBhdHRlcm5zIGFzIGFyZ3VtZW50cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDIKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygoeCwgeSk6IChpMzIsIGkzMikpOyAvLyBlcnJvcjogcGF0dGVybnMgYXJlbid0IGFsbG93ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgaW4gdHJhaXQgbWV0aG9kcwp9CmBgYAoKWW91IGNhbiBpbnN0ZWFkIHVzZSBhIHNpbmdsZSBuYW1lIGZvciB0aGUgYXJndW1lbnQ6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGZvbyh4X2FuZF95OiAoaTMyLCBpMzIpKTsgLy8gb2shCn0KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH///////8P7gLuAgABAO4CAMqIASbMBQAAjAsAAACNCwAAvQIOBgAAiwsCBQEEU29tZQEBAJ8OAAGMCwAAvQIOBgACiwsAAQCoAiQGAACKCwEBAJ8OAAIAqQISywUAnw4FAQVFMDY0MgABHwUFAAEABQCoAiQGAACKCwEBAaQOAAGLCwAA+YgBJs4FAACRCwAAAgD5iAEmzgUAnw4FAYADVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gZ2VuZXJpYyBwYXJhbWV0ZXJzIGFuZAppbXBsIFRyYWl0IHBhcmFtZXRlcnMgaW4gYSB0cmFpdCBkZWNsYXJhdGlvbiB2ZXJzdXMgaXRzIGltcGwuCgpgYGBjb21waWxlX2ZhaWwsRTA2NDMKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygmc2VsZiwgXzogJmltcGwgSXRlcmF0b3IpOwp9CmltcGwgRm9vIGZvciAoKSB7CiAgICBmbiBmb288VTogSXRlcmF0b3I+KCZzZWxmLCBfOiAmVSkgeyB9IC8vIGVycm9yIG1ldGhvZCBgZm9vYCBoYXMgaW5jb21wYXRpYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpZ25hdHVyZSBmb3IgdHJhaXQKfQpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEAgAOAAwABAIADAPmIASbOBQAAkAsAAACRCwAAvQIOBgAAjwsCBQEEU29tZQEBAJ8OAAGQCwAAvQIOBgACjwsAAQCoAiQGAACOCwEBAJ8OAAIAqQISzQUAnw4FAQVFMDY0MwABHwUFAAEABQCoAiQGAACOCwEBAaQOAAGPCwAAqIkBJtAFAACVCwAAAgCoiQEm0AUAnw4FAekGQSBjbG9zdXJlIG9yIGdlbmVyYXRvciB3YXMgY29uc3RydWN0ZWQgdGhhdCByZWZlcmVuY2VzIGl0cyBvd24gdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDQKZm4gZml4PEY+KGY6ICZGKQogIHdoZXJlIEY6IEZuKCZGKQp7CiAgICBmKCZmKTsKfQoKZm4gbWFpbigpIHsKICAgIGZpeCgmfHl8IHsKICAgICAgICAvLyBIZXJlLCB3aGVuIGB4YCBpcyBjYWxsZWQsIHRoZSBwYXJhbWV0ZXIgYHlgIGlzIGVxdWFsIHRvIGB4YC4KICAgIH0pOwp9CmBgYAoKUnVzdCBkb2VzIG5vdCBwZXJtaXQgYSBjbG9zdXJlIHRvIGRpcmVjdGx5IHJlZmVyZW5jZSBpdHMgb3duIHR5cGUsCmVpdGhlciB0aHJvdWdoIGFuIGFyZ3VtZW50IChhcyBpbiB0aGUgZXhhbXBsZSBhYm92ZSkgb3IgYnkgY2FwdHVyaW5nCml0c2VsZiB0aHJvdWdoIGl0cyBlbnZpcm9ubWVudC4gVGhpcyByZXN0cmljdGlvbiBoZWxwcyBrZWVwIGNsb3N1cmUKaW5mZXJlbmNlIHRyYWN0YWJsZS4KClRoZSBlYXNpZXN0IGZpeCBpcyB0byByZXdyaXRlIHlvdXIgY2xvc3VyZSBpbnRvIGEgdG9wLWxldmVsIGZ1bmN0aW9uLApvciBpbnRvIGEgbWV0aG9kLiBJbiBzb21lIGNhc2VzLCB5b3UgbWF5IGFsc28gYmUgYWJsZSB0byBoYXZlIHlvdXIKY2xvc3VyZSBjYWxsIGl0c2VsZiBieSBjYXB0dXJpbmcgYSBgJkZuKClgIG9iamVjdCBvciBgZm4oKWAgcG9pbnRlcgp0aGF0IHJlZmVycyB0byBpdHNlbGYuIFRoYXQgaXMgcGVybWl0dGluZywgc2luY2UgdGhlIGNsb3N1cmUgd291bGQgYmUKaW52b2tpbmcgaXRzZWxmIHZpYSBhIHZpcnR1YWwgY2FsbCwgYW5kIGhlbmNlIGRvZXMgbm90IGRpcmVjdGx5CnJlZmVyZW5jZSBpdHMgb3duICp0eXBlKi4KAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8/6QbpBgABAOkGAKiJASbQBQAAlAsAAACVCwAAvQIOBgAAkwsCBQEEU29tZQEBAJ8OAAGUCwAAvQIOBgACkwsAAQCoAiQGAACSCwEBAJ8OAAIAqQISzwUAnw4FAQVFMDY0NAABHwUFAAEABQCoAiQGAACSCwEBAaQOAAGTCwAA14kBJtIFAACZCwAAAgDXiQEm0gUAnw4FAegBSXQgaXMgbm90IHBvc3NpYmxlIHRvIGRlZmluZSBgbWFpbmAgd2l0aCBhIHdoZXJlIGNsYXVzZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDYKZm4gbWFpbigpIHdoZXJlIGkzMjogQ29weSB7IC8vIGVycm9yOiBtYWluIGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkIHRvIGhhdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgd2hlcmUgY2xhdXNlCn0KYGBgCgAE////////////Af///////////wH///////////8B//////8f6AHoAQABAOgBANeJASbSBQAAmAsAAACZCwAAvQIOBgAAlwsCBQEEU29tZQEBAJ8OAAGYCwAAvQIOBgAClwsAAQCoAiQGAACWCwEBAJ8OAAIAqQIS0QUAnw4FAQVFMDY0NgABHwUFAAEABQCoAiQGAACWCwEBAaQOAAGXCwAAhooBJtQFAACdCwAAAgCGigEm1AUAnw4FAZUCVGhlIGBzdGFydGAgZnVuY3Rpb24gd2FzIGRlZmluZWQgd2l0aCBhIHdoZXJlIGNsYXVzZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDcKIyFbZmVhdHVyZShzdGFydCldCgojW3N0YXJ0XQpmbiBzdGFydChfOiBpc2l6ZSwgXzogKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemUgd2hlcmUgKCk6IENvcHkgewogICAgLy9eIGVycm9yOiBzdGFydCBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byBoYXZlIGEgd2hlcmUgY2xhdXNlCiAgICAwCn0KYGBgCgAF////////////Af///////////wH///////////8B////////////Af//f5UClQIAAQCVAgCGigEm1AUAAJwLAAAAnQsAAL0CDgYAAJsLAgUBBFNvbWUBAQCfDgABnAsAAL0CDgYAApsLAAEAqAIkBgAAmgsBAQCfDgACAKkCEtMFAJ8OBQEFRTA2NDcAAR8FBQABAAUAqAIkBgAAmgsBAQGkDgABmwsAALWKASbWBQAAoQsAAAIAtYoBJtYFAJ8OBQG0AkFuIGBleHBvcnRfbmFtZWAgYXR0cmlidXRlIGNvbnRhaW5zIG51bGwgY2hhcmFjdGVycyAoYFwwYCkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjQ4CiNbZXhwb3J0X25hbWU9IlwwZm9vIl0gLy8gZXJyb3I6IGBleHBvcnRfbmFtZWAgbWF5IG5vdCBjb250YWluIG51bGwgY2hhcmFjdGVycwpwdWIgZm4gYmFyKCkge30KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcmVtb3ZlIHRoZSBudWxsIGNoYXJhY3RlcnM6CgpgYGAKI1tleHBvcnRfbmFtZT0iZm9vIl0gLy8gb2shCnB1YiBmbiBiYXIoKSB7fQpgYGAKAAX///////////8B////////////Af///////////wH///////////8B/////////we0ArQCAAEAtAIAtYoBJtYFAACgCwAAAKELAAC9Ag4GAACfCwIFAQRTb21lAQEAnw4AAaALAAC9Ag4GAAKfCwABAKgCJAYAAJ4LAQEAnw4AAgCpAhLVBQCfDgUBBUUwNjQ4AAEfBQUAAQAFAKgCJAYAAJ4LAQEBpA4AAZ8LAADkigEm2AUAAKULAAACAOSKASbYBQCfDgUB+AhBIGxpZmV0aW1lIGJvdW5kIG9uIGEgdHJhaXQgaW1wbGVtZW50YXRpb24gd2FzIGNhcHR1cmVkIGF0IGFuIGluY29ycmVjdCBwbGFjZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NTcKdHJhaXQgSWQ8VD4ge30KdHJhaXQgTHQ8J2E+IHt9CgppbXBsPCdhPiBMdDwnYT4gZm9yICgpIHt9CmltcGw8VD4gSWQ8VD4gZm9yIFQge30KCmZuIGZyZWVfZm5fY2FwdHVyZV9ocnRiX2luX2ltcGxfdHJhaXQoKQogICAgLT4gQm94PGZvcjwnYT4gSWQ8aW1wbCBMdDwnYT4+PiAvLyBlcnJvciEKewogICAgQm94OjpuZXcoKCkpCn0KCnN0cnVjdCBGb287CmltcGwgRm9vIHsKICAgIGZuIGltcGxfZm5fY2FwdHVyZV9ocnRiX2luX2ltcGxfdHJhaXQoKQogICAgICAgIC0+IEJveDxmb3I8J2E+IElkPGltcGwgTHQ8J2E+Pj4gLy8gZXJyb3IhCiAgICB7CiAgICAgICAgQm94OjpuZXcoKCkpCiAgICB9Cn0KYGBgCgpIZXJlLCB5b3UgaGF2ZSB1c2VkIHRoZSBpbmFwcHJvcHJpYXRlIGxpZmV0aW1lIGluIHRoZSBgaW1wbCBUcmFpdGAsClRoZSBgaW1wbCBUcmFpdGAgY2FuIG9ubHkgY2FwdHVyZSBsaWZldGltZXMgYm91bmQgYXQgdGhlIGZuIG9yIGltcGwKbGV2ZWwuCgpUbyBmaXggdGhpcyB3ZSBoYXZlIHRvIGRlZmluZSB0aGUgbGlmZXRpbWUgYXQgdGhlIGZ1bmN0aW9uIG9yIGltcGwKbGV2ZWwgYW5kIHVzZSB0aGF0IGxpZmV0aW1lIGluIHRoZSBgaW1wbCBUcmFpdGAuIEZvciBleGFtcGxlIHlvdSBjYW4KZGVmaW5lIHRoZSBsaWZldGltZSBhdCB0aGUgZnVuY3Rpb246CgpgYGAKdHJhaXQgSWQ8VD4ge30KdHJhaXQgTHQ8J2E+IHt9CgppbXBsPCdhPiBMdDwnYT4gZm9yICgpIHt9CmltcGw8VD4gSWQ8VD4gZm9yIFQge30KCmZuIGZyZWVfZm5fY2FwdHVyZV9ocnRiX2luX2ltcGxfdHJhaXQ8J2I+KCkKICAgIC0+IEJveDxmb3I8J2E+IElkPGltcGwgTHQ8J2I+Pj4gLy8gb2shCnsKICAgIEJveDo6bmV3KCgpKQp9CgpzdHJ1Y3QgRm9vOwppbXBsIEZvbyB7CiAgICBmbiBpbXBsX2ZuX2NhcHR1cmVfaHJ0Yl9pbl9pbXBsX3RyYWl0PCdiPigpCiAgICAgICAgLT4gQm94PGZvcjwnYT4gSWQ8aW1wbCBMdDwnYj4+PiAvLyBvayEKICAgIHsKICAgICAgICBCb3g6Om5ldygoKSkKICAgIH0KfQpgYGAKABL///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////9/+Aj4CAABAPgIAOSKASbYBQAApAsAAAClCwAAvQIOBgAAowsCBQEEU29tZQEBAJ8OAAGkCwAAvQIOBgACowsAAQCoAiQGAACiCwEBAJ8OAAIAqQIS1wUAnw4FAQVFMDY1NwABHwUFAAEABQCoAiQGAACiCwEBAaQOAAGjCwAAk4sBJtoFAACpCwAAAgCTiwEm2gUAnw4FAZwEQW4gdW5zdGFibGUgZmVhdHVyZSB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NTgKI1tyZXByKHUxMjgpXSAvLyBlcnJvcjogdXNlIG9mIHVuc3RhYmxlIGxpYnJhcnkgZmVhdHVyZSAncmVwcjEyOCcKZW51bSBGb28gewogICAgQmFyKHU2NCksCn0KYGBgCgpJZiB5b3UncmUgdXNpbmcgYSBzdGFibGUgb3IgYSBiZXRhIHZlcnNpb24gb2YgcnVzdGMsIHlvdSB3b24ndCBiZSBhYmxlIHRvIHVzZQphbnkgdW5zdGFibGUgZmVhdHVyZXMuIEluIG9yZGVyIHRvIGRvIHNvLCBwbGVhc2Ugc3dpdGNoIHRvIGEgbmlnaHRseSB2ZXJzaW9uIG9mCnJ1c3RjIChieSB1c2luZyBydXN0dXApLgoKSWYgeW91J3JlIHVzaW5nIGEgbmlnaHRseSB2ZXJzaW9uIG9mIHJ1c3RjLCBqdXN0IGFkZCB0aGUgY29ycmVzcG9uZGluZyBmZWF0dXJlCnRvIGJlIGFibGUgdG8gdXNlIGl0OgoKYGBgCiMhW2ZlYXR1cmUocmVwcjEyOCldCgojW3JlcHIodTEyOCldIC8vIG9rIQplbnVtIEZvbyB7CiAgICBCYXIodTY0KSwKfQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///3+cBJwEAAEAnAQAk4sBJtoFAACoCwAAAKkLAAC9Ag4GAACnCwIFAQRTb21lAQEAnw4AAagLAAC9Ag4GAAKnCwABAKgCJAYAAKYLAQEAnw4AAgCpAhLZBQCfDgUBBUUwNjU4AAEfBQUAAQAFAKgCJAYAAKYLAQEBpA4AAacLAADCiwEm3AUAAK0LAAACAMKLASbcBQCfDgUBqAdBbiBpdGVtIHVzYWdlIGlzIGFtYmlndW91cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsZWRpdGlvbjIwMTgsRTA2NTkKcHViIG1vZCBtb29uIHsKICAgIHB1YiBmbiBmb28oKSB7fQp9CgpwdWIgbW9kIGVhcnRoIHsKICAgIHB1YiBmbiBmb28oKSB7fQp9Cgptb2QgY29sbGlkZXIgewogICAgcHViIHVzZSBjcmF0ZTo6bW9vbjo6KjsKICAgIHB1YiB1c2UgY3JhdGU6OmVhcnRoOjoqOwp9CgpmbiBtYWluKCkgewogICAgY3JhdGU6OmNvbGxpZGVyOjpmb28oKTsgLy8gRVJST1I6IGBmb29gIGlzIGFtYmlndW91cwp9CmBgYAoKVGhpcyBlcnJvciBnZW5lcmFsbHkgYXBwZWFycyB3aGVuIHR3byBpdGVtcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXJlIGltcG9ydGVkIGludG8KYSBtb2R1bGUuIEhlcmUsIHRoZSBgZm9vYCBmdW5jdGlvbnMgYXJlIGltcG9ydGVkIGFuZCByZWV4cG9ydGVkIGZyb20gdGhlCmBjb2xsaWRlcmAgbW9kdWxlIGFuZCB0aGVyZWZvcmUsIHdoZW4gd2UncmUgdXNpbmcgYGNvbGxpZGVyOjpmb28oKWAsIGJvdGgKZnVuY3Rpb25zIGNvbGxpZGUuCgpUbyBzb2x2ZSB0aGlzIGVycm9yLCB0aGUgYmVzdCBzb2x1dGlvbiBpcyBnZW5lcmFsbHkgdG8ga2VlcCB0aGUgcGF0aCBiZWZvcmUgdGhlCml0ZW0gd2hlbiB1c2luZyBpdC4gRXhhbXBsZToKCmBgYGVkaXRpb24yMDE4CnB1YiBtb2QgbW9vbiB7CiAgICBwdWIgZm4gZm9vKCkge30KfQoKcHViIG1vZCBlYXJ0aCB7CiAgICBwdWIgZm4gZm9vKCkge30KfQoKbW9kIGNvbGxpZGVyIHsKICAgIHB1YiB1c2UgY3JhdGU6Om1vb247CiAgICBwdWIgdXNlIGNyYXRlOjplYXJ0aDsKfQoKZm4gbWFpbigpIHsKICAgIGNyYXRlOjpjb2xsaWRlcjo6bW9vbjo6Zm9vKCk7IC8vIG9rIQogICAgY3JhdGU6OmNvbGxpZGVyOjplYXJ0aDo6Zm9vKCk7IC8vIG9rIQp9CmBgYAoAD////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8fqAeoBwABAKgHAMKLASbcBQAArAsAAACtCwAAvQIOBgAAqwsCBQEEU29tZQEBAJ8OAAGsCwAAvQIOBgACqwsAAQCoAiQGAACqCwEBAJ8OAAIAqQIS2wUAnw4FAQVFMDY1OQABHwUFAAEABQCoAiQGAACqCwEBAaQOAAGrCwAA8YsBJt4FAACxCwAAAgDxiwEm3gUAnw4FAesCVGhlIGFyZ3VtZW50IHRvIHRoZSBgbGx2bV9hc21gIG1hY3JvIGlzIG5vdCB3ZWxsLWZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NjAKbGx2bV9hc20hKCJub3AiICJub3AiKTsKYGBgCgpDb25zaWRlcmluZyB0aGF0IHRoaXMgd291bGQgYmUgYSBsb25nIGV4cGxhbmF0aW9uLCB3ZSBpbnN0ZWFkIHJlY29tbWVuZCB5b3UKdGFrZSBhIGxvb2sgYXQgdGhlIFtgbGx2bV9hc21gXSBjaGFwdGVyIG9mIHRoZSBVbnN0YWJsZSBib29rOgoKW2xsdm1fYXNtXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGFibGUvdW5zdGFibGUtYm9vay9saWJyYXJ5LWZlYXR1cmVzL2xsdm0tYXNtLmh0bWwKAAb///////////8B////////////Af///////////wH///////////8B////////////Af///////wHrAusCAAEA6wIA8YsBJt4FAACwCwAAALELAAC9Ag4GAACvCwIFAQRTb21lAQEAnw4AAbALAAC9Ag4GAAKvCwABAKgCJAYAAK4LAQEAnw4AAgCpAhLdBQCfDgUBBUUwNjYwAAEfBQUAAQAFAKgCJAYAAK4LAQEBpA4AAa8LAACgjAEm4AUAALULAAACAKCMASbgBQCfDgUBjQNBbiBpbnZhbGlkIHN5bnRheCB3YXMgcGFzc2VkIHRvIHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgYW4gYGxsdm1fYXNtYCBtYWNybyBsaW5lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY2MQpsZXQgYTsKbGx2bV9hc20hKCJub3AiIDogInIiKGEpKTsKYGBgCgpDb25zaWRlcmluZyB0aGF0IHRoaXMgd291bGQgYmUgYSBsb25nIGV4cGxhbmF0aW9uLCB3ZSBpbnN0ZWFkIHJlY29tbWVuZCB5b3UKdGFrZSBhIGxvb2sgYXQgdGhlIFtgbGx2bV9hc21gXSBjaGFwdGVyIG9mIHRoZSBVbnN0YWJsZSBib29rOgoKW2xsdm1fYXNtXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGFibGUvdW5zdGFibGUtYm9vay9saWJyYXJ5LWZlYXR1cmVzL2xsdm0tYXNtLmh0bWwKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/P40DjQMAAQCNAwCgjAEm4AUAALQLAAAAtQsAAL0CDgYAALMLAgUBBFNvbWUBAQCfDgABtAsAAL0CDgYAArMLAAEAqAIkBgAAsgsBAQCfDgACAKkCEt8FAJ8OBQEFRTA2NjEAAR8FBQABAAUAqAIkBgAAsgsBAQGkDgABswsAAM+MASbiBQAAuQsAAAIAz4wBJuIFAJ8OBQG7A0FuIGludmFsaWQgaW5wdXQgb3BlcmFuZCBjb25zdHJhaW50IHdhcyBwYXNzZWQgdG8gdGhlIGBsbHZtX2FzbWAgbWFjcm8KKHRoaXJkIGxpbmUpLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY2MgpsbHZtX2FzbSEoInhvciAlZWF4LCAlZWF4IgogICAgICAgICAgOgogICAgICAgICAgOiAiPXRlc3QiKCJhIikKICAgICAgICAgKTsKYGBgCgpDb25zaWRlcmluZyB0aGF0IHRoaXMgd291bGQgYmUgYSBsb25nIGV4cGxhbmF0aW9uLCB3ZSBpbnN0ZWFkIHJlY29tbWVuZCB5b3UKdGFrZSBhIGxvb2sgYXQgdGhlIFtgbGx2bV9hc21gXSBjaGFwdGVyIG9mIHRoZSBVbnN0YWJsZSBib29rOgoKW2xsdm1fYXNtXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGFibGUvdW5zdGFibGUtYm9vay9saWJyYXJ5LWZlYXR1cmVzL2xsdm0tYXNtLmh0bWwKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////we7A7sDAAEAuwMAz4wBJuIFAAC4CwAAALkLAAC9Ag4GAAC3CwIFAQRTb21lAQEAnw4AAbgLAAC9Ag4GAAK3CwABAKgCJAYAALYLAQEAnw4AAgCpAhLhBQCfDgUBBUUwNjYyAAEfBQUAAQAFAKgCJAYAALYLAQEBpA4AAbcLAAD+jAEm5AUAAL0LAAACAP6MASbkBQCfDgUBuwNBbiBpbnZhbGlkIGlucHV0IG9wZXJhbmQgY29uc3RyYWludCB3YXMgcGFzc2VkIHRvIHRoZSBgbGx2bV9hc21gIG1hY3JvCih0aGlyZCBsaW5lKS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NjMKbGx2bV9hc20hKCJ4b3IgJWVheCwgJWVheCIKICAgICAgICAgIDoKICAgICAgICAgIDogIit0ZXN0IigiYSIpCiAgICAgICAgICk7CmBgYAoKQ29uc2lkZXJpbmcgdGhhdCB0aGlzIHdvdWxkIGJlIGEgbG9uZyBleHBsYW5hdGlvbiwgd2UgaW5zdGVhZCByZWNvbW1lbmQgeW91CnRha2UgYSBsb29rIGF0IHRoZSBbYGxsdm1fYXNtYF0gY2hhcHRlciBvZiB0aGUgVW5zdGFibGUgYm9vazoKCltsbHZtX2FzbV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RhYmxlL3Vuc3RhYmxlLWJvb2svbGlicmFyeS1mZWF0dXJlcy9sbHZtLWFzbS5odG1sCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8HuwO7AwABALsDAP6MASbkBQAAvAsAAAC9CwAAvQIOBgAAuwsCBQEEU29tZQEBAJ8OAAG8CwAAvQIOBgACuwsAAQCoAiQGAAC6CwEBAJ8OAAIAqQIS4wUAnw4FAQVFMDY2MwABHwUFAAEABQCoAiQGAAC6CwEBAaQOAAG7CwAArY0BJuYFAADBCwAAAgCtjQEm5gUAnw4FAawDQSBjbG9iYmVyIHdhcyBzdXJyb3VuZGVkIGJ5IGJyYWNlcyBpbiB0aGUgYGxsdm1fYXNtYCBtYWNyby4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NjQKbGx2bV9hc20hKCJtb3YgJCQweDIwMCwgJWVheCIKICAgICAgICAgIDoKICAgICAgICAgIDoKICAgICAgICAgIDogIntlYXh9IgogICAgICAgICApOwpgYGAKCkNvbnNpZGVyaW5nIHRoYXQgdGhpcyB3b3VsZCBiZSBhIGxvbmcgZXhwbGFuYXRpb24sIHdlIGluc3RlYWQgcmVjb21tZW5kIHlvdQp0YWtlIGEgbG9vayBhdCB0aGUgW2BsbHZtX2FzbWBdIGNoYXB0ZXIgb2YgdGhlIFVuc3RhYmxlIGJvb2s6CgpbbGx2bV9hc21dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0YWJsZS91bnN0YWJsZS1ib29rL2xpYnJhcnktZmVhdHVyZXMvbGx2bS1hc20uaHRtbAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////wOsA6wDAAEArAMArY0BJuYFAADACwAAAMELAAC9Ag4GAAC/CwIFAQRTb21lAQEAnw4AAcALAAC9Ag4GAAK/CwABAKgCJAYAAL4LAQEAnw4AAgCpAhLlBQCfDgUBBUUwNjY0AAEfBQUAAQAFAKgCJAYAAL4LAQEBpA4AAb8LAADcjQEm6AUAAMULAAACANyNASboBQCfDgUByQRUaGUgYERlZmF1bHRgIHRyYWl0IHdhcyBkZXJpdmVkIG9uIGFuIGVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjY1CiNbZGVyaXZlKERlZmF1bHQpXQplbnVtIEZvb2QgewogICAgU3dlZXQsCiAgICBTYWx0eSwKfQpgYGAKClRoZSBgRGVmYXVsdGAgY2Fubm90IGJlIGRlcml2ZWQgb24gYW4gZW51bSBmb3IgdGhlIHNpbXBsZSByZWFzb24gdGhhdCB0aGUKY29tcGlsZXIgZG9lc24ndCBrbm93IHdoaWNoIHZhbHVlIHRvIHBpY2sgYnkgZGVmYXVsdCB3aGVyZWFzIGl0IGNhbiBmb3IgYQpzdHJ1Y3QgYXMgbG9uZyBhcyBhbGwgaXRzIGZpZWxkcyBpbXBsZW1lbnQgdGhlIGBEZWZhdWx0YCB0cmFpdCBhcyB3ZWxsLgoKSWYgeW91IHN0aWxsIHdhbnQgdG8gaW1wbGVtZW50IGBEZWZhdWx0YCBvbiB5b3VyIGVudW0sIHlvdSdsbCBoYXZlIHRvIGRvIGl0ICJieQpoYW5kIjoKCmBgYAplbnVtIEZvb2QgewogICAgU3dlZXQsCiAgICBTYWx0eSwKfQoKaW1wbCBEZWZhdWx0IGZvciBGb29kIHsKICAgIGZuIGRlZmF1bHQoKSAtPiBGb29kIHsKICAgICAgICBGb29kOjpTd2VldAogICAgfQp9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8DyQTJBAABAMkEANyNASboBQAAxAsAAADFCwAAvQIOBgAAwwsCBQEEU29tZQEBAJ8OAAHECwAAvQIOBgACwwsAAQCoAiQGAADCCwEBAJ8OAAIAqQIS5wUAnw4FAQVFMDY2NQABHwUFAAEABQCoAiQGAADCCwEBAaQOAAHDCwAAi44BJuoFAADJCwAAAgCLjgEm6gUAnw4FAe0DYGltcGwgVHJhaXRgIHR5cGVzIGNhbm5vdCBhcHBlYXIgbmVzdGVkIGluIHRoZSBnZW5lcmljIGFyZ3VtZW50cyBvZiBvdGhlcgpgaW1wbCBUcmFpdGAgdHlwZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjY2CnRyYWl0IE15R2VuZXJpY1RyYWl0PFQ+IHt9CnRyYWl0IE15SW5uZXJUcmFpdCB7fQoKZm4gZm9vKAogICAgYmFyOiBpbXBsIE15R2VuZXJpY1RyYWl0PGltcGwgTXlJbm5lclRyYWl0PiwgLy8gZXJyb3IhCikge30KYGBgCgpUeXBlIHBhcmFtZXRlcnMgZm9yIGBpbXBsIFRyYWl0YCB0eXBlcyBtdXN0IGJlIGV4cGxpY2l0bHkgZGVmaW5lZCBhcyBuYW1lZApnZW5lcmljIHBhcmFtZXRlcnM6CgpgYGAKdHJhaXQgTXlHZW5lcmljVHJhaXQ8VD4ge30KdHJhaXQgTXlJbm5lclRyYWl0IHt9CgpmbiBmb288VDogTXlJbm5lclRyYWl0PigKICAgIGJhcjogaW1wbCBNeUdlbmVyaWNUcmFpdDxUPiwgLy8gb2shCikge30KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////wftA+0DAAEA7QMAi44BJuoFAADICwAAAMkLAAC9Ag4GAADHCwIFAQRTb21lAQEAnw4AAcgLAAC9Ag4GAALHCwABAKgCJAYAAMYLAQEAnw4AAgCpAhLpBQCfDgUBBUUwNjY2AAEfBQUAAQAFAKgCJAYAAMYLAQEBpA4AAccLAAC6jgEm7AUAAM0LAAACALqOASbsBQCfDgUBsQRNYWxmb3JtZWQgaW5saW5lIGFzc2VtYmx5IHJlamVjdGVkIGJ5IExMVk0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjY4CiMhW2ZlYXR1cmUobGx2bV9hc20pXQoKZm4gbWFpbigpIHsKICAgIGxldCByYXg6IHU2NDsKICAgIHVuc2FmZSB7CiAgICAgICAgbGx2bV9hc20hKCIiIDoiPXtyYXgiKHJheCkpOwogICAgICAgIHByaW50bG4hKCJBY2N1bXVsYXRvciBpczoge30iLCByYXgpOwogICAgfQp9CmBgYAoKTExWTSBjaGVja3MgdGhlIHZhbGlkaXR5IG9mIHRoZSBjb25zdHJhaW50cyBhbmQgdGhlIGFzc2VtYmx5IHN0cmluZyBwYXNzZWQgdG8KaXQuIFRoaXMgZXJyb3IgaW1wbGllcyB0aGF0IExMVk0gc2VlbXMgc29tZXRoaW5nIHdyb25nIHdpdGggdGhlIGlubGluZQphc3NlbWJseSBjYWxsLgoKSW4gcGFydGljdWxhciwgaXQgY2FuIGhhcHBlbiBpZiB5b3UgZm9yZ290IHRoZSBjbG9zaW5nIGJyYWNrZXQgb2YgYSByZWdpc3Rlcgpjb25zdHJhaW50IChzZWUgaXNzdWUgIzUxNDMwKSwgbGlrZSBpbiB0aGUgcHJldmlvdXMgY29kZSBleGFtcGxlLgoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////f7EEsQQAAQCxBAC6jgEm7AUAAMwLAAAAzQsAAL0CDgYAAMsLAgUBBFNvbWUBAQCfDgABzAsAAL0CDgYAAssLAAEAqAIkBgAAygsBAQCfDgACAKkCEusFAJ8OBQEFRTA2NjgAAR8FBQABAAUAqAIkBgAAygsBAQGkDgABywsAAOmOASbuBQAA0QsAAAIA6Y4BJu4FAJ8OBQGOBUNhbm5vdCBjb252ZXJ0IGlubGluZSBhc3NlbWJseSBvcGVyYW5kIHRvIGEgc2luZ2xlIExMVk0gdmFsdWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjY5CiMhW2ZlYXR1cmUobGx2bV9hc20pXQoKZm4gbWFpbigpIHsKICAgIHVuc2FmZSB7CiAgICAgICAgbGx2bV9hc20hKCIiIDo6ICJyIigiIikpOyAvLyBlcnJvciEKICAgIH0KfQpgYGAKClRoaXMgZXJyb3IgdXN1YWxseSBoYXBwZW5zIHdoZW4gdHJ5aW5nIHRvIHBhc3MgaW4gYSB2YWx1ZSB0byBhbiBpbnB1dCBpbmxpbmUKYXNzZW1ibHkgb3BlcmFuZCB0aGF0IGlzIGFjdHVhbGx5IGEgcGFpciBvZiB2YWx1ZXMuIEluIHBhcnRpY3VsYXIsIHRoaXMgY2FuCmhhcHBlbiB3aGVuIHRyeWluZyB0byBwYXNzIGluIGEgc2xpY2UsIGZvciBpbnN0YW5jZSBhIGAmc3RyYC4gSW4gUnVzdCwgdGhlc2UKdmFsdWVzIGFyZSByZXByZXNlbnRlZCBpbnRlcm5hbGx5IGFzIGEgcGFpciBvZiB2YWx1ZXMsIHRoZSBwb2ludGVyIGFuZCBpdHMKbGVuZ3RoLiBXaGVuIHBhc3NlZCBhcyBhbiBpbnB1dCBvcGVyYW5kLCB0aGlzIHBhaXIgb2YgdmFsdWVzIGNhbiBub3QgYmUKY29lcmNlZCBpbnRvIGEgcmVnaXN0ZXIgYW5kIHRodXMgd2UgbXVzdCBmYWlsIHdpdGggYW4gZXJyb3IuCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af9/jgWOBQABAI4FAOmOASbuBQAA0AsAAADRCwAAvQIOBgAAzwsCBQEEU29tZQEBAJ8OAAHQCwAAvQIOBgACzwsAAQCoAiQGAADOCwEBAJ8OAAIAqQIS7QUAnw4FAQVFMDY2OQABHwUFAAEABQCoAiQGAADOCwEBAaQOAAHPCwAAmI8BJvAFAADVCwAAAgCYjwEm8AUAnw4FAasBUnVzdCAyMDE1IGRvZXMgbm90IHBlcm1pdCB0aGUgdXNlIG9mIGBhc3luYyBmbmAuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjcwCmFzeW5jIGZuIGZvbygpIHt9CmBgYAoKU3dpdGNoIHRvIHRoZSBSdXN0IDIwMTggZWRpdGlvbiB0byB1c2UgYGFzeW5jIGZuYC4KAAP///////////8B////////////Af///////wGrAasBAAEAqwEAmI8BJvAFAADUCwAAANULAAC9Ag4GAADTCwIFAQRTb21lAQEAnw4AAdQLAAC9Ag4GAALTCwABAKgCJAYAANILAQEAnw4AAgCpAhLvBQCfDgUBBUUwNjcwAAEfBQUAAQAFAKgCJAYAANILAQEBpA4AAdMLAADHjwEm8gUAANkLAAACAMePASbyBQCfDgUBhgIjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpDb25zdCBwYXJhbWV0ZXJzIGNhbm5vdCBkZXBlbmQgb24gdHlwZSBwYXJhbWV0ZXJzLgpUaGUgZm9sbG93aW5nIGlzIHRoZXJlZm9yZSBpbnZhbGlkOgoKYGBgY29tcGlsZV9mYWlsLEUwNzcwCiMhW2ZlYXR1cmUoY29uc3RfZ2VuZXJpY3MpXQoKZm4gY29uc3RfaWQ8VCwgY29uc3QgTjogVD4oKSAtPiBUIHsgLy8gZXJyb3IKICAgIE4KfQpgYGAKAAX///////////8B////////////Af///////////wH///////////8BP4YChgIAAQCGAgDHjwEm8gUAANgLAAAA2QsAAL0CDgYAANcLAgUBBFNvbWUBAQCfDgAB2AsAAL0CDgYAAtcLAAEAqAIkBgAA1gsBAQCfDgACAKkCEvEFAJ8OBQEFRTA2NzEAAR8FBQABAAUAqAIkBgAA1gsBAQGkDgAB1wsAAPaPASb0BQAA3QsAAAIA9o8BJvQFAJ8OBQG1BUluLWJhbmQgbGlmZXRpbWVzIGNhbm5vdCBiZSB1c2VkIGluIGBmbmAvYEZuYCBzeW50YXguCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDY4NwojIVtmZWF0dXJlKGluX2JhbmRfbGlmZXRpbWVzKV0KCmZuIGZvbyh4OiBmbigmJ2EgdTMyKSkge30gLy8gZXJyb3IhCgpmbiBiYXIoeDogJkZuKCYnYSB1MzIpKSB7fSAvLyBlcnJvciEKCmZuIGJheih4OiBmbigmJ2EgdTMyKSwgeTogJidhIHUzMikge30gLy8gZXJyb3IhCgpzdHJ1Y3QgRm9vPCdhPiB7IHg6ICYnYSB1MzIgfQoKaW1wbCBGb288J2E+IHsKICAgIGZuIGJhcigmc2VsZiwgeDogZm4oJidhIHUzMikpIHt9IC8vIGVycm9yIQp9CmBgYAoKTGlmZXRpbWVzIHVzZWQgaW4gYGZuYCBvciBgRm5gIHN5bnRheCBtdXN0IGJlIGV4cGxpY2l0bHkKZGVjbGFyZWQgdXNpbmcgYDwuLi4+YCBiaW5kZXJzLiBGb3IgZXhhbXBsZToKCmBgYApmbiBmb288J2E+KHg6IGZuKCYnYSB1MzIpKSB7fSAvLyBvayEKCmZuIGJhcjwnYT4oeDogJkZuKCYnYSB1MzIpKSB7fSAvLyBvayEKCmZuIGJhejwnYT4oeDogZm4oJidhIHUzMiksIHk6ICYnYSB1MzIpIHt9IC8vIG9rIQoKc3RydWN0IEZvbzwnYT4geyB4OiAmJ2EgdTMyIH0KCmltcGw8J2E+IEZvbzwnYT4gewogICAgZm4gYmFyKCZzZWxmLCB4OiBmbigmJ2EgdTMyKSkge30gLy8gb2shCn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8PtQW1BQABALUFAPaPASb0BQAA3AsAAADdCwAAvQIOBgAA2wsCBQEEU29tZQEBAJ8OAAHcCwAAvQIOBgAC2wsAAQCoAiQGAADaCwEBAJ8OAAIAqQIS8wUAnw4FAQVFMDY4NwABHwUFAAEABQCoAiQGAADaCwEBAaQOAAHbCwAApZABJvYFAADhCwAAAgClkAEm9gUAnw4FAZkFSW4tYmFuZCBsaWZldGltZXMgd2VyZSBtaXhlZCB3aXRoIGV4cGxpY2l0IGxpZmV0aW1lIGJpbmRlcnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjg4CiMhW2ZlYXR1cmUoaW5fYmFuZF9saWZldGltZXMpXQoKZm4gZm9vPCdhPih4OiAmJ2EgdTMyLCB5OiAmJ2IgdTMyKSB7fSAgIC8vIGVycm9yIQoKc3RydWN0IEZvbzwnYT4geyB4OiAmJ2EgdTMyIH0KCmltcGwgRm9vPCdhPiB7CiAgICBmbiBiYXI8J2I+KHg6ICYnYSB1MzIsIHk6ICYnYiB1MzIsIHo6ICYnYyB1MzIpIHt9ICAgLy8gZXJyb3IhCn0KCmltcGw8J2I+IEZvbzwnYT4geyAgLy8gZXJyb3IhCiAgICBmbiBiYXooKSB7fQp9CmBgYAoKSW4tYmFuZCBsaWZldGltZXMgY2Fubm90IGJlIG1peGVkIHdpdGggZXhwbGljaXQgbGlmZXRpbWUgYmluZGVycy4KRm9yIGV4YW1wbGU6CgpgYGAKZm4gZm9vPCdhLCAnYj4oeDogJidhIHUzMiwgeTogJidiIHUzMikge30gICAvLyBvayEKCnN0cnVjdCBGb288J2E+IHsgeDogJidhIHUzMiB9CgppbXBsPCdhPiBGb288J2E+IHsKICAgIGZuIGJhcjwnYiwnYz4oeDogJidhIHUzMiwgeTogJidiIHUzMiwgejogJidjIHUzMikge30gICAgLy8gb2shCn0KCmltcGw8J2E+IEZvbzwnYT4geyAgLy8gb2shCiAgICBmbiBiYXooKSB7fQp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8PmQWZBQABAJkFAKWQASb2BQAA4AsAAADhCwAAvQIOBgAA3wsCBQEEU29tZQEBAJ8OAAHgCwAAvQIOBgAC3wsAAQCoAiQGAADeCwEBAJ8OAAIAqQIS9QUAnw4FAQVFMDY4OAABHwUFAAEABQCoAiQGAADeCwEBAaQOAAHfCwAA1JABJvgFAADlCwAAAgDUkAEm+AUAnw4FAY0FQSBtZXRob2Qgd2FzIGNhbGxlZCBvbiBhbiBhbWJpZ3VvdXMgbnVtZXJpYyB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY4OQoyLjAubmVnKCk7IC8vIGVycm9yIQpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIG51bWVyaWMgdmFsdWUgZm9yIHRoZSBtZXRob2QgYmVpbmcgcGFzc2VkIGV4aXN0cwpidXQgdGhlIHR5cGUgb2YgdGhlIG51bWVyaWMgdmFsdWUgb3IgYmluZGluZyBjb3VsZCBub3QgYmUgaWRlbnRpZmllZC4KClRoZSBlcnJvciBoYXBwZW5zIG9uIG51bWVyaWMgbGl0ZXJhbHMgYW5kIG9uIG51bWVyaWMgYmluZGluZ3Mgd2l0aG91dCBhbgppZGVudGlmaWVkIGNvbmNyZXRlIHR5cGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2ODkKbGV0IHggPSAyLjA7CngubmVnKCk7ICAvLyBzYW1lIGVycm9yIGFzIGFib3ZlCmBgYAoKQmVjYXVzZSBvZiB0aGlzLCB5b3UgbXVzdCBnaXZlIHRoZSBudW1lcmljIGxpdGVyYWwgb3IgYmluZGluZyBhIHR5cGU6CgpgYGAKdXNlIHN0ZDo6b3BzOjpOZWc7CgpsZXQgXyA9IDIuMF9mMzIubmVnKCk7IC8vIG9rIQpsZXQgeDogZjMyID0gMi4wOwpsZXQgXyA9IHgubmVnKCk7IC8vIG9rIQpsZXQgXyA9ICgyLjAgYXMgZjMyKS5uZWcoKTsgLy8gb2shCmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/P40FjQUAAQCNBQDUkAEm+AUAAOQLAAAA5QsAAL0CDgYAAOMLAgUBBFNvbWUBAQCfDgAB5AsAAL0CDgYAAuMLAAEAqAIkBgAA4gsBAQCfDgACAKkCEvcFAJ8OBQEFRTA2ODkAAR8FBQABAAUAqAIkBgAA4gsBAQGkDgAB4wsAAIORASb6BQAA6QsAAAIAg5EBJvoFAJ8OBQHXCEEgc3RydWN0IHdpdGggdGhlIHJlcHJlc2VudGF0aW9uIGhpbnQgYHJlcHIodHJhbnNwYXJlbnQpYCBoYWQgemVybyBvciBtb3JlIHRoYW4Kb25lIGZpZWxkcyB0aGF0IHdlcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgemVyby1zaXplZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2OTAKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IExlbmd0aFdpdGhVbml0PFU+IHsgLy8gZXJyb3I6IHRyYW5zcGFyZW50IHN0cnVjdCBuZWVkcyBleGFjdGx5IG9uZQogICAgdmFsdWU6IGYzMiwgICAgICAgICAgICAvLyAgICAgICAgbm9uLXplcm8tc2l6ZWQgZmllbGQsIGJ1dCBoYXMgMgogICAgdW5pdDogVSwKfQpgYGAKCkJlY2F1c2UgdHJhbnNwYXJlbnQgc3RydWN0cyBhcmUgcmVwcmVzZW50ZWQgZXhhY3RseSBsaWtlIG9uZSBvZiB0aGVpciBmaWVsZHMgYXQKcnVuIHRpbWUsIHNhaWQgZmllbGQgbXVzdCBiZSB1bmlxdWVseSBkZXRlcm1pbmVkLiBJZiB0aGVyZSBpcyBubyBmaWVsZCwgb3IgaWYKdGhlcmUgYXJlIG11bHRpcGxlIGZpZWxkcywgaXQgaXMgbm90IGNsZWFyIGhvdyB0aGUgc3RydWN0IHNob3VsZCBiZSByZXByZXNlbnRlZC4KTm90ZSB0aGF0IGZpZWxkcyBvZiB6ZXJvLXNpemVkIHR5cGVzIChlLmcuLCBgUGhhbnRvbURhdGFgKSBjYW4gYWxzbyBleGlzdAphbG9uZ3NpZGUgdGhlIGZpZWxkIHRoYXQgY29udGFpbnMgdGhlIGFjdHVhbCBkYXRhLCB0aGV5IGRvIG5vdCBjb3VudCBmb3IgdGhpcwplcnJvci4gV2hlbiBnZW5lcmljIHR5cGVzIGFyZSBpbnZvbHZlZCAoYXMgaW4gdGhlIGFib3ZlIGV4YW1wbGUpLCBhbiBlcnJvciBpcwpyZXBvcnRlZCBiZWNhdXNlIHRoZSB0eXBlIHBhcmFtZXRlciBjb3VsZCBiZSBub24temVyby1zaXplZC4KClRvIGNvbWJpbmUgYHJlcHIodHJhbnNwYXJlbnQpYCB3aXRoIHR5cGUgcGFyYW1ldGVycywgYFBoYW50b21EYXRhYCBtYXkgYmUKdXNlZnVsOgoKYGBgCnVzZSBzdGQ6Om1hcmtlcjo6UGhhbnRvbURhdGE7CgojW3JlcHIodHJhbnNwYXJlbnQpXQpzdHJ1Y3QgTGVuZ3RoV2l0aFVuaXQ8VT4gewogICAgdmFsdWU6IGYzMiwKICAgIHVuaXQ6IFBoYW50b21EYXRhPFU+LAp9CmBgYAoAEv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////A9cI1wgAAQDXCACDkQEm+gUAAOgLAAAA6QsAAL0CDgYAAOcLAgUBBFNvbWUBAQCfDgAB6AsAAL0CDgYAAucLAAEAqAIkBgAA5gsBAQCfDgACAKkCEvkFAJ8OBQEFRTA2OTAAAR8FBQABAAUAqAIkBgAA5gsBAQGkDgAB5wsAALKRASb8BQAA7QsAAAIAspEBJvwFAJ8OBQGNC0Egc3RydWN0LCBlbnVtLCBvciB1bmlvbiB3aXRoIHRoZSBgcmVwcih0cmFuc3BhcmVudClgIHJlcHJlc2VudGF0aW9uIGhpbnQKY29udGFpbnMgYSB6ZXJvLXNpemVkIGZpZWxkIHRoYXQgcmVxdWlyZXMgbm9uLXRyaXZpYWwgYWxpZ25tZW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY5MQojIVtmZWF0dXJlKHJlcHJfYWxpZ24pXQoKI1tyZXByKGFsaWduKDMyKSldCnN0cnVjdCBGb3JjZUFsaWduMzI7CgojW3JlcHIodHJhbnNwYXJlbnQpXQpzdHJ1Y3QgV3JhcHBlcihmMzIsIEZvcmNlQWxpZ24zMik7IC8vIGVycm9yOiB6ZXJvLXNpemVkIGZpZWxkIGluIHRyYW5zcGFyZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHN0cnVjdCBoYXMgYWxpZ25tZW50IGxhcmdlciB0aGFuIDEKYGBgCgpBIHRyYW5zcGFyZW50IHN0cnVjdCwgZW51bSwgb3IgdW5pb24gaXMgc3VwcG9zZWQgdG8gYmUgcmVwcmVzZW50ZWQgZXhhY3RseSBsaWtlCnRoZSBwaWVjZSBvZiBkYXRhIGl0IGNvbnRhaW5zLiBaZXJvLXNpemVkIGZpZWxkcyB3aXRoIGRpZmZlcmVudCBhbGlnbm1lbnQKcmVxdWlyZW1lbnRzIHBvdGVudGlhbGx5IGNvbmZsaWN0IHdpdGggdGhpcyBwcm9wZXJ0eS4gSW4gdGhlIGV4YW1wbGUgYWJvdmUsCmBXcmFwcGVyYCB3b3VsZCBoYXZlIHRvIGJlIGFsaWduZWQgdG8gMzIgYnl0ZXMgZXZlbiB0aG91Z2ggYGYzMmAgaGFzIGEgc21hbGxlcgphbGlnbm1lbnQgcmVxdWlyZW1lbnQuCgpDb25zaWRlciByZW1vdmluZyB0aGUgb3Zlci1hbGlnbmVkIHplcm8tc2l6ZWQgZmllbGQ6CgpgYGAKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IFdyYXBwZXIoZjMyKTsKYGBgCgpBbHRlcm5hdGl2ZWx5LCBgUGhhbnRvbURhdGE8VD5gIGhhcyBhbGlnbm1lbnQgMSBmb3IgYWxsIGBUYCwgc28geW91IGNhbiB1c2UgaXQKaWYgeW91IG5lZWQgdG8ga2VlcCB0aGUgZmllbGQgZm9yIHNvbWUgcmVhc29uOgoKYGBgCiMhW2ZlYXR1cmUocmVwcl9hbGlnbildCgp1c2Ugc3RkOjptYXJrZXI6OlBoYW50b21EYXRhOwoKI1tyZXByKGFsaWduKDMyKSldCnN0cnVjdCBGb3JjZUFsaWduMzI7CgojW3JlcHIodHJhbnNwYXJlbnQpXQpzdHJ1Y3QgV3JhcHBlcihmMzIsIFBoYW50b21EYXRhPEZvcmNlQWxpZ24zMj4pOwpgYGAKCk5vdGUgdGhhdCBlbXB0eSBhcnJheXMgYFtUOyAwXWAgaGF2ZSB0aGUgc2FtZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgYXMgdGhlCmVsZW1lbnQgdHlwZSBgVGAuIEFsc28gbm90ZSB0aGF0IHRoZSBlcnJvciBpcyBjb25zZXJ2YXRpdmVseSByZXBvcnRlZCBldmVuIHdoZW4KdGhlIGFsaWdubWVudCBvZiB0aGUgemVyby1zaXplZCB0eXBlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgZGF0YSBmaWVsZCdzCmFsaWdubWVudC4KABf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/z+NC40LAAEAjQsAspEBJvwFAADsCwAAAO0LAAC9Ag4GAADrCwIFAQRTb21lAQEAnw4AAewLAAC9Ag4GAALrCwABAKgCJAYAAOoLAQEAnw4AAgCpAhL7BQCfDgUBBUUwNjkxAAEfBQUAAQAFAKgCJAYAAOoLAQEBpA4AAesLAADhkQEm/gUAAPELAAACAOGRASb+BQCfDgUBtwlBIGByZXByKHRyYW5zcGFyZW50KWAgdHlwZSB3YXMgYWxzbyBhbm5vdGF0ZWQgd2l0aCBvdGhlciwgaW5jb21wYXRpYmxlCnJlcHJlc2VudGF0aW9uIGhpbnRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY5MgojW3JlcHIodHJhbnNwYXJlbnQsIEMpXSAvLyBlcnJvcjogaW5jb21wYXRpYmxlIHJlcHJlc2VudGF0aW9uIGhpbnRzCnN0cnVjdCBHcmFtcyhmMzIpOwpgYGAKCkEgdHlwZSBhbm5vdGF0ZWQgYXMgYHJlcHIodHJhbnNwYXJlbnQpYCBkZWxlZ2F0ZXMgYWxsIHJlcHJlc2VudGF0aW9uIGNvbmNlcm5zIHRvCmFub3RoZXIgdHlwZSwgc28gYWRkaW5nIG1vcmUgcmVwcmVzZW50YXRpb24gaGludHMgaXMgY29udHJhZGljdG9yeS4gUmVtb3ZlCmVpdGhlciB0aGUgYHRyYW5zcGFyZW50YCBoaW50IG9yIHRoZSBvdGhlciBoaW50cywgbGlrZSB0aGlzOgoKYGBgCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBHcmFtcyhmMzIpOwpgYGAKCkFsdGVybmF0aXZlbHksIG1vdmUgdGhlIG90aGVyIGF0dHJpYnV0ZXMgdG8gdGhlIGNvbnRhaW5lZCB0eXBlOgoKYGBgCiNbcmVwcihDKV0Kc3RydWN0IEZvbyB7CiAgICB4OiBpMzIsCiAgICAvLyAuLi4KfQoKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IEZvb1dyYXBwZXIoRm9vKTsKYGBgCgpOb3RlIHRoYXQgaW50cm9kdWNpbmcgYW5vdGhlciBgc3RydWN0YCBqdXN0IHRvIGhhdmUgYSBwbGFjZSBmb3IgdGhlIG90aGVyCmF0dHJpYnV0ZXMgbWF5IGhhdmUgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgb24gdGhlIHJlcHJlc2VudGF0aW9uOgoKYGBgCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBHcmFtcyhmMzIpOwoKI1tyZXByKEMpXQpzdHJ1Y3QgRmxvYXQoZjMyKTsKCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBHcmFtczIoRmxvYXQpOyAvLyB0aGlzIGlzIG5vdCBlcXVpdmFsZW50IHRvIGBHcmFtc2AgYWJvdmUKYGBgCgpIZXJlLCBgR3JhbXMyYCBpcyBhIG5vdCBlcXVpdmFsZW50IHRvIGBHcmFtc2AgLS0gdGhlIGZvcm1lciB0cmFuc3BhcmVudGx5IHdyYXBzCmEgKG5vbi10cmFuc3BhcmVudCkgc3RydWN0IGNvbnRhaW5pbmcgYSBzaW5nbGUgZmxvYXQsIHdoaWxlIGBHcmFtc2AgaXMgYQp0cmFuc3BhcmVudCB3cmFwcGVyIGFyb3VuZCBhIGZsb2F0LiBUaGlzIGNhbiBtYWtlIGEgZGlmZmVyZW5jZSBmb3IgdGhlIEFCSS4KABP///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////P7cJtwkAAQC3CQDhkQEm/gUAAPALAAAA8QsAAL0CDgYAAO8LAgUBBFNvbWUBAQCfDgAB8AsAAL0CDgYAAu8LAAEAqAIkBgAA7gsBAQCfDgACAKkCEv0FAJ8OBQEFRTA2OTIAAR8FBQABAAUAqAIkBgAA7gsBAQGkDgAB7wsAAJCSASaABgAA9QsAAAIAkJIBJoAGAJ8OBQGDA2BhbGlnbmAgcmVwcmVzZW50YXRpb24gaGludCB3YXMgaW5jb3JyZWN0bHkgZGVjbGFyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDY5MwojW3JlcHIoYWxpZ249OCldIC8vIGVycm9yIQpzdHJ1Y3QgQWxpZ244KGk4KTsKCiNbcmVwcihhbGlnbj0iOCIpXSAvLyBlcnJvciEKc3RydWN0IEFsaWduOChpOCk7CmBgYAoKVGhpcyBpcyBhIHN5bnRheCBlcnJvciBhdCB0aGUgbGV2ZWwgb2YgYXR0cmlidXRlIGRlY2xhcmF0aW9ucy4gVGhlIHByb3BlcgpzeW50YXggZm9yIGBhbGlnbmAgcmVwcmVzZW50YXRpb24gaGludCBpcyB0aGUgZm9sbG93aW5nOgoKYGBgCiNbcmVwcihhbGlnbig4KSldIC8vIG9rIQpzdHJ1Y3QgQWxpZ244KGk4KTsKYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BB4MDgwMAAQCDAwCQkgEmgAYAAPQLAAAA9QsAAL0CDgYAAPMLAgUBBFNvbWUBAQCfDgAB9AsAAL0CDgYAAvMLAAEAqAIkBgAA8gsBAQCfDgACAKkCEv8FAJ8OBQEFRTA2OTMAAR8FBQABAAUAqAIkBgAA8gsBAQGkDgAB8wsAAL+SASaCBgAA+QsAAAIAv5IBJoIGAJ8OBQHRA0EgYGJyZWFrYCBzdGF0ZW1lbnQgd2l0aG91dCBhIGxhYmVsIGFwcGVhcmVkIGluc2lkZSBhIGxhYmVsZWQgYmxvY2suCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjk1CiMgIyFbZmVhdHVyZShsYWJlbF9icmVha192YWx1ZSldCmxvb3AgewogICAgJ2E6IHsKICAgICAgICBicmVhazsKICAgIH0KfQpgYGAKCk1ha2Ugc3VyZSB0byBhbHdheXMgbGFiZWwgdGhlIGBicmVha2A6CgpgYGAKIyAjIVtmZWF0dXJlKGxhYmVsX2JyZWFrX3ZhbHVlKV0KJ2w6IGxvb3AgewogICAgJ2E6IHsKICAgICAgICBicmVhayAnbDsKICAgIH0KfQpgYGAKCk9yIGlmIHlvdSB3YW50IHRvIGBicmVha2AgdGhlIGxhYmVsZWQgYmxvY2s6CgpgYGAKIyAjIVtmZWF0dXJlKGxhYmVsX2JyZWFrX3ZhbHVlKV0KbG9vcCB7CiAgICAnYTogewogICAgICAgIGJyZWFrICdhOwogICAgfQogICAgYnJlYWs7Cn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//B9ED0QMAAQDRAwC/kgEmggYAAPgLAAAA+QsAAL0CDgYAAPcLAgUBBFNvbWUBAQCfDgAB+AsAAL0CDgYAAvcLAAEAqAIkBgAA9gsBAQCfDgACAKkCEoEGAJ8OBQEFRTA2OTUAAR8FBQABAAUAqAIkBgAA9gsBAQGkDgAB9wsAAO6SASaEBgAA/QsAAAIA7pIBJoQGAJ8OBQGbBkEgZnVuY3Rpb24gaXMgdXNpbmcgYGNvbnRpbnVlYCBrZXl3b3JkIGluY29ycmVjdGx5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY5NgpmbiBjb250aW51ZV9zaW1wbGUoKSB7CiAgICAnYjogewogICAgICAgIGNvbnRpbnVlOyAvLyBlcnJvciEKICAgIH0KfQpmbiBjb250aW51ZV9sYWJlbGVkKCkgewogICAgJ2I6IHsKICAgICAgICBjb250aW51ZSAnYjsgLy8gZXJyb3IhCiAgICB9Cn0KZm4gY29udGludWVfY3Jvc3NpbmcoKSB7CiAgICBsb29wIHsKICAgICAgICAnYjogewogICAgICAgICAgICBjb250aW51ZTsgLy8gZXJyb3IhCiAgICAgICAgfQogICAgfQp9CmBgYAoKSGVyZSB3ZSBoYXZlIHVzZWQgdGhlIGBjb250aW51ZWAga2V5d29yZCBpbmNvcnJlY3RseS4gQXMgd2UKaGF2ZSBzZWVuIGFib3ZlIHRoYXQgYGNvbnRpbnVlYCBwb2ludGluZyB0byBhIGxhYmVsZWQgYmxvY2suCgpUbyBmaXggdGhpcyB3ZSBoYXZlIHRvIHVzZSB0aGUgbGFiZWxlZCBibG9jayBwcm9wZXJseS4KRm9yIGV4YW1wbGU6CgpgYGAKZm4gY29udGludWVfc2ltcGxlKCkgewogICAgJ2I6IGxvb3AgewogICAgICAgIGNvbnRpbnVlIDsgLy8gb2shCiAgICB9Cn0KZm4gY29udGludWVfbGFiZWxlZCgpIHsKICAgICdiOiBsb29wIHsKICAgICAgICBjb250aW51ZSAnYjsgLy8gb2shCiAgICB9Cn0KZm4gY29udGludWVfY3Jvc3NpbmcoKSB7CiAgICBsb29wIHsKICAgICAgICAnYjogbG9vcCB7CiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBvayEKICAgICAgICB9CiAgICB9Cn0KYGBgCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////P5sGmwYAAQCbBgDukgEmhAYAAPwLAAAA/QsAAL0CDgYAAPsLAgUBBFNvbWUBAQCfDgAB/AsAAL0CDgYAAvsLAAEAqAIkBgAA+gsBAQCfDgACAKkCEoMGAJ8OBQEFRTA2OTYAAR8FBQABAAUAqAIkBgAA+gsBAQGkDgAB+wsAAJ2TASaGBgAAgQwAAAIAnZMBJoYGAJ8OBQG7A0EgY2xvc3VyZSBoYXMgYmVlbiB1c2VkIGFzIGBzdGF0aWNgLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY5NwpmbiBtYWluKCkgewogICAgc3RhdGljIHx8IHt9OyAvLyB1c2VkIGFzIGBzdGF0aWNgCn0KYGBgCgpDbG9zdXJlcyBjYW5ub3QgYmUgdXNlZCBhcyBgc3RhdGljYC4gVGhleSAic2F2ZSIgdGhlIGVudmlyb25tZW50LAphbmQgYXMgc3VjaCBhIHN0YXRpYyBjbG9zdXJlIHdvdWxkIHNhdmUgb25seSBhIHN0YXRpYyBlbnZpcm9ubWVudAp3aGljaCB3b3VsZCBjb25zaXN0IG9ubHkgb2YgdmFyaWFibGVzIHdpdGggYSBzdGF0aWMgbGlmZXRpbWUuIEdpdmVuCnRoaXMgaXQgd291bGQgYmUgYmV0dGVyIHRvIHVzZSBhIHByb3BlciBmdW5jdGlvbi4gVGhlIGVhc2llc3QgZml4CmlzIHRvIHJlbW92ZSB0aGUgYHN0YXRpY2Aga2V5d29yZC4KAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////we7A7sDAAEAuwMAnZMBJoYGAACADAAAAIEMAAC9Ag4GAAD/CwIFAQRTb21lAQEAnw4AAYAMAAC9Ag4GAAL/CwABAKgCJAYAAP4LAQEAnw4AAgCpAhKFBgCfDgUBBUUwNjk3AAEfBQUAAQAFAKgCJAYAAP4LAQEBpA4AAf8LAADMkwEmiAYAAIUMAAACAMyTASaIBgCfDgUBuQRXaGVuIHVzaW5nIGdlbmVyYXRvcnMgKG9yIGFzeW5jKSBhbGwgdHlwZSB2YXJpYWJsZXMgbXVzdCBiZSBib3VuZCBzbyBhCmdlbmVyYXRvciBjYW4gYmUgY29uc3RydWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgZWRpdGlvbjIwMTgsY29tcGlsZV9mYWlsLEUwNjk4CmFzeW5jIGZuIGJhcjxUPigpIC0+ICgpIHt9Cgphc3luYyBmbiBmb28oKSB7CiAgICBiYXIoKS5hd2FpdDsgLy8gZXJyb3I6IGNhbm5vdCBpbmZlciB0eXBlIGZvciBgVGAKfQpgYGAKCkluIHRoZSBhYm92ZSBleGFtcGxlIGBUYCBpcyB1bmtub3dhYmxlIGJ5IHRoZSBjb21waWxlci4KVG8gZml4IHRoaXMgeW91IG11c3QgYmluZCBgVGAgdG8gYSBjb25jcmV0ZSB0eXBlIHN1Y2ggYXMgYFN0cmluZ2AKc28gdGhhdCBhIGdlbmVyYXRvciBjYW4gdGhlbiBiZSBjb25zdHJ1Y3RlZDoKCmBgYGVkaXRpb24yMDE4CmFzeW5jIGZuIGJhcjxUPigpIC0+ICgpIHt9Cgphc3luYyBmbiBmb28oKSB7CiAgICBiYXI6OjxTdHJpbmc+KCkuYXdhaXQ7CiAgICAvLyAgIF5eXl5eXl5eIHNwZWNpZnkgdHlwZSBleHBsaWNpdGx5Cn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wG5BLkEAAEAuQQAzJMBJogGAACEDAAAAIUMAAC9Ag4GAACDDAIFAQRTb21lAQEAnw4AAYQMAAC9Ag4GAAKDDAABAKgCJAYAAIIMAQEAnw4AAgCpAhKHBgCfDgUBBUUwNjk4AAEfBQUAAQAFAKgCJAYAAIIMAQEBpA4AAYMMAAD7kwEmigYAAIkMAAACAPuTASaKBgCfDgUBkwlBIG1ldGhvZCB3YXMgY2FsbGVkIG9uIGEgcmF3IHBvaW50ZXIgd2hvc2UgaW5uZXIgdHlwZSB3YXNuJ3QgY29tcGxldGVseSBrbm93bi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsZWRpdGlvbjIwMTgsRTA2OTkKIyAjIVtkZW55KHdhcm5pbmdzKV0KIyBmbiBtYWluKCkgewpsZXQgZm9vID0gJjE7CmxldCBiYXIgPSBmb28gYXMgKmNvbnN0IF87CmlmIGJhci5pc19udWxsKCkgewogICAgLy8gLi4uCn0KIyB9CmBgYAoKSGVyZSwgdGhlIHR5cGUgb2YgYGJhcmAgaXNuJ3Qga25vd247IGl0IGNvdWxkIGJlIGEgcG9pbnRlciB0byBhbnl0aGluZy4gSW5zdGVhZCwKc3BlY2lmeSBhIHR5cGUgZm9yIHRoZSBwb2ludGVyIChwcmVmZXJhYmx5IHNvbWV0aGluZyB0aGF0IG1ha2VzIHNlbnNlIGZvciB0aGUKdGhpbmcgeW91J3JlIHBvaW50aW5nIHRvKToKCmBgYApsZXQgZm9vID0gJjE7CmxldCBiYXIgPSBmb28gYXMgKmNvbnN0IGkzMjsKaWYgYmFyLmlzX251bGwoKSB7CiAgICAvLyAuLi4KfQpgYGAKCkV2ZW4gdGhvdWdoIGBpc19udWxsKClgIGV4aXN0cyBhcyBhIG1ldGhvZCBvbiBhbnkgcmF3IHBvaW50ZXIsIFJ1c3Qgc2hvd3MgdGhpcwplcnJvciBiZWNhdXNlICBSdXN0IGFsbG93cyBmb3IgYHNlbGZgIHRvIGhhdmUgYXJiaXRyYXJ5IHR5cGVzIChiZWhpbmQgdGhlCmFyYml0cmFyeV9zZWxmX3R5cGVzIGZlYXR1cmUgZmxhZykuCgpUaGlzIG1lYW5zIHRoYXQgc29tZW9uZSBjYW4gc3BlY2lmeSBzdWNoIGEgZnVuY3Rpb246CgpgYGBpZ25vcmUgKGNhbm5vdC1kb2N0ZXN0LWZlYXR1cmUtZG9lc250LWV4aXN0LXlldCkKaW1wbCBGb28gewogICAgZm4gaXNfbnVsbChzZWxmOiAqY29uc3QgU2VsZikgLT4gYm9vbCB7CiAgICAgICAgLy8gZG8gc29tZXRoaW5nIGVsc2UKICAgIH0KfQpgYGAKCmFuZCBub3cgd2hlbiB5b3UgY2FsbCBgLmlzX251bGwoKWAgb24gYSByYXcgcG9pbnRlciB0byBgRm9vYCwgdGhlcmUncyBhbWJpZ3VpdHkuCgpHaXZlbiB0aGF0IHdlIGRvbid0IGtub3cgd2hhdCB0eXBlIHRoZSBwb2ludGVyIGlzLCBhbmQgdGhlcmUncyBwb3RlbnRpYWwKYW1iaWd1aXR5IGZvciBzb21lIHR5cGVzLCB3ZSBkaXNhbGxvdyBjYWxsaW5nIG1ldGhvZHMgb24gcmF3IHBvaW50ZXJzIHdoZW4KdGhlIHR5cGUgaXMgdW5rbm93bi4KABP///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//x+TCZMJAAEAkwkA+5MBJooGAACIDAAAAIkMAAC9Ag4GAACHDAIFAQRTb21lAQEAnw4AAYgMAAC9Ag4GAAKHDAABAKgCJAYAAIYMAQEAnw4AAgCpAhKJBgCfDgUBBUUwNjk5AAEfBQUAAQAFAKgCJAYAAIYMAQEBpA4AAYcMAACqlAEmjAYAAI0MAAACAKqUASaMBgCfDgUBtwhUaGUgYGltcGwgVHJhaXRgIHJldHVybiB0eXBlIGNhcHR1cmVzIGxpZmV0aW1lIHBhcmFtZXRlcnMgdGhhdCBkbyBub3QKYXBwZWFyIHdpdGhpbiB0aGUgYGltcGwgVHJhaXRgIGl0c2VsZi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MDAKdXNlIHN0ZDo6Y2VsbDo6Q2VsbDsKCnRyYWl0IFRyYWl0PCdhPiB7IH0KCmltcGw8J2EsICdiPiBUcmFpdDwnYj4gZm9yIENlbGw8JidhIHUzMj4geyB9CgpmbiBmb288J3gsICd5Pih4OiBDZWxsPCYneCB1MzI+KSAtPiBpbXBsIFRyYWl0PCd5Pgp3aGVyZSAneDogJ3kKewogICAgeAp9CmBgYAoKSGVyZSwgdGhlIGZ1bmN0aW9uIGBmb29gIHJldHVybnMgYSB2YWx1ZSBvZiB0eXBlIGBDZWxsPCYneCB1MzI+YCwKd2hpY2ggcmVmZXJlbmNlcyB0aGUgbGlmZXRpbWUgYCd4YC4gSG93ZXZlciwgdGhlIHJldHVybiB0eXBlIGlzCmRlY2xhcmVkIGFzIGBpbXBsIFRyYWl0PCd5PmAgLS0gdGhpcyBpbmRpY2F0ZXMgdGhhdCBgZm9vYCByZXR1cm5zCiJzb21lIHR5cGUgdGhhdCBpbXBsZW1lbnRzIGBUcmFpdDwneT5gIiwgYnV0IGl0IGFsc28gaW5kaWNhdGVzIHRoYXQKdGhlIHJldHVybiB0eXBlICoqb25seSBjYXB0dXJlcyBkYXRhIHJlZmVyZW5jaW5nIHRoZSBsaWZldGltZSBgJ3lgKiouCkluIHRoaXMgY2FzZSwgdGhvdWdoLCB3ZSBhcmUgcmVmZXJlbmNpbmcgZGF0YSB3aXRoIGxpZmV0aW1lIGAneGAsIHNvCnRoaXMgZnVuY3Rpb24gaXMgaW4gZXJyb3IuCgpUbyBmaXggdGhpcywgeW91IG11c3QgcmVmZXJlbmNlIHRoZSBsaWZldGltZSBgJ3hgIGZyb20gdGhlIHJldHVybgp0eXBlLiBGb3IgZXhhbXBsZSwgY2hhbmdpbmcgdGhlIHJldHVybiB0eXBlIHRvIGBpbXBsIFRyYWl0PCd5PiArICd4YAp3b3VsZCB3b3JrOgoKYGBgCnVzZSBzdGQ6OmNlbGw6OkNlbGw7Cgp0cmFpdCBUcmFpdDwnYT4geyB9CgppbXBsPCdhLCdiPiBUcmFpdDwnYj4gZm9yIENlbGw8JidhIHUzMj4geyB9CgpmbiBmb288J3gsICd5Pih4OiBDZWxsPCYneCB1MzI+KSAtPiBpbXBsIFRyYWl0PCd5PiArICd4CndoZXJlICd4OiAneQp7CiAgICB4Cn0KYGBgCgAR////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8/twi3CAABALcIAKqUASaMBgAAjAwAAACNDAAAvQIOBgAAiwwCBQEEU29tZQEBAJ8OAAGMDAAAvQIOBgACiwwAAQCoAiQGAACKDAEBAJ8OAAIAqQISiwYAnw4FAQVFMDcwMAABHwUFAAEABQCoAiQGAACKDAEBAaQOAAGLDAAA2ZQBJo4GAACRDAAAAgDZlAEmjgYAnw4FAc8BVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCBhIGAjW25vbl9leGhhdXN0aXZlXWAgYXR0cmlidXRlIHdh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dGVkISgpCn0KLy8gVGhlIGFzeW5jIGZuIGFib3ZlIGdldHMgZGVzdWdhcmVkIGFzIGZvbGxvd3M6CmZuIGZvbygmc2VsZikgLT4gaW1wbCBGdXR1cmU8T3V0cHV0ID0gVXNlcj4gKyAnXyB7CiAgICB1bmltcGxlbWVudGVkISgpCn0KYGBgCgpCdXQgd2hlbiBpdCBjb21lcyB0byBzdXBwb3J0aW5nIHRoaXMgaW4gdHJhaXRzLCB0aGVyZSBhcmUgW2EgZmV3IGltcGxlbWVudGF0aW9uCmlzc3Vlc11bYXN5bmMtaXMtaGFyZF0uIE9uZSBvZiB0aGVtIGlzIHJldHVybmluZyBgaW1wbCBUcmFpdGAgaW4gdHJhaXRzIGlzIG5vdApzdXBwb3J0ZWQsIGFzIGl0IHdvdWxkIHJlcXVpcmUgW0dlbmVyaWMgQXNzb2NpYXRlZCBUeXBlc10gdG8gYmUgc3VwcG9ydGVkOgoKYGBgZWRpdGlvbjIwMTgsaWdub3JlIChleGFtcGxlLW9mLWRlc3VnYXJpbmctZXF1aXZhbGVuY2UpCmltcGwgTXlEYXRhYmFzZSB7CiAgICBhc3luYyBmbiBnZXRfdXNlcigmc2VsZikgLT4gVXNlciB7CiAgICAgICAgdW5pbXBsZW1lbnRlZCEoKQogICAgfQp9CgppbXBsIE15RGF0YWJhc2UgewogICAgZm4gZ2V0X3VzZXIoJnNlbGYpIC0+IGltcGwgRnV0dXJlPE91dHB1dCA9IFVzZXI+ICsgJ18gewogICAgICAgIHVuaW1wbGVtZW50ZWQhKCkKICAgIH0KfQpgYGAKClVudGlsIHRoZXNlIGlzc3VlcyBhcmUgcmVzb2x2ZWQsIHlvdSBjYW4gdXNlIHRoZSBbYGFzeW5jLXRyYWl0YCBjcmF0ZV0sIGFsbG93aW5nCnlvdSB0byB1c2UgYGFzeW5jIGZuYCBpbiB0cmFpdHMgYnkgZGVzdWdhcmluZyB0byAiYm94ZWQgZnV0dXJlcyIKKGBQaW48Qm94PGR5biBGdXR1cmUgKyBTZW5kICsgJ2FzeW5jPj5gKS4KCk5vdGUgdGhhdCB1c2luZyB0aGVzZSB0cmFpdCBtZXRob2RzIHdpbGwgcmVzdWx0IGluIGEgaGVhcCBhbGxvY2F0aW9uCnBlci1mdW5jdGlvbi1jYWxsLiBUaGlzIGlzIG5vdCBhIHNpZ25pZmljYW50IGNvc3QgZm9yIHRoZSB2YXN0IG1ham9yaXR5IG9mCmFwcGxpY2F0aW9ucywgYnV0IHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gZGVjaWRpbmcgd2hldGhlciB0byB1c2UgdGhpcwpmdW5jdGlvbmFsaXR5IGluIHRoZSBwdWJsaWMgQVBJIG9mIGEgbG93LWxldmVsIGZ1bmN0aW9uIHRoYXQgaXMgZXhwZWN0ZWQgdG8gYmUKY2FsbGVkIG1pbGxpb25zIG9mIHRpbWVzIGEgc2Vjb25kLgoKWW91IG1pZ2h0IGJlIGludGVyZXN0ZWQgaW4gdmlzaXRpbmcgdGhlIFthc3luYyBib29rXSBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4KCltgYXN5bmMtdHJhaXRgIGNyYXRlXTogaHR0cHM6Ly9jcmF0ZXMuaW8vY3JhdGVzL2FzeW5jLXRyYWl0Clthc3luYy1pcy1oYXJkXTogaHR0cHM6Ly9zbWFsbGN1bHRmb2xsb3dpbmcuY29tL2JhYnlzdGVwcy9ibG9nLzIwMTkvMTAvMjYvYXN5bmMtZm4taW4tdHJhaXRzLWFyZS1oYXJkLwpbR2VuZXJpYyBBc3NvY2lhdGVkIFR5cGVzXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy80NDI2NQpbYXN5bmMgYm9va106IGh0dHBzOi8vcnVzdC1sYW5nLmdpdGh1Yi5pby9hc3luYy1ib29rLzA3X3dvcmthcm91bmRzLzA2X2FzeW5jX2luX3RyYWl0cy5odG1sCgAf////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////B60PrQ8AAQCtDwCVlgEmlgYAAKAMAAAAoQwAAL0CDgYAAJ8MAgUBBFNvbWUBAQCfDgABoAwAAL0CDgYAAp8MAAEAqAIkBgAAngwBAQCfDgACAKkCEpUGAJ8OBQEFRTA3MDYAAR8FBQABAAUAqAIkBgAAngwBAQGkDgABnwwAAMSWASaYBgAApQwAAAIAxJYBJpgGAJ8OBQHxA2Bhc3luY2Agbm9uLWBtb3ZlYCBjbG9zdXJlcyB3aXRoIHBhcmFtZXRlcnMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxlZGl0aW9uMjAxOCxFMDcwOAojIVtmZWF0dXJlKGFzeW5jX2Nsb3N1cmUpXQoKZm4gbWFpbigpIHsKICAgIGxldCBhZGRfb25lID0gYXN5bmMgfG51bTogdTh8IHsgLy8gZXJyb3IhCiAgICAgICAgbnVtICsgMQogICAgfTsKfQpgYGAKCmBhc3luY2Agd2l0aCBub24tbW92ZSBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCB3aXRoIHRoZSBjdXJyZW50CnZlcnNpb24sIHlvdSBjYW4gdXNlIHN1Y2Nlc3NmdWxseSBieSB1c2luZyBtb3ZlOgoKYGBgZWRpdGlvbjIwMTgKIyFbZmVhdHVyZShhc3luY19jbG9zdXJlKV0KCmZuIG1haW4oKSB7CiAgICBsZXQgYWRkX29uZSA9IGFzeW5jIG1vdmUgfG51bTogdTh8IHsgLy8gb2shCiAgICAgICAgbnVtICsgMQogICAgfTsKfQpgYGAKAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////f/ED8QMAAQDxAwDElgEmmAYAAKQMAAAApQwAAL0CDgYAAKMMAgUBBFNvbWUBAQCfDgABpAwAAL0CDgYAAqMMAAEAqAIkBgAAogwBAQCfDgACAKkCEpcGAJ8OBQEFRTA3MDgAAR8FBQABAAUAqAIkBgAAogwBAQGkDgABowwAAPOWASaaBgAAqQwAAAIA85YBJpoGAJ8OBQGhBEFuIHVua25vd24gdG9vbCBuYW1lIHdhcyBmb3VuZCBpbiBhIHNjb3BlZCBsaW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTA3MTAKI1thbGxvdyhjbGlwcDo6ZmlsdGVyX21hcCldIC8vIGVycm9yIWAKZm4gbWFpbigpIHsKICAgIC8vIGJ1c2luZXNzIGxvZ2ljCn0KYGBgCgpgYGBjb21waWxlX2ZhaWwsRTA3MTAKI1t3YXJuKGNsaXBwOjpmaWx0ZXJfbWFwKV0gLy8gZXJyb3IhYApmbiBtYWluKCkgewogICAgLy8gYnVzaW5lc3MgbG9naWMKfQpgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgdG9vbCdzIG5hbWUgb3IgdGhhdCB5b3UgZGlkbid0CmZvcmdldCB0byBpbXBvcnQgaXQgaW4geW91IHByb2plY3Q6CgpgYGAKI1thbGxvdyhjbGlwcHk6OmZpbHRlcl9tYXApXSAvLyBvayEKZm4gbWFpbigpIHsKICAgIC8vIGJ1c2luZXNzIGxvZ2ljCn0KYGBgCgpgYGAKI1t3YXJuKGNsaXBweTo6ZmlsdGVyX21hcCldIC8vIG9rIQpmbiBtYWluKCkgewogICAgLy8gYnVzaW5lc3MgbG9naWMKfQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8foQShBAABAKEEAPOWASaaBgAAqAwAAACpDAAAvQIOBgAApwwCBQEEU29tZQEBAJ8OAAGoDAAAvQIOBgACpwwAAQCoAiQGAACmDAEBAJ8OAAIAqQISmQYAnw4FAQVFMDcxMAABHwUFAAEABQCoAiQGAACmDAEBAaQOAAGnDAAAopcBJpwGAACtDAAAAgCilwEmnAYAnw4FAYMDQSBib3Jyb3cgb2YgYSB0aHJlYWQtbG9jYWwgdmFyaWFibGUgd2FzIG1hZGUgaW5zaWRlIGEgZnVuY3Rpb24gd2hpY2ggb3V0bGl2ZWQKdGhlIGxpZmV0aW1lIG9mIHRoZSBmdW5jdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MTIKIyFbZmVhdHVyZSh0aHJlYWRfbG9jYWwpXQoKI1t0aHJlYWRfbG9jYWxdCnN0YXRpYyBGT086IHU4ID0gMzsKCmZuIG1haW4oKSB7CiAgICBsZXQgYSA9ICZGT087IC8vIGVycm9yOiB0aHJlYWQtbG9jYWwgdmFyaWFibGUgYm9ycm93ZWQgcGFzdCBlbmQgb2YgZnVuY3Rpb24KCiAgICBzdGQ6OnRocmVhZDo6c3Bhd24obW92ZSB8fCB7CiAgICAgICAgcHJpbnRsbiEoInt9IiwgYSk7CiAgICB9KTsKfQpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEHgwODAwABAIMDAKKXASacBgAArAwAAACtDAAAvQIOBgAAqwwCBQEEU29tZQEBAJ8OAAGsDAAAvQIOBgACqwwAAQCoAiQGAACqDAEBAJ8OAAIAqQISmwYAnw4FAQVFMDcxMgABHwUFAAEABQCoAiQGAACqDAEBAaQOAAGrDAAA0ZcBJp4GAACxDAAAAgDRlwEmngYAnw4FAYcOVGhpcyBlcnJvciBvY2N1cnMgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gYm9ycm93IHN0YXRlIHBhc3QgdGhlIGVuZCBvZiB0aGUKbGlmZXRpbWUgb2YgYSB0eXBlIHRoYXQgaW1wbGVtZW50cyB0aGUgYERyb3BgIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcxMwojIVtmZWF0dXJlKG5sbCldCgpwdWIgc3RydWN0IFM8J2E+IHsgZGF0YTogJidhIG11dCBTdHJpbmcgfQoKaW1wbDwnYT4gRHJvcCBmb3IgUzwnYT4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsgc2VsZi5kYXRhLnB1c2hfc3RyKCJiZWluZyBkcm9wcGVkIik7IH0KfQoKZm4gZGVtbzwnYT4oczogUzwnYT4pIC0+ICYnYSBtdXQgU3RyaW5nIHsgbGV0IHAgPSAmbXV0ICpzLmRhdGE7IHAgfQpgYGAKCkhlcmUsIGBkZW1vYCB0cmllcyB0byBib3Jyb3cgdGhlIHN0cmluZyBkYXRhIGhlbGQgd2l0aGluIGl0cwphcmd1bWVudCBgc2AgYW5kIHRoZW4gcmV0dXJuIHRoYXQgYm9ycm93LiBIb3dldmVyLCBgU2AgaXMKZGVjbGFyZWQgYXMgaW1wbGVtZW50aW5nIGBEcm9wYC4KClN0cnVjdHMgaW1wbGVtZW50aW5nIHRoZSBgRHJvcGAgdHJhaXQgaGF2ZSBhbiBpbXBsaWNpdCBkZXN0cnVjdG9yIHRoYXQKZ2V0cyBjYWxsZWQgd2hlbiB0aGV5IGdvIG91dCBvZiBzY29wZS4gVGhpcyBkZXN0cnVjdG9yIGdldHMgZXhjbHVzaXZlCmFjY2VzcyB0byB0aGUgZmllbGRzIG9mIHRoZSBzdHJ1Y3Qgd2hlbiBpdCBydW5zLgoKVGhpcyBtZWFucyB0aGF0IHdoZW4gYHNgIHJlYWNoZXMgdGhlIGVuZCBvZiBgZGVtb2AsIGl0cyBkZXN0cnVjdG9yCmdldHMgZXhjbHVzaXZlIGFjY2VzcyB0byBpdHMgYCZtdXRgLWJvcnJvd2VkIHN0cmluZyBkYXRhLiAgYWxsb3dpbmcKYW5vdGhlciBib3Jyb3cgb2YgdGhhdCBzdHJpbmcgZGF0YSAoYHBgKSwgdG8gZXhpc3QgYWNyb3NzIHRoZSBkcm9wIG9mCmBzYCB3b3VsZCBiZSBhIHZpb2xhdGlvbiBvZiB0aGUgcHJpbmNpcGxlIHRoYXQgYCZtdXRgLWJvcnJvd3MgaGF2ZQpleGNsdXNpdmUsIHVuYWxpYXNlZCBhY2Nlc3MgdG8gdGhlaXIgcmVmZXJlbmNlZCBkYXRhLgoKVGhpcyBlcnJvciBjYW4gYmUgZml4ZWQgYnkgY2hhbmdpbmcgYGRlbW9gIHNvIHRoYXQgdGhlIGRlc3RydWN0b3IgZG9lcwpub3QgcnVuIHdoaWxlIHRoZSBzdHJpbmctZGF0YSBpcyBib3Jyb3dlZDsgZm9yIGV4YW1wbGUgYnkgdGFraW5nIGBTYApieSByZWZlcmVuY2U6CgpgYGAKcHViIHN0cnVjdCBTPCdhPiB7IGRhdGE6ICYnYSBtdXQgU3RyaW5nIH0KCmltcGw8J2E+IERyb3AgZm9yIFM8J2E+IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7IHNlbGYuZGF0YS5wdXNoX3N0cigiYmVpbmcgZHJvcHBlZCIpOyB9Cn0KCmZuIGRlbW88J2E+KHM6ICYnYSBtdXQgUzwnYT4pIC0+ICYnYSBtdXQgU3RyaW5nIHsgbGV0IHAgPSAmbXV0ICooKnMpLmRhdGE7IHAgfQpgYGAKCk5vdGUgdGhhdCB0aGlzIGFwcHJvYWNoIG5lZWRzIGEgcmVmZXJlbmNlIHRvIFMgd2l0aCBsaWZldGltZSBgJ2FgLgpOb3RoaW5nIHNob3J0ZXIgdGhhbiBgJ2FgIHdpbGwgc3VmZmljZTogYSBzaG9ydGVyIGxpZmV0aW1lIHdvdWxkIGltcGx5CnRoYXQgYWZ0ZXIgYGRlbW9gIGZpbmlzaGVzIGV4ZWN1dGluZywgc29tZXRoaW5nIGVsc2UgKHN1Y2ggYXMgdGhlCmRlc3RydWN0b3IhKSBjb3VsZCBhY2Nlc3MgYHMuZGF0YWAgYWZ0ZXIgdGhlIGVuZCBvZiB0aGF0IHNob3J0ZXIKbGlmZXRpbWUsIHdoaWNoIHdvdWxkIGFnYWluIHZpb2xhdGUgdGhlIGAmbXV0YC1ib3Jyb3cncyBleGNsdXNpdmUKYWNjZXNzLgoAHf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wF/hw6HDgABAIcOANGXASaeBgAAsAwAAACxDAAAvQIOBgAArwwCBQEEU29tZQEBAJ8OAAGwDAAAvQIOBgACrwwAAQCoAiQGAACu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bGV0IHEgPSAqcDsKYGBgCgpIZXJlLCB0aGUgZXhwcmVzc2lvbiBgJmZvbygpYCBpcyBib3Jyb3dpbmcgdGhlIGV4cHJlc3Npb24gYGZvbygpYC4gQXMgYGZvbygpYCBpcwphIGNhbGwgdG8gYSBmdW5jdGlvbiwgYW5kIG5vdCB0aGUgbmFtZSBvZiBhIHZhcmlhYmxlLCB0aGlzIGNyZWF0ZXMgYQoqKnRlbXBvcmFyeSoqIC0tIHRoYXQgdGVtcG9yYXJ5IHN0b3JlcyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYGZvbygpYCBzbyB0aGF0IGl0CmNhbiBiZSBib3Jyb3dlZC4gWW91IGNvdWxkIGltYWdpbmUgdGhhdCBgbGV0IHAgPSBiYXIoJmZvbygpKTtgIGlzIGVxdWl2YWxlbnQgdG8KdGhpczoKCmBgYGNvbXBpbGVfZmFpbCxFMDU5NwojIGZuIGZvbygpIC0+IGkzMiB7IDIyIH0KIyBmbiBiYXIoeDogJmkzMikgLT4gJmkzMiB7IHggfQpsZXQgcCA9IHsKICBsZXQgdG1wID0gZm9vKCk7IC8vIHRoZSB0ZW1wb3JhcnkKICBiYXIoJnRtcCkKfTsgLy8gPC0tIHRtcCBpcyBmcmVlZCBhcyB3ZSBleGl0IHRoaXMgYmxvY2sKbGV0IHEgPSBwOwpgYGAKCldoZW5ldmVyIGEgdGVtcG9yYXJ5IGlzIGNyZWF0ZWQsIGl0IGlzIGF1dG9tYXRpY2FsbHkgZHJvcHBlZCAoZnJlZWQpIGFjY29yZGluZwp0byBmaXhlZCBydWxlcy4gT3JkaW5hcmlseSwgdGhlIHRlbXBvcmFyeSBpcyBkcm9wcGVkIGF0IHRoZSBlbmQgb2YgdGhlIGVuY2xvc2luZwpzdGF0ZW1lbnQgLS0gaW4gdGhpcyBjYXNlLCBhZnRlciB0aGUgYGxldGAuIFRoaXMgaXMgaWxsdXN0cmF0ZWQgaW4gdGhlIGV4YW1wbGUKYWJvdmUgYnkgc2hvd2luZyB0aGF0IGB0bXBgIHdvdWxkIGJlIGZyZWVkIGFzIHdlIGV4aXQgdGhlIGJsb2NrLgoKVG8gZml4IHRoaXMgcHJvYmxlbSwgeW91IG5lZWQgdG8gY3JlYXRlIGEgbG9jYWwgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHZhbHVlIGluCnJhdGhlciB0aGFuIHJlbHlpbmcgb24gYSB0ZW1wb3JhcnkuIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgY2hhbmdlIHRoZSBvcmlnaW5hbApwcm9ncmFtIHRvIHRoZSBmb2xsb3dpbmc6CgpgYGAKZm4gZm9vKCkgLT4gaTMyIHsgMjIgfQpmbiBiYXIoeDogJmkzMikgLT4gJmkzMiB7IHggfQpsZXQgdmFsdWUgPSBmb28oKTsgLy8gZHJvcHBlZCBhdCB0aGUgZW5kIG9mIHRoZSBlbmNsb3NpbmcgYmxvY2sKbGV0IHAgPSBiYXIoJnZhbHVlKTsKbGV0IHEgPSAqcDsKYGBgCgpCeSBpbnRyb2R1Y2luZyB0aGUgZXhwbGljaXQgYGxldCB2YWx1ZWAsIHdlIGFsbG9jYXRlIHN0b3JhZ2UgdGhhdCB3aWxsIGxhc3QKdW50aWwgdGhlIGVuZCBvZiB0aGUgZW5jbG9zaW5nIGJsb2NrICh3aGVuIGB2YWx1ZWAgZ29lcyBvdXQgb2Ygc2NvcGUpLiBXaGVuIHdlCmJvcnJvdyBgJnZhbHVlYCwgd2UgYXJlIGJvcnJvd2luZyBhIGxvY2FsIHZhcmlhYmxlIHRoYXQgYWxyZWFkeSBleGlzdHMsIGFuZApoZW5jZSBubyB0ZW1wb3JhcnkgaXMgY3JlYXRlZC4KClRlbXBvcmFyaWVzIGFyZSBub3QgYWx3YXlzIGRyb3BwZWQgYXQgdGhlIGVuZCBvZiB0aGUgZW5jbG9zaW5nIHN0YXRlbWVudC4gSW4Kc2ltcGxlIGNhc2VzIHdoZXJlIHRoZSBgJmAgZXhwcmVzc2lvbiBpcyBpbW1lZGlhdGVseSBzdG9yZWQgaW50byBhIHZhcmlhYmxlLCB0aGUKY29tcGlsZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGV4dGVuZCB0aGUgbGlmZXRpbWUgb2YgdGhlIHRlbXBvcmFyeSB1bnRpbCB0aGUgZW5kCm9mIHRoZSBlbmNsb3NpbmcgYmxvY2suIFRoZXJlZm9yZSwgYW4gYWx0ZXJuYXRpdmUgd2F5IHRvIGZpeCB0aGUgb3JpZ2luYWwKcHJvZ3JhbSBpcyB0byB3cml0ZSBgbGV0IHRtcCA9ICZmb28oKWAgYW5kIG5vdCBgbGV0IHRtcCA9IGZvbygpYDoKCmBgYApmbiBmb28oKSAtPiBpMzIgeyAyMiB9CmZuIGJhcih4OiAmaTMyKSAtPiAmaTMyIHsgeCB9CmxldCB2YWx1ZSA9ICZmb28oKTsKbGV0IHAgPSBiYXIodmFsdWUpOwpsZXQgcSA9ICpwOwpgYGAKCkhlcmUsIHdlIGFyZSBzdGlsbCBib3Jyb3dpbmcgYGZvbygpYCwgYnV0IGFzIHRoZSBib3Jyb3cgaXMgYXNzaWduZWQgZGlyZWN0bHkKaW50byBhIHZhcmlhYmxlLCB0aGUgdGVtcG9yYXJ5IHdpbGwgbm90IGJlIGRyb3BwZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUKZW5jbG9zaW5nIGJsb2NrLiBTaW1pbGFyIHJ1bGVzIGFwcGx5IHdoZW4gdGVtcG9yYXJpZXMgYXJlIHN0b3JlZCBpbnRvIGFnZ3JlZ2F0ZQpzdHJ1Y3R1cmVzIGxpa2UgYSB0dXBsZSBvciBzdHJ1Y3Q6CgpgYGAKLy8gSGVyZSwgdHdvIHRlbXBvcmFyaWVzIGFyZSBjcmVhdGVkLCBidXQKLy8gYXMgdGhleSBhcmUgc3RvcmVkIGRpcmVjdGx5IGludG8gYHZhbHVlYCwKLy8gdGhleSBhcmUgbm90IGRyb3BwZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUKLy8gZW5jbG9zaW5nIGJsb2NrLgpmbiBmb28oKSAtPiBpMzIgeyAyMiB9CmxldCB2YWx1ZSA9ICgmZm9vKCksICZmb28oKSk7CmBgYAoAKv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////D9kU2RQAAQDZFADemAEmpAYAALwMAAAAvQwAAL0CDgYAALsMAgUBBFNvbWUBAQCfDgABvAwAAL0CDgYAArsMAAEAqAIkBgAAugwBAQCfDgACAKkCEqMGAJ8OBQEFRTA3MTYAAR8FBQABAAUAqAIkBgAAugwBAQGkDgABuwwAAI2ZASamBgAAwQwAAAIAjZkBJqYGAJ8OBQG3AUEgYCNbbGFuZyA9ICIuLiJdYCBhdHRyaWJ1dGUgd2FzIHBsYWNlZCBvbiB0aGUgd3JvbmcgaXRlbSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcxOAojIVtmZWF0dXJlKGxhbmdfaXRlbXMpXQoKI1tsYW5nID0gIm93bmVkX2JveCJdCnN0YXRpYyBYOiB1MzIgPSA0MjsKYGBgCgAD////////////Af///////////wH/////////P7cBtwEAAQC3AQCNmQEmpgYAAMAMAAAAwQwAAL0CDgYAAL8MAgUBBFNvbWUBAQCfDgABwAwAAL0CDgYAAr8MAAEAqAIkBgAAvgwBAQCfDgACAKkCEqUGAJ8OBQEFRTA3MTgAAR8FBQABAAUAqAIkBgAAvgwBAQGkDgABvwwAALyZASaoBgAAxQwAAAIAvJkBJqgGAJ8OBQHGCEFuIGFzc29jaWF0ZWQgdHlwZSB2YWx1ZSB3YXMgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcxOQojIVtmZWF0dXJlKGFzc29jaWF0ZWRfdHlwZV9ib3VuZHMpXQoKdHJhaXQgRm9vVHJhaXQge30KdHJhaXQgQmFyVHJhaXQge30KCi8vIGVycm9yOiBhc3NvY2lhdGVkIHR5cGUgYEl0ZW1gIGluIHRyYWl0IGBJdGVyYXRvcmAgaXMgc3BlY2lmaWVkIHR3aWNlCnN0cnVjdCBGb288VDogSXRlcmF0b3I8SXRlbTogRm9vVHJhaXQsIEl0ZW06IEJhclRyYWl0Pj4geyBmOiBUIH0KYGBgCgpgSXRlbWAgaW4gdHJhaXQgYEl0ZXJhdG9yYCBjYW5ub3QgYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzIGZvciBzdHJ1Y3QgYEZvb2AuClRvIGZpeCB0aGlzLCBjcmVhdGUgYSBuZXcgdHJhaXQgdGhhdCBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBkZXNpcmVkIHRyYWl0cyBhbmQKc3BlY2lmeSB0aGUgYXNzb2NpYXRlZCB0eXBlIHdpdGggdGhlIG5ldyB0cmFpdC4KCkNvcnJlY3RlZCBleGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoYXNzb2NpYXRlZF90eXBlX2JvdW5kcyldCgp0cmFpdCBGb29UcmFpdCB7fQp0cmFpdCBCYXJUcmFpdCB7fQp0cmFpdCBGb29CYXJUcmFpdDogRm9vVHJhaXQgKyBCYXJUcmFpdCB7fQoKc3RydWN0IEZvbzxUOiBJdGVyYXRvcjxJdGVtOiBGb29CYXJUcmFpdD4+IHsgZjogVCB9IC8vIG9rIQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGFzc29jaWF0ZWQgdHlwZXMsIHNlZSBbdGhlIGJvb2tdW2JrLWF0XS4gRm9yIG1vcmUKaW5mb3JtYXRpb24gb24gYXNzb2NpYXRlZCB0eXBlIGJvdW5kcywgc2VlIFtSRkMgMjI4OV1bcmZjLTIyODldLgoKW2JrLWF0XTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTktMDMtYWR2YW5jZWQtdHJhaXRzLmh0bWwjc3BlY2lmeWluZy1wbGFjZWhvbGRlci10eXBlcy1pbi10cmFpdC1kZWZpbml0aW9ucy13aXRoLWFzc29jaWF0ZWQtdHlwZXMKW3JmYy0yMjg5XTogaHR0cHM6Ly9ydXN0LWxhbmcuZ2l0aHViLmlvL3JmY3MvMjI4OS1hc3NvY2lhdGVkLXR5cGUtYm91bmRzLmh0bWwKABL///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AT/GCMYIAAEAxggAvJkBJqgGAADEDAAAAMUMAAC9Ag4GAADDDAIFAQRTb21lAQEAnw4AAcQMAAC9Ag4GAALDDAABAKgCJAYAAMIMAQEAnw4AAgCpAhKnBgCfDgUBBUUwNzE5AAEfBQUAAQAFAKgCJAYAAMIMAQEBpA4AAcMMAADrmQEmqgYAAMkMAAACAOuZASaqBgCfDgUBigNBbiBgaW1wbCBUcmFpdGAgdHlwZSBleHBhbmRzIHRvIGEgcmVjdXJzaXZlIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzIwCmZuIG1ha2VfcmVjdXJzaXZlX3R5cGUoKSAtPiBpbXBsIFNpemVkIHsKICAgIFttYWtlX3JlY3Vyc2l2ZV90eXBlKCksIG1ha2VfcmVjdXJzaXZlX3R5cGUoKV0KfQpgYGAKCkFuIGBpbXBsIFRyYWl0YCB0eXBlIG11c3QgYmUgZXhwYW5kYWJsZSB0byBhIGNvbmNyZXRlIHR5cGUgdGhhdCBjb250YWlucyBubwpgaW1wbCBUcmFpdGAgdHlwZXMuIEZvciBleGFtcGxlIHRoZSBwcmV2aW91cyBleGFtcGxlIHRyaWVzIHRvIGNyZWF0ZSBhbgpgaW1wbCBUcmFpdGAgdHlwZSBgVGAgdGhhdCBpcyBlcXVhbCB0byBgW1QsIFRdYC4KAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/B4oDigMAAQCKAwDrmQEmqgYAAMgMAAAAyQwAAL0CDgYAAMcMAgUBBFNvbWUBAQCfDgAByAwAAL0CDgYAAscMAAEAqAIkBgAAxgwBAQCfDgACAKkCEqkGAJ8OBQEFRTA3MjAAAR8FBQABAAUAqAIkBgAAxgwBAQGkDgABxwwAAJqaASasBgAAzQwAAAIAmpoBJqwGAJ8OBQGRA0FuIHVuc3RhYmxlIGZlYXR1cmUgaW4gYGNvbnN0YCBjb250ZXh0cyB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MjMKdHJhaXQgVCB7fQoKaW1wbCBUIGZvciAoKSB7fQoKY29uc3QgZm4gZm9vKCkgLT4gaW1wbCBUIHsgLy8gZXJyb3I6IGBpbXBsIFRyYWl0YCBpbiBjb25zdCBmbiBpcyB1bnN0YWJsZQogICAgKCkKfQpgYGAKClRvIGVuYWJsZSB0aGlzIGZlYXR1cmUgb24gYSBuaWdodGx5IHZlcnNpb24gb2YgcnVzdGMsIGFkZCB0aGUgYGNvbnN0X2ZuYApmZWF0dXJlIGZsYWc6CgpgYGAKIyFbZmVhdHVyZShjb25zdF9mbildCgp0cmFpdCBUIHt9CgppbXBsIFQgZm9yICgpIHt9Cgpjb25zdCBmbiBmb28oKSAtPiBpbXBsIFQgewogICAgKCkKfQpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//weRA5EDAAEAkQMAmpoBJqwGAADMDAAAAM0MAAC9Ag4GAADLDAIFAQRTb21lAQEAnw4AAcwMAAC9Ag4GAALLDAABAKgCJAYAAMoMAQEAnw4AAgCpAhKrBgCfDgUBBUUwNzIzAAEfBQUAAQAFAKgCJAYAAMoMAQEBpA4AAcsMAADJmgEmrgYAANEMAAACAMmaASauBgCfDgUBjQRgI1tmZmlfcmV0dXJuc190d2ljZV1gIHdhcyB1c2VkIG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgZm9yZWlnbiBmdW5jdGlvbgpkZWNsYXJhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MjQKIyFbZmVhdHVyZShmZmlfcmV0dXJuc190d2ljZSldCiMhW2NyYXRlX3R5cGUgPSAibGliIl0KCiNbZmZpX3JldHVybnNfdHdpY2VdIC8vIGVycm9yIQpwdWIgZm4gZm9vKCkge30KYGBgCgpgI1tmZmlfcmV0dXJuc190d2ljZV1gIGNhbiBvbmx5IGJlIHVzZWQgb24gZm9yZWlnbiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCkZvciBleGFtcGxlLCB3ZSBtaWdodCBjb3JyZWN0IHRoZSBwcmV2aW91cyBleGFtcGxlIGJ5IGRlY2xhcmluZwp0aGUgZnVuY3Rpb24gaW5zaWRlIG9mIGFuwqBgZXh0ZXJuYMKgYmxvY2suCgpgYGAKIyFbZmVhdHVyZShmZmlfcmV0dXJuc190d2ljZSldCgpleHRlcm4gewogICAjW2ZmaV9yZXR1cm5zX3R3aWNlXSAvLyBvayEKICAgcHViIGZuIGZvbygpOwp9CmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/z+NBI0EAAEAjQQAyZoBJq4GAADQDAAAANEMAAC9Ag4GAADPDAIFAQRTb21lAQEAnw4AAdAMAAC9Ag4GAALPDAABAKgCJAYAAM4MAQEAnw4AAgCpAhKtBgCfDgUBBUUwNzI0AAEfBQUAAQAFAKgCJAYAAM4MAQEBpA4AAc8MAAD4mgEmsAYAANUMAAACAPiaASawBgCfDgUBogNBIGZlYXR1cmUgYXR0cmlidXRlIG5hbWVkIGEgZmVhdHVyZSB0aGF0IHdhcyBkaXNhbGxvd2VkIGluIHRoZSBjb21waWxlcgpjb21tYW5kIGxpbmUgZmxhZ3MuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgaWdub3JlIChjYW4ndCBzcGVjaWZ5IGNvbXBpbGVyIGZsYWdzIGZyb20gZG9jdGVzdHMpCiMhW2ZlYXR1cmUobmV2ZXJfdHlwZSldIC8vIGVycm9yOiB0aGUgZmVhdHVyZSBgbmV2ZXJfdHlwZWAgaXMgbm90IGluCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBsaXN0IG9mIGFsbG93ZWQgZmVhdHVyZXMKYGBgCgpEZWxldGUgdGhlIG9mZmVuZGluZyBmZWF0dXJlIGF0dHJpYnV0ZSwgb3IgYWRkIGl0IHRvIHRoZSBsaXN0IG9mIGFsbG93ZWQKZmVhdHVyZXMgaW4gdGhlIGAtWiBhbGxvd19mZWF0dXJlc2AgZmxhZy4KAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////P6IDogMAAQCiAwD4mgEmsAYAANQMAAAA1QwAAL0CDgYAANMMAgUBBFNvbWUBAQCfDgAB1AwAAL0CDgYAAtMMAAEAqAIkBgAA0gwBAQCfDgACAKkCEq8GAJ8OBQEFRTA3MjUAAR8FBQABAAUAqAIkBgAA0gwBAQGkDgAB0wwAAKebASayBgAA2QwAAAIAp5sBJrIGAJ8OBQHqA0EgYHlpZWxkYCBjbGF1c2Ugd2FzIHVzZWQgaW4gYW4gYGFzeW5jYCBjb250ZXh0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcyNyxlZGl0aW9uMjAxOAojIVtmZWF0dXJlKGdlbmVyYXRvcnMpXQoKZm4gbWFpbigpIHsKICAgIGxldCBnZW5lcmF0b3IgPSB8fCB7CiAgICAgICAgYXN5bmMgewogICAgICAgICAgICB5aWVsZDsKICAgICAgICB9CiAgICB9Owp9CmBgYAoKSGVyZSwgdGhlIGB5aWVsZGAga2V5d29yZCBpcyB1c2VkIGluIGFuIGBhc3luY2AgYmxvY2ssCndoaWNoIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLgoKVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBoYXZlIHRvIG1vdmUgYHlpZWxkYCBvdXQgb2YgdGhlIGBhc3luY2AgYmxvY2s6CgpgYGBlZGl0aW9uMjAxOAojIVtmZWF0dXJlKGdlbmVyYXRvcnMpXQoKZm4gbWFpbigpIHsKICAgIGxldCBnZW5lcmF0b3IgPSB8fCB7CiAgICAgICAgeWllbGQ7CiAgICB9Owp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////3/qA+oDAAEA6gMAp5sBJrIGAADYDAAAANkMAAC9Ag4GAADXDAIFAQRTb21lAQEAnw4AAdgMAAC9Ag4GAALXDAABAKgCJAYAANYMAQEAnw4AAgCpAhKxBgCfDgUBBUUwNzI3AAEfBQUAAQAFAKgCJAYAANYMAQEBpA4AAdcMAADWmwEmtAYAAN0MAAACANabASa0BgCfDgUB/g5bYGF3YWl0YF0gaGFzIGJlZW4gdXNlZCBvdXRzaWRlIFtgYXN5bmNgXSBmdW5jdGlvbiBvciBbYGFzeW5jYF0gYmxvY2suCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgZWRpdGlvbjIwMTgsY29tcGlsZV9mYWlsLEUwNzI4CiMgdXNlIHN0ZDo6cGluOjpQaW47CiMgdXNlIHN0ZDo6ZnV0dXJlOjpGdXR1cmU7CiMgdXNlIHN0ZDo6dGFzazo6e0NvbnRleHQsIFBvbGx9OwojCiMgc3RydWN0IFdha2VPbmNlVGhlbkNvbXBsZXRlKGJvb2wpOwojCiMgZm4gd2FrZV9hbmRfeWllbGRfb25jZSgpIC0+IFdha2VPbmNlVGhlbkNvbXBsZXRlIHsKIyAgICAgV2FrZU9uY2VUaGVuQ29tcGxldGUoZmFsc2UpCiMgfQojCiMgaW1wbCBGdXR1cmUgZm9yIFdha2VPbmNlVGhlbkNvbXBsZXRlIHsKIyAgICAgdHlwZSBPdXRwdXQgPSAoKTsKIyAgICAgZm4gcG9sbChtdXQgc2VsZjogUGluPCZtdXQgU2VsZj4sIGN4OiAmbXV0IENvbnRleHQ8J18+KSAtPiBQb2xsPCgpPiB7CiMgICAgICAgICBpZiBzZWxmLjAgewojICAgICAgICAgICAgIFBvbGw6OlJlYWR5KCgpKQojICAgICAgICAgfSBlbHNlIHsKIyAgICAgICAgICAgICBjeC53YWtlcigpLndha2VfYnlfcmVmKCk7CiMgICAgICAgICAgICAgc2VsZi4wID0gdHJ1ZTsKIyAgICAgICAgICAgICBQb2xsOjpQZW5kaW5nCiMgICAgICAgICB9CiMgICAgIH0KIyB9CiMKZm4gZm9vKCkgewogICAgd2FrZV9hbmRfeWllbGRfb25jZSgpLmF3YWl0IC8vIGBhd2FpdGAgaXMgdXNlZCBvdXRzaWRlIGBhc3luY2AgY29udGV4dAp9CmBgYAoKW2Bhd2FpdGBdIGlzIHVzZWQgdG8gc3VzcGVuZCB0aGUgY3VycmVudCBjb21wdXRhdGlvbiB1bnRpbCB0aGUgZ2l2ZW4KZnV0dXJlIGlzIHJlYWR5IHRvIHByb2R1Y2UgYSB2YWx1ZS4gU28gaXQgaXMgbGVnYWwgb25seSB3aXRoaW4KYW4gW2Bhc3luY2BdIGNvbnRleHQsIGxpa2UgYW4gYGFzeW5jYCBmdW5jdGlvbiBvciBhbiBgYXN5bmNgIGJsb2NrLgoKYGBgZWRpdGlvbjIwMTgKIyB1c2Ugc3RkOjpwaW46OlBpbjsKIyB1c2Ugc3RkOjpmdXR1cmU6OkZ1dHVyZTsKIyB1c2Ugc3RkOjp0YXNrOjp7Q29udGV4dCwgUG9sbH07CiMKIyBzdHJ1Y3QgV2FrZU9uY2VUaGVuQ29tcGxldGUoYm9vbCk7CiMKIyBmbiB3YWtlX2FuZF95aWVsZF9vbmNlKCkgLT4gV2FrZU9uY2VUaGVuQ29tcGxldGUgewojICAgICBXYWtlT25jZVRoZW5Db21wbGV0ZShmYWxzZSkKIyB9CiMKIyBpbXBsIEZ1dHVyZSBmb3IgV2FrZU9uY2VUaGVuQ29tcGxldGUgewojICAgICB0eXBlIE91dHB1dCA9ICgpOwojICAgICBmbiBwb2xsKG11dCBzZWxmOiBQaW48Jm11dCBTZWxmPiwgY3g6ICZtdXQgQ29udGV4dDwnXz4pIC0+IFBvbGw8KCk+IHsKIyAgICAgICAgIGlmIHNlbGYuMCB7CiMgICAgICAgICAgICAgUG9sbDo6UmVhZHkoKCkpCiMgICAgICAgICB9IGVsc2UgewojICAgICAgICAgICAgIGN4Lndha2VyKCkud2FrZV9ieV9yZWYoKTsKIyAgICAgICAgICAgICBzZWxmLjAgPSB0cnVlOwojICAgICAgICAgICAgIFBvbGw6OlBlbmRpbmcKIyAgICAgICAgIH0KIyAgICAgfQojIH0KIwphc3luYyBmbiBmb28oKSB7CiAgICB3YWtlX2FuZF95aWVsZF9vbmNlKCkuYXdhaXQgLy8gYGF3YWl0YCBpcyB1c2VkIHdpdGhpbiBgYXN5bmNgIGZ1bmN0aW9uCn0KCmZuIGJhcih4OiB1OCkgLT4gaW1wbCBGdXR1cmU8T3V0cHV0ID0gdTg+IHsKICAgIGFzeW5jIG1vdmUgewogICAgICAgIHdha2VfYW5kX3lpZWxkX29uY2UoKS5hd2FpdDsgLy8gYGF3YWl0YCBpcyB1c2VkIHdpdGhpbiBgYXN5bmNgIGJsb2NrCiAgICAgICAgeAogICAgfQp9CmBgYAoKW2Bhc3luY2BdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0ZC9rZXl3b3JkLmFzeW5jLmh0bWwKW2Bhd2FpdGBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0ZC9rZXl3b3JkLmF3YWl0Lmh0bWwKAB7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////P/4O/g4AAQD+DgDWmwEmtAYAANwMAAAA3QwAAL0CDgYAANsMAgUBBFNvbWUBAQCfDgAB3AwAAL0CDgYAAtsMAAEAqAIkBgAA2gwBAQCfDgACAKkCErMGAJ8OBQEFRTA3MjgAAR8FBQABAAUAqAIkBgAA2gwBAQGkDgAB2wwAAIWcASa2BgAA4QwAAAIAhZwBJrYGAJ8OBQGkCVN1cHBvcnQgZm9yIE5vbi1MZXhpY2FsIExpZmV0aW1lcyAoTkxMKSBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgUnVzdCBjb21waWxlcgpzaW5jZSAxLjMxLCBhbmQgaGFzIGJlZW4gZW5hYmxlZCBvbiB0aGUgMjAxNSBlZGl0aW9uIHNpbmNlIDEuMzYuIFRoZSBuZXcgYm9ycm93CmNoZWNrZXIgZm9yIE5MTCB1bmNvdmVyZWQgc29tZSBidWdzIGluIHRoZSBvbGQgYm9ycm93IGNoZWNrZXIsIHdoaWNoIGluIHNvbWUKY2FzZXMgYWxsb3dlZCB1bnNvdW5kIGNvZGUgdG8gY29tcGlsZSwgcmVzdWx0aW5nIGluIG1lbW9yeSBzYWZldHkgaXNzdWVzLgoKIyMjIFdoYXQgZG8gSSBkbz8KCkNoYW5nZSB5b3VyIGNvZGUgc28gdGhlIHdhcm5pbmcgZG9lcyBubyBsb25nZXIgdHJpZ2dlci4gRm9yIGJhY2t3YXJkcwpjb21wYXRpYmlsaXR5LCB0aGlzIHVuc291bmQgY29kZSBtYXkgc3RpbGwgY29tcGlsZSAod2l0aCBhIHdhcm5pbmcpIHJpZ2h0IG5vdy4KSG93ZXZlciwgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCBubyBsb25nZXIgYWNjZXB0IHRoaXMKY29kZSBhbmQgd2lsbCB0aHJvdyBhIGhhcmQgZXJyb3IuCgojIyMgU2hvdWxkbid0IHlvdSBmaXggdGhlIG9sZCBib3Jyb3cgY2hlY2tlcj8KClRoZSBvbGQgYm9ycm93IGNoZWNrZXIgaGFzIGtub3duIHNvdW5kbmVzcyBpc3N1ZXMgdGhhdCBhcmUgYmFzaWNhbGx5IGltcG9zc2libGUKdG8gZml4LiBUaGUgbmV3IE5MTC1iYXNlZCBib3Jyb3cgY2hlY2tlciBpcyB0aGUgZml4LgoKIyMjIENhbiBJIHR1cm4gdGhlc2Ugd2FybmluZ3MgaW50byBlcnJvcnMgYnkgZGVueWluZyBhIGxpbnQ/CgpOby4KCiMjIyBXaGVuIGFyZSB0aGVzZSB3YXJuaW5ncyBnb2luZyB0byB0dXJuIGludG8gZXJyb3JzPwoKTm8gZm9ybWFsIHRpbWVsaW5lIGZvciB0dXJuaW5nIHRoZSB3YXJuaW5ncyBpbnRvIGVycm9ycyBoYXMgYmVlbiBzZXQuIFNlZQpbR2l0SHViIGlzc3VlIDU4NzgxXShodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzU4NzgxKSBmb3IgbW9yZQppbmZvcm1hdGlvbi4KCiMjIyBXaHkgZG8gSSBnZXQgdGhpcyBtZXNzYWdlIHdpdGggY29kZSB0aGF0IGRvZXNuJ3QgaW52b2x2ZSBib3Jyb3dpbmc/CgpUaGVyZSBhcmUgc29tZSBrbm93biBidWdzIHRoYXQgdHJpZ2dlciB0aGlzIG1lc3NhZ2UuCgAT////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8BpAmkCQABAKQJAIWcASa2BgAA4AwAAADhDAAAvQIOBgAA3wwCBQEEU29tZQEBAJ8OAAHgDAAAvQIOBgAC3wwAAQCoAiQGAADeDAEBAJ8OAAIAqQIStQYAnw4FAQVFMDcyOQABHwUFAAEABQCoAiQGAADeDAEBAaQOAAHfDAAAtJwBJrgGAADlDAAAAgC0nAEmuAYAnw4FAasGQW4gYXJyYXkgd2l0aG91dCBhIGZpeGVkIGxlbmd0aCB3YXMgcGF0dGVybi1tYXRjaGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDczMAojIVtmZWF0dXJlKGNvbnN0X2dlbmVyaWNzKV0KCmZuIGlzXzEyMzxjb25zdCBOOiB1c2l6ZT4oeDogW3UzMjsgTl0pIC0+IGJvb2wgewogICAgbWF0Y2ggeCB7CiAgICAgICAgWzEsIDIsIC4uXSA9PiB0cnVlLCAvLyBlcnJvcjogY2Fubm90IHBhdHRlcm4tbWF0Y2ggb24gYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBhcnJheSB3aXRob3V0IGEgZml4ZWQgbGVuZ3RoCiAgICAgICAgXyA9PiBmYWxzZQogICAgfQp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBoYXZlIHR3byBzb2x1dGlvbnM6CiAxLiBVc2UgYW4gYXJyYXkgd2l0aCBhIGZpeGVkIGxlbmd0aC4KIDIuIFVzZSBhIHNsaWNlLgoKRXhhbXBsZSB3aXRoIGFuIGFycmF5IHdpdGggYSBmaXhlZCBsZW5ndGg6CgpgYGAKZm4gaXNfMTIzKHg6IFt1MzI7IDNdKSAtPiBib29sIHsgLy8gV2UgdXNlIGFuIGFycmF5IHdpdGggYSBmaXhlZCBzaXplCiAgICBtYXRjaCB4IHsKICAgICAgICBbMSwgMiwgLi5dID0+IHRydWUsIC8vIG9rIQogICAgICAgIF8gPT4gZmFsc2UKICAgIH0KfQpgYGAKCkV4YW1wbGUgd2l0aCBhIHNsaWNlOgoKYGBgCmZuIGlzXzEyMyh4OiAmW3UzMl0pIC0+IGJvb2wgeyAvLyBXZSB1c2UgYSBzbGljZQogICAgbWF0Y2ggeCB7CiAgICAgICAgWzEsIDIsIC4uXSA9PiB0cnVlLCAvLyBvayEKICAgICAgICBfID0+IGZhbHNlCiAgICB9Cn0KYGBgCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////AasGqwYAAQCrBgC0nAEmuAYAAOQMAAAA5QwAAL0CDgYAAOMMAgUBBFNvbWUBAQCfDgAB5AwAAL0CDgYAAuMMAAEAqAIkBgAA4gwBAQCfDgACAKkCErcGAJ8OBQEFRTA3MzAAAR8FBQABAAUAqAIkBgAA4gwBAQGkDgAB4wwAAOOcASa6BgAA6QwAAAIA45wBJroGAJ8OBQGCBEFuIGVudW0gd2l0aCB0aGUgcmVwcmVzZW50YXRpb24gaGludCBgcmVwcih0cmFuc3BhcmVudClgIGhhZCB6ZXJvIG9yIG1vcmUgdGhhbgpvbmUgdmFyaWFudHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzMxCiNbcmVwcih0cmFuc3BhcmVudCldCmVudW0gU3RhdHVzIHsgLy8gZXJyb3I6IHRyYW5zcGFyZW50IGVudW0gbmVlZHMgZXhhY3RseSBvbmUgdmFyaWFudCwgYnV0IGhhcyAyCiAgICBFcnJubyh1MzIpLAogICAgT2ssCn0KYGBgCgpCZWNhdXNlIHRyYW5zcGFyZW50IGVudW1zIGFyZSByZXByZXNlbnRlZCBleGFjdGx5IGxpa2Ugb25lIG9mIHRoZWlyIHZhcmlhbnRzIGF0CnJ1biB0aW1lLCBzYWlkIHZhcmlhbnQgbXVzdCBiZSB1bmlxdWVseSBkZXRlcm1pbmVkLiBJZiB0aGVyZSBpcyBubyB2YXJpYW50LCBvcgppZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmFyaWFudHMsIGl0IGlzIG5vdCBjbGVhciBob3cgdGhlIGVudW0gc2hvdWxkIGJlCnJlcHJlc2VudGVkLgoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BA4IEggQAAQCCBADjnAEmugYAAOgMAAAA6QwAAL0CDgYAAOcMAgUBBFNvbWUBAQCfDgAB6AwAAL0CDgYAAucMAAEAqAIkBgAA5gwBAQCfDgACAKkCErkGAJ8OBQEFRTA3MzEAAR8FBQABAAUAqAIkBgAA5gwBAQGkDgAB5wwAAJKdASa8BgAA7QwAAAIAkp0BJrwGAJ8OBQHPB0FuIGBlbnVtYCB3aXRoIGEgZGlzY3JpbWluYW50IG11c3Qgc3BlY2lmeSBhIGAjW3JlcHIoaW50dHlwZSldYC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MzIKIyFbZmVhdHVyZShhcmJpdHJhcnlfZW51bV9kaXNjcmltaW5hbnQpXQoKZW51bSBFbnVtIHsgLy8gZXJyb3IhCiAgICBVbml0ID0gMSwKICAgIFR1cGxlKCkgPSAyLAogICAgU3RydWN0e30gPSAzLAp9CiMgZm4gbWFpbigpIHt9CmBgYAoKQSBgI1tyZXByKGludHR5cGUpXWAgbXVzdCBiZSBwcm92aWRlZCBvbiBhbiBgZW51bWAgaWYgaXQgaGFzIGEgbm9uLXVuaXQKdmFyaWFudCB3aXRoIGEgZGlzY3JpbWluYW50LCBvciB3aGVyZSB0aGVyZSBhcmUgYm90aCB1bml0IHZhcmlhbnRzIHdpdGgKZGlzY3JpbWluYW50cyBhbmQgbm9uLXVuaXQgdmFyaWFudHMuIFRoaXMgcmVzdHJpY3Rpb24gZW5zdXJlcyB0aGF0IHRoZXJlCmlzIGEgd2VsbC1kZWZpbmVkIHdheSB0byBleHRyYWN0IGEgdmFyaWFudCdzIGRpc2NyaW1pbmFudCBmcm9tIGEgdmFsdWU7CmZvciBpbnN0YW5jZToKCmBgYAojIVtmZWF0dXJlKGFyYml0cmFyeV9lbnVtX2Rpc2NyaW1pbmFudCldCgojW3JlcHIodTgpXQplbnVtIEVudW0gewogICAgVW5pdCA9IDMsCiAgICBUdXBsZSh1MTYpID0gMiwKICAgIFN0cnVjdCB7CiAgICAgICAgYTogdTgsCiAgICAgICAgYjogdTE2LAogICAgfSA9IDEsCn0KCmZuIGRpc2NyaW1pbmFudCh2IDogJkVudW0pIC0+IHU4IHsKICAgIHVuc2FmZSB7ICoodiBhcyAqY29uc3QgRW51bSBhcyAqY29uc3QgdTgpIH0KfQoKZm4gbWFpbigpIHsKICAgIGFzc2VydF9lcSEoMywgZGlzY3JpbWluYW50KCZFbnVtOjpVbml0KSk7CiAgICBhc3NlcnRfZXEhKDIsIGRpc2NyaW1pbmFudCgmRW51bTo6VHVwbGUoNSkpKTsKICAgIGFzc2VydF9lcSEoMSwgZGlzY3JpbWluYW50KCZFbnVtOjpTdHJ1Y3R7YTogNywgYjogMTF9KSk7Cn0KYGBgCgAQ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8BzwfPBwABAM8HAJKdASa8BgAA7AwAAADtDAAAvQIOBgAA6wwCBQEEU29tZQEBAJ8OAAHsDAAAvQIOBgAC6wwAAQCoAiQGAADqDAEBAJ8OAAIAqQISuwYAnw4FAQVFMDczMgABHwUFAAEABQCoAiQGAADqDAEBAaQOAAHrDAAAwZ0BJr4GAADxDAAAAgDBnQEmvgYAnw4FAeEHQW4gW2Bhc3luY2BdIGZ1bmN0aW9uIHVzZWQgcmVjdXJzaW9uIHdpdGhvdXQgYm94aW5nLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGVkaXRpb24yMDE4LGNvbXBpbGVfZmFpbCxFMDczMwphc3luYyBmbiBmb28objogdXNpemUpIHsKICAgIGlmIG4gPiAwIHsKICAgICAgICBmb28obiAtIDEpLmF3YWl0OwogICAgfQp9CmBgYAoKVG8gcGVyZm9ybSBhc3luYyByZWN1cnNpb24sIHRoZSBgYXN5bmMgZm5gIG5lZWRzIHRvIGJlIGRlc3VnYXJlZCBzdWNoIHRoYXQgdGhlCmBGdXR1cmVgIGlzIGV4cGxpY2l0IGluIHRoZSByZXR1cm4gdHlwZToKCmBgYGVkaXRpb24yMDE4LGNvbXBpbGVfZmFpbCxFMDcyMAp1c2Ugc3RkOjpmdXR1cmU6OkZ1dHVyZTsKZm4gZm9vX2Rlc3VnYXJlZChuOiB1c2l6ZSkgLT4gaW1wbCBGdXR1cmU8T3V0cHV0ID0gKCk+IHsKICAgIGFzeW5jIG1vdmUgewogICAgICAgIGlmIG4gPiAwIHsKICAgICAgICAgICAgZm9vX2Rlc3VnYXJlZChuIC0gMSkuYXdhaXQ7CiAgICAgICAgfQogICAgfQp9CmBgYAoKRmluYWxseSwgdGhlIGZ1dHVyZSBpcyB3cmFwcGVkIGluIGEgcGlubmVkIGJveDoKCmBgYGVkaXRpb24yMDE4CnVzZSBzdGQ6OmZ1dHVyZTo6RnV0dXJlOwp1c2Ugc3RkOjpwaW46OlBpbjsKZm4gZm9vX3JlY3Vyc2l2ZShuOiB1c2l6ZSkgLT4gUGluPEJveDxkeW4gRnV0dXJlPE91dHB1dCA9ICgpPj4+IHsKICAgIEJveDo6cGluKGFzeW5jIG1vdmUgewogICAgICAgIGlmIG4gPiAwIHsKICAgICAgICAgICAgZm9vX3JlY3Vyc2l2ZShuIC0gMSkuYXdhaXQ7CiAgICAgICAgfQogICAgfSkKfQpgYGAKClRoZSBgQm94PC4uLj5gIGVuc3VyZXMgdGhhdCB0aGUgcmVzdWx0IGlzIG9mIGtub3duIHNpemUsIGFuZCB0aGUgcGluIGlzCnJlcXVpcmVkIHRvIGtlZXAgaXQgaW4gdGhlIHNhbWUgcGxhY2UgaW4gbWVtb3J5LgoKW2Bhc3luY2BdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0ZC9rZXl3b3JkLmFzeW5jLmh0bWwKABD///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////H+EH4QcAAQDhBwDBnQEmvgYAAPAMAAAA8QwAAL0CDgYAAO8MAgUBBFNvbWUBAQCfDgAB8AwAAL0CDgYAAu8MAAEAqAIkBgAA7gwBAQCfDgACAKkCEr0GAJ8OBQEFRTA3MzMAAR8FBQABAAUAqAIkBgAA7gwBAQGkDgAB7wwAAPCdASbABgAA9QwAAAIA8J0BJsAGAJ8OBQGRA0Egc3RhYmlsaXR5IGF0dHJpYnV0ZSBoYXMgYmVlbiB1c2VkIG91dHNpZGUgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzM0CiNbcnVzdGNfZGVwcmVjYXRlZChzaW5jZSA9ICJiIiwgcmVhc29uID0gInRleHQiKV0gLy8gaW52YWxpZAojW3N0YWJsZShmZWF0dXJlID0gImEiLCBzaW5jZSA9ICJiIildIC8vIGludmFsaWQKI1t1bnN0YWJsZShmZWF0dXJlID0gImIiLCBpc3N1ZSA9ICJub25lIildIC8vIGludmFsaWQKZm4gZm9vKCl7fQpgYGAKClRoZXNlIGF0dHJpYnV0ZXMgYXJlIG1lYW50IHRvIG9ubHkgYmUgdXNlZCBieSB0aGUgc3RhbmRhcmQgbGlicmFyeSBhbmQgYXJlCnJlamVjdGVkIGluIHlvdXIgb3duIGNyYXRlcy4KAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//weRA5EDAAEAkQMA8J0BJsAGAAD0DAAAAPUMAAC9Ag4GAADzDAIFAQRTb21lAQEAnw4AAfQMAAC9Ag4GAALzDAABAKgCJAYAAPIMAQEAnw4AAgCpAhK/BgCfDgUBBUUwNzM0AAEfBQUAAQAFAKgCJAYAAPIMAQEBpA4AAfMMAACfngEmwgYAAPkMAAACAJ+eASbCBgCfDgUBhwJUeXBlIHBhcmFtZXRlciBkZWZhdWx0cyBjYW5ub3QgdXNlIGBTZWxmYCBvbiBzdHJ1Y3RzLCBlbnVtcywgb3IgdW5pb25zLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDczNQpzdHJ1Y3QgRm9vPFggPSBCb3g8U2VsZj4+IHsKICAgIGZpZWxkMTogT3B0aW9uPFg+LAogICAgZmllbGQyOiBPcHRpb248WD4sCn0KLy8gZXJyb3I6IHR5cGUgcGFyYW1ldGVycyBjYW5ub3QgdXNlIGBTZWxmYCBpbiB0aGVpciBkZWZhdWx0cy4KYGBgCgAF////////////Af///////////wH///////////8B////////////AX+HAocCAAEAhwIAn54BJsIGAAD4DAAAAPkMAAC9Ag4GAAD3DAIFAQRTb21lAQEAnw4AAfgMAAC9Ag4GAAL3DAABAKgCJAYAAPYMAQEAnw4AAgCpAhLBBgCfDgUBBUUwNzM1AAEfBQUAAQAFAKgCJAYAAPYMAQEBpA4AAfcMAADOngEmxAYAAP0MAAACAM6eASbEBgCfDgUBhQNgI1t0cmFja19jYWxsZXJdYCBhbmQgYCNbbmFrZWRdYCBjYW5ub3QgYm90aCBiZSBhcHBsaWVkIHRvIHRoZSBzYW1lIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDczNgojW25ha2VkXQojW3RyYWNrX2NhbGxlcl0KZm4gZm9vKCkge30KYGBgCgpUaGlzIGlzIHByaW1hcmlseSBkdWUgdG8gQUJJIGluY29tcGF0aWJpbGl0aWVzIGJldHdlZW4gdGhlIHR3byBhdHRyaWJ1dGVzLgpTZWUgW1JGQyAyMDkxXSBmb3IgZGV0YWlscyBvbiB0aGlzIGFuZCBvdGhlciBsaW1pdGF0aW9ucy4KCltSRkMgMjA5MV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzIwOTEtaW5saW5lLXNlbWFudGljLm1kCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BH4UDhQMAAQCFAwDOngEmxAYAAPwM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YiAoaW4gY3JhdGU6OlNlYSkgc3RydWN0IFNoYXJrOyAvLyBvayEKfQoKZm4gbWFpbigpIHt9CmBgYAoKT2YgY291cnNlLCB5b3UgY2FuIGRvIGl0IGFzIGxvbmcgYXMgdGhlIG1vZHVsZSB5b3UncmUgcmVmZXJyaW5nIHRvIGlzIGFuCmFuY2VzdG9yOgoKYGBgZWRpdGlvbjIwMTgKcHViIG1vZCBFYXJ0aCB7CiAgICBwdWIgbW9kIFNlYSB7CiAgICAgICAgcHViIChpbiBjcmF0ZTo6RWFydGgpIHN0cnVjdCBTaGFyazsgLy8gb2shCiAgICB9Cn0KCmZuIG1haW4oKSB7fQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////A94E3gQAAQDeBAC5oAEmzgYAAJANAAAAkQ0AAL0CDgYAAI8NAgUBBFNvbWUBAQCfDgABkA0AAL0CDgYAAo8NAAEAqAIkBgAAjg0BAQCfDgACAKkCEs0GAJ8OBQEFRTA3NDIAAR8FBQABAAUAqAIkBgAAjg0BAQGkDgABjw0AAOigASbQBgAAlQ0AAAIA6KABJtAGAJ8OBQGNBFRoZSBDLXZhcmlhZGljIHR5cGUgYC4uLmAgaGFzIGJlZW4gbmVzdGVkIGluc2lkZSBhbm90aGVyIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzQzCiMhW2ZlYXR1cmUoY192YXJpYWRpYyldCgpmbiBmb28yKHg6IHU4LCB5OiAmLi4uKSB7fSAvLyBlcnJvciEKYGBgCgpPbmx5IGZvcmVpZ24gZnVuY3Rpb25zIGNhbiB1c2UgdGhlIEMtdmFyaWFkaWMgdHlwZSAoYC4uLmApLiBJbiBzdWNoIGZ1bmN0aW9ucywKYC4uLmAgbWF5IG9ubHkgb2NjdXIgbm9uLW5lc3RlZC4gVGhhdCBpcywgYHk6ICYnYSAuLi5gIGlzIG5vdCBhbGxvd2VkLgoKQSBDLXZhcmlhZGljIHR5cGUgaXMgdXNlZCB0byBnaXZlIGFuIHVuZGVmaW5lZCBudW1iZXIgb2YgcGFyYW1ldGVycyB0byBhIGdpdmVuCmZ1bmN0aW9uIChsaWtlIGBwcmludGZgIGluIEMpLiBUaGUgZXF1aXZhbGVudCBpbiBSdXN0IHdvdWxkIGJlIHRvIHVzZSBtYWNyb3MKZGlyZWN0bHkgKGxpa2UgYHByaW50bG4hYCBmb3IgZXhhbXBsZSkuCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/P40EjQQAAQCNBADooAEm0AYAAJQNAAAAlQ0AAL0CDgYAAJMNAgUBBFNvbWUBAQCfDgABlA0AAL0CDgYAApMNAAEAqAIkBgAAkg0BAQCfDgACAKkCEs8GAJ8OBQEFRTA3NDMAAR8FBQABAAUAqAIkBgAAkg0BAQGkDgABkw0AAJehASbSBgAAmQ0AAAIAl6EBJtIGAJ8OBQGbBUEgY29udHJvbC1mbG93IGV4cHJlc3Npb24gd2FzIHVzZWQgaW5zaWRlIGEgY29uc3QgY29udGV4dC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NDQKY29uc3QgXzogaTMyID0gewogICAgbGV0IG11dCB4ID0gMDsKCiAgICBmb3IgaSBpbiAwLi40IHsgLy8gZXJyb3IhCiAgICAgICAgeCArPSBpOwogICAgfQp9OwpgYGAKCkF0IHRoZSBtb21lbnQsIGBpZmAgYW5kIGBtYXRjaGAsIGFzIHdlbGwgYXMgdGhlIGxvb3BpbmcgY29uc3RydWN0cyBgZm9yYCwKYHdoaWxlYCwgYW5kIGBsb29wYCwgYXJlIGZvcmJpZGRlbiBpbnNpZGUgYSBgY29uc3RgLCBgc3RhdGljYCwgb3IgYGNvbnN0IGZuYC4KClRoaXMgd2lsbCBiZSBhbGxvd2VkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QKeWV0IGNvbXBsZXRlLiBTZWUgdGhlIHRyYWNraW5nIGlzc3VlIGZvciBbY29uZGl0aW9uYWxzXSBvciBbbG9vcHNdIGluIGEgY29uc3QKY29udGV4dCBmb3IgdGhlIGN1cnJlbnQgc3RhdHVzLgoKW2NvbmRpdGlvbmFsc106IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvNDkxNDYKW2xvb3BzXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy81MjAwMAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8/mwWbBQABAJsFAJehASbSBgAAmA0AAACZDQAAvQIOBgAAlw0CBQEEU29tZQEBAJ8OAAGYDQAAvQIOBgAClw0AAQCoAiQGAACWDQEBAJ8OAAIAqQIS0QYAnw4FAQVFMDc0NAABHwUFAAEABQCoAiQGAACWDQEBAaQOAAGXDQAAxqEBJtQGAACdDQAAAgDGoQEm1AYAnw4FAeoDVGhlIGFkZHJlc3Mgb2YgdGVtcG9yYXJ5IHZhbHVlIHdhcyB0YWtlbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NDUKIyAjIVtmZWF0dXJlKHJhd19yZWZfb3ApXQpmbiB0ZW1wX2FkZHJlc3MoKSB7CiAgICBsZXQgcHRyID0gJnJhdyBjb25zdCAyOyAvLyBlcnJvciEKfQpgYGAKCkluIHRoaXMgZXhhbXBsZSwgYDJgIGlzIGRlc3Ryb3llZCByaWdodCBhZnRlciB0aGUgYXNzaWdubWVudCwgd2hpY2ggbWVhbnMgdGhhdApgcHRyYCBub3cgcG9pbnRzIHRvIGFuIHVuYXZhaWxhYmxlIGxvY2F0aW9uLgoKVG8gYXZvaWQgdGhpcyBlcnJvciwgZmlyc3QgYmluZCB0aGUgdGVtcG9yYXJ5IHRvIGEgbmFtZWQgbG9jYWwgdmFyaWFibGU6CgpgYGAKIyAjIVtmZWF0dXJlKHJhd19yZWZfb3ApXQpmbiB0ZW1wX2FkZHJlc3MoKSB7CiAgICBsZXQgdmFsID0gMjsKICAgIGxldCBwdHIgPSAmcmF3IGNvbnN0IHZhbDsgLy8gb2shCn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////f+oD6gMAAQDqAwDGoQEm1AYAAJwNAAAAnQ0AAL0CDgYAAJsNAgUBBFNvbWUBAQCfDgABnA0AAL0CDgYAApsNAAEAqAIkBgAAmg0BAQCfDgACAKkCEtMGAJ8OBQEFRTA3NDUAAR8FBQABAAUAqAIkBgAAmg0BAQGkDgABmw0AAPWhASbWBgAAoQ0AAAIA9aEBJtYGAJ8OBQGIGUFuIHVuYm94ZWQgdHJhaXQgb2JqZWN0IHdhcyB1c2VkIGFzIGEgcmV0dXJuIHZhbHVlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0Ngp0cmFpdCBUIHsKICAgIGZuIGJhcigmc2VsZik7Cn0Kc3RydWN0IFModXNpemUpOwppbXBsIFQgZm9yIFMgewogICAgZm4gYmFyKCZzZWxmKSB7fQp9CgovLyBIYXZpbmcgdGhlIHRyYWl0IGBUYCBhcyByZXR1cm4gdHlwZSBpcyBpbnZhbGlkIGJlY2F1c2UKLy8gdW5ib3hlZCB0cmFpdCBvYmplY3RzIGRvIG5vdCBoYXZlIGEgc3RhdGljYWxseSBrbm93biBzaXplOgpmbiBmb28oKSAtPiBkeW4gVCB7IC8vIGVycm9yIQogICAgUyg0MikKfQpgYGAKClJldHVybiB0eXBlcyBjYW5ub3QgYmUgYGR5biBUcmFpdGBzIGFzIHRoZXkgbXVzdCBiZSBgU2l6ZWRgLgoKVG8gYXZvaWQgdGhlIGVycm9yIHRoZXJlIGFyZSBhIGNvdXBsZSBvZiBvcHRpb25zLgoKSWYgdGhlcmUgaXMgYSBzaW5nbGUgdHlwZSBpbnZvbHZlZCwgeW91IGNhbiB1c2UgW2BpbXBsIFRyYWl0YF06CgpgYGAKIyB0cmFpdCBUIHsKIyAgICAgZm4gYmFyKCZzZWxmKTsKIyB9CiMgc3RydWN0IFModXNpemUpOwojIGltcGwgVCBmb3IgUyB7CiMgICAgIGZuIGJhcigmc2VsZikge30KIyB9Ci8vIFRoZSBjb21waWxlciB3aWxsIHNlbGVjdCBgUyh1c2l6ZSlgIGFzIHRoZSBtYXRlcmlhbGl6ZWQgcmV0dXJuIHR5cGUgb2YgdGhpcwovLyBmdW5jdGlvbiwgYnV0IGNhbGxlcnMgd2lsbCBvbmx5IGtub3cgdGhhdCB0aGUgcmV0dXJuIHR5cGUgaW1wbGVtZW50cyBgVGAuCmZuIGZvbygpIC0+IGltcGwgVCB7IC8vIG9rIQogICAgUyg0MikKfQpgYGAKCklmIHRoZXJlIGFyZSBtdWx0aXBsZSB0eXBlcyBpbnZvbHZlZCwgdGhlIG9ubHkgd2F5IHlvdSBjYXJlIHRvIGludGVyYWN0IHdpdGgKdGhlbSBpcyB0aHJvdWdoIHRoZSB0cmFpdCdzIGludGVyZmFjZSwgYW5kIGhhdmluZyB0byByZWx5IG9uIGR5bmFtaWMgZGlzcGF0Y2gKaXMgYWNjZXB0YWJsZSwgdGhlbiB5b3UgY2FuIHVzZSBbdHJhaXQgb2JqZWN0c10gd2l0aCBgQm94YCwgb3Igb3RoZXIgY29udGFpbmVyCnR5cGVzIGxpa2UgYFJjYCBvciBgQXJjYDoKCmBgYAojIHRyYWl0IFQgewojICAgICBmbiBiYXIoJnNlbGYpOwojIH0KIyBzdHJ1Y3QgUyh1c2l6ZSk7CiMgaW1wbCBUIGZvciBTIHsKIyAgICAgZm4gYmFyKCZzZWxmKSB7fQojIH0Kc3RydWN0IE8oJidzdGF0aWMgc3RyKTsKaW1wbCBUIGZvciBPIHsKICAgIGZuIGJhcigmc2VsZikge30KfQoKLy8gVGhpcyBub3cgcmV0dXJucyBhICJ0cmFpdCBvYmplY3QiIGFuZCBjYWxsZXJzIGFyZSBvbmx5IGJlIGFibGUgdG8gYWNjZXNzCi8vIGFzc29jaWF0ZWQgaXRlbXMgZnJvbSBgVGAuCmZuIGZvbyh4OiBib29sKSAtPiBCb3g8ZHluIFQ+IHsgLy8gb2shCiAgICBpZiB4IHsKICAgICAgICBCb3g6Om5ldyhTKDQyKSkKICAgIH0gZWxzZSB7CiAgICAgICAgQm94OjpuZXcoTygidmFsIikpCiAgICB9Cn0KYGBgCgpGaW5hbGx5LCBpZiB5b3Ugd2lzaCB0byBzdGlsbCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgb3JpZ2luYWwgdHlwZSwgeW91IGNhbgpjcmVhdGUgYSBuZXcgYGVudW1gIHdpdGggYSB2YXJpYW50IGZvciBlYWNoIHR5cGU6CgpgYGAKIyB0cmFpdCBUIHsKIyAgICAgZm4gYmFyKCZzZWxmKTsKIyB9CiMgc3RydWN0IFModXNpemUpOwojIGltcGwgVCBmb3IgUyB7CiMgICAgIGZuIGJhcigmc2VsZikge30KIyB9CiMgc3RydWN0IE8oJidzdGF0aWMgc3RyKTsKIyBpbXBsIFQgZm9yIE8gewojICAgICBmbiBiYXIoJnNlbGYpIHt9CiMgfQplbnVtIEUgewogICAgUyhTKSwKICAgIE8oTyksCn0KCi8vIFRoZSBjYWxsZXIgY2FuIGFjY2VzcyB0aGUgb3JpZ2luYWwgdHlwZXMgZGlyZWN0bHksIGJ1dCBpdCBuZWVkcyB0byBtYXRjaCBvbgovLyB0aGUgcmV0dXJuZWQgYGVudW0gRWAuCmZuIGZvbyh4OiBib29sKSAtPiBFIHsKICAgIGlmIHggewogICAgICAgIEU6OlMoUyg0MikpCiAgICB9IGVsc2UgewogICAgICAgIEU6Ok8oTygidmFsIikpCiAgICB9Cn0KYGBgCgpZb3UgY2FuIGV2ZW4gaW1wbGVtZW50IHRoZSBgdHJhaXRgIG9uIHRoZSByZXR1cm5lZCBgZW51bWAgc28gdGhlIGNhbGxlcnMKKmRvbid0KiBoYXZlIHRvIG1hdGNoIG9uIHRoZSByZXR1cm5lZCB2YWx1ZSB0byBpbnZva2UgdGhlIGFzc29jaWF0ZWQgaXRlbXM6CgpgYGAKIyB0cmFpdCBUIHsKIyAgICAgZm4gYmFyKCZzZWxmKTsKIyB9CiMgc3RydWN0IFModXNpemUpOwojIGltcGwgVCBmb3IgUyB7CiMgICAgIGZuIGJhcigmc2VsZikge30KIyB9CiMgc3RydWN0IE8oJidzdGF0aWMgc3RyKTsKIyBpbXBsIFQgZm9yIE8gewojICAgICBmbiBiYXIoJnNlbGYpIHt9CiMgfQojIGVudW0gRSB7CiMgICAgIFMoUyksCiMgICAgIE8oTyksCiMgfQppbXBsIFQgZm9yIEUgewogICAgZm4gYmFyKCZzZWxmKSB7CiAgICAgICAgbWF0Y2ggc2VsZiB7CiAgICAgICAgICAgIEU6OlMocykgPT4gcy5iYXIoKSwKICAgICAgICAgICAgRTo6TyhvKSA9PiBvLmJhcigpLAogICAgICAgIH0KICAgIH0KfQpgYGAKCklmIHlvdSBkZWNpZGUgdG8gdXNlIHRyYWl0IG9iamVjdHMsIGJlIGF3YXJlIHRoYXQgdGhlc2UgcmVseSBvbgpbZHluYW1pYyBkaXNwYXRjaF0sIHdoaWNoIGhhcyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIGFzIHRoZSBjb21waWxlciBuZWVkcwp0byBlbWl0IGNvZGUgdGhhdCB3aWxsIGZpZ3VyZSBvdXQgd2hpY2ggbWV0aG9kIHRvIGNhbGwgKmF0IHJ1bnRpbWUqIGluc3RlYWQgb2YKZHVyaW5nIGNvbXBpbGF0aW9uLiBVc2luZyB0cmFpdCBvYmplY3RzIHdlIGFyZSB0cmFkaW5nIGZsZXhpYmlsaXR5IGZvcgpwZXJmb3JtYW5jZS4KCltgaW1wbCBUcmFpdGBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxMC0wMi10cmFpdHMuaHRtbCNyZXR1cm5pbmctdHlwZXMtdGhhdC1pbXBsZW1lbnQtdHJhaXRzClt0cmFpdCBvYmplY3RzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTctMDItdHJhaXQtb2JqZWN0cy5odG1sI3VzaW5nLXRyYWl0LW9iamVjdHMtdGhhdC1hbGxvdy1mb3ItdmFsdWVzLW9mLWRpZmZlcmVudC10eXBlcwpbZHluYW1pYyBkaXNwYXRjaF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDE3LTAyLXRyYWl0LW9iamVjdHMuaHRtbCN0cmFpdC1vYmplY3RzLXBlcmZvcm0tZHluYW1pYy1kaXNwYXRjaAoAM////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/wGIGYgZAAEAiBkA9aEBJtYGAACgDQAAAKENAAC9Ag4GAACfDQIFAQRTb21lAQEAnw4AAaANAAC9Ag4GAAKfDQABAKgCJAYAAJ4NAQEAnw4AAgCpAhLVBgCfDgUBBUUwNzQ2AAEfBQUAAQAFAKgCJAYAAJ4NAQEBpA4AAZ8NAACkogEm2AYAAKUNAAACAKSiASbYBgCfDgUB2QNHZW5lcmljIGFyZ3VtZW50cyB3ZXJlIG5vdCBwcm92aWRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgY29ycmVzcG9uZGluZwpnZW5lcmljIHBhcmFtZXRlcnMgYXJlIGRlY2xhcmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0NwpzdHJ1Y3QgUzwnYSwgVD4oJidhIFQpOwoKdHlwZSBYID0gUzwoKSwgJ3N0YXRpYz47IC8vIGVycm9yOiB0aGUgdHlwZSBhcmd1bWVudCBpcyBwcm92aWRlZCBiZWZvcmUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsaWZldGltZSBhcmd1bWVudApgYGAKClRoZSBhcmd1bWVudCBvcmRlciBzaG91bGQgYmUgY2hhbmdlZCB0byBtYXRjaCB0aGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uCm9yZGVyLCBhcyBpbiB0aGUgZm9sbG93aW5nOgoKYGBgCnN0cnVjdCBTPCdhLCBUPigmJ2EgVCk7Cgp0eXBlIFggPSBTPCdzdGF0aWMsICgpPjsgLy8gb2sKYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///w/ZA9kDAAEA2QMApKIBJtgGAACkDQAAAKUNAAC9Ag4GAACjDQIFAQRTb21lAQEAnw4AAaQNAAC9Ag4GAAKjDQABAKgCJAYAAKINAQEAnw4AAgCpAhLXBgCfDgUBBUUwNzQ3AAEfBQUAAQAFAKgCJAYAAKINAQEBpA4AAaMNAADTogEm2gYAAKkNAAACANOiASbaBgCfDgUBugNBIHJhdyBzdHJpbmcgaXNuJ3QgY29ycmVjdGx5IHRlcm1pbmF0ZWQgYmVjYXVzZSB0aGUgdHJhaWxpbmcgYCNgIGNvdW50IGRvZXNuJ3QKbWF0Y2ggaXRzIGxlYWRpbmcgYCNgIGNvdW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0OApsZXQgZG9scGhpbnMgPSByIyMiRG9scGhpbnMhIiM7IC8vIGVycm9yIQpgYGAKClRvIHRlcm1pbmF0ZSBhIHJhdyBzdHJpbmcsIHlvdSBoYXZlIHRvIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGAjYCBhdCB0aGUgZW5kCmFzIGF0IHRoZSBiZWdpbm5pbmcuIEV4YW1wbGU6CgpgYGAKbGV0IGRvbHBoaW5zID0gciMiRG9scGhpbnMhIiM7IC8vIE9uZSBgI2AgYXQgdGhlIGJlZ2lubmluZywgb25lIGF0IHRoZSBlbmQgc28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBnb29kIQpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wO6A7oDAAEAugMA06IBJtoGAACoDQAAAKkNAAC9Ag4GAACnDQIFAQRTb21lAQEAnw4AAagNAAC9Ag4GAAKnDQABAKgCJAYAAKYNAQEAnw4AAgCpAhLZBgCfDgUB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dGl2ZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGEgcHJvbWlzZSB0aGF0IHRoZSB0cmFpdCB3aWxsIG5ldmVyIGJlIGltcGxlbWVudGVkCmZvciB0aGUgZ2l2ZW4gdHlwZXMuIFRoZXJlZm9yZSwgYm90aCBjYW5ub3QgZXhpc3RzIGF0IHRoZSBzYW1lIHRpbWUuCgAG////////////Af///////////wH///////////8B////////////Af///////////wH//////w/nAucCAAEA5wIA4KMBJuAGAAC0DQAAALUNAAC9Ag4GAACzDQIFAQRTb21lAQEAnw4AAbQNAAC9Ag4GAAKzDQABAKgCJAYAALINAQEAnw4AAgCpAhLfBgCfDgUBBUUwNzUxAAEfBQUAAQAFAKgCJAYAALINAQEBpA4AAbMNAACPpAEm4gYAALkNAAACAI+kASbiBgCfDgUBpgNUaGUgZW50cnkgcG9pbnQgb2YgdGhlIHByb2dyYW0gd2FzIG1hcmtlZCBhcyBgYXN5bmNgLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc1Mgphc3luYyBmbiBtYWluKCkgLT4gUmVzdWx0PCgpLCAoKT4geyAvLyBlcnJvciEKICAgIE9rKCgpKQp9CmBgYAoKYGZuIG1haW4oKWAgb3IgdGhlIHNwZWNpZmllZCBzdGFydCBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byBiZSBgYXN5bmNgLiBOb3QKaGF2aW5nIGEgY29ycmVjdCBhc3luYyBydW50aW1lIGxpYnJhcnkgc2V0dXAgbWF5IGNhdXNlIHRoaXMgZXJyb3IuIFRvIGZpeCBpdCwKZGVjbGFyZSB0aGUgZW50cnkgcG9pbnQgd2l0aG91dCBgYXN5bmNgOgoKYGBgCmZuIG1haW4oKSAtPiBSZXN1bHQ8KCksICgpPiB7IC8vIG9rIQogICAgT2soKCkpCn0KYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8HpgOmAwABAKYDAI+kASbiBgAAuA0AAAC5DQAAvQIOBgAAtw0CBQEEU29tZQEBAJ8OAAG4DQAAvQIOBgACtw0AAQCoAiQGAAC2DQEBAJ8OAAIAqQIS4QYAnw4FAQVFMDc1MgABHwUFAAEABQCoAiQGAAC2DQEBAaQOAAG3DQAAvqQBJuQGAAC9DQAAAgC+pAEm5AYAnw4FAZgEQW4gaW5uZXIgZG9jIGNvbW1lbnQgd2FzIHVzZWQgaW4gYW4gaW52YWxpZCBjb250ZXh0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc1MwpmbiBmb28oKSB7fQovLyEgZm9vCi8vIF4gZXJyb3IhCmZuIG1haW4oKSB7fQpgYGAKCklubmVyIGRvY3VtZW50IGNhbiBvbmx5IGJlIHVzZWQgYmVmb3JlIGl0ZW1zLiBGb3IgZXhhbXBsZToKCmBgYAovLyEgQSB3b3JraW5nIGNvbW1lbnQgYXBwbGllZCB0byB0aGUgbW9kdWxlIQpmbiBmb28oKSB7CiAgICAvLyEgQW5vdGhlciB3b3JraW5nIGNvbW1lbnQhCn0KZm4gbWFpbigpIHt9CmBgYAoKSW4gY2FzZSB5b3Ugd2FudCB0byBkb2N1bWVudCB0aGUgaXRlbSBmb2xsb3dpbmcgdGhlIGRvYyBjb21tZW50LCB5b3UgbWlnaHQgd2FudAp0byB1c2Ugb3V0ZXIgZG9jIGNvbW1lbnQ6CgpgYGAKLy8vIEkgYW0gYW4gb3V0ZXIgZG9jIGNvbW1lbnQKI1tkb2MgPSAiSSBhbSBhbHNvIGFuIG91dGVyIGRvYyBjb21tZW50ISJdCmZuIGZvbygpIHsKICAgIC8vIC4uLgp9CmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////B5gEmAQAAQCYBAC+pAEm5AYAALwNAAAAvQ0AAL0CDgYAALsNAgUBBFNvbWUBAQCfDgABvA0AAL0CDgYAArsNAAEAqAIkBgAAug0BAQCfDgACAKkCEuMGAJ8OBQEFRTA3NTMAAR8FBQABAAUAqAIkBgAAug0BAQGkDgABuw0AAO2kASbmBgAAwQ0AAAIA7aQBJuYGAJ8OBQG9A0FuIG5vbi1hc2NpaSBpZGVudGlmaWVyIHdhcyB1c2VkIGluIGFuIGludmFsaWQgY29udGV4dC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNzU0CiMgIyFbZmVhdHVyZShub25fYXNjaWlfaWRlbnRzKV0KCm1vZCDFmcWzxZvFpTsgLy8gZXJyb3IhCgojW25vX21hbmdsZV0KZm4gxZnFs8WbxaUoKSB7fSAvLyBlcnJvciEKCmZuIG1haW4oKSB7fQpgYGAKCk5vbi1hc2NpaSBjYW4gYmUgdXNlZCBhcyBtb2R1bGUgbmFtZXMgaWYgaXQgaXMgaW5saW5lZCBvciBpZiBhIGAjW3BhdGhdYAphdHRyaWJ1dGUgaXMgc3BlY2lmaWVkLiBGb3IgZXhhbXBsZToKCmBgYAojICMhW2ZlYXR1cmUobm9uX2FzY2lpX2lkZW50cyldCgptb2QgxZnFs8WbxaUgeyAvLyBvayEKICAgIGNvbnN0IElTX0dSRUFUOiBib29sID0gdHJ1ZTsKfQoKZm4gbWFpbigpIHt9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////H70DvQMAAQC9AwDtpAEm5gYAAMANAAAAwQ0AAL0CDgYAAL8NAgUBBFNvbWUBAQCfDgABwA0AAL0CDgYAAr8NAAEAqAIkBgAAvg0BAQCfDgACAKkCEuUGAJ8OBQEFRTA3NTQAAR8FBQABAAUAqAIkBgAAvg0BAQGkDgABvw0AAJylASboBgAAxQ0AAAIAnKUBJugGAJ8OBQHZAkEgbXVsdGktbGluZSAoZG9jLSljb21tZW50IGlzIHVudGVybWluYXRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTgKLyogSSBhbSBub3QgdGVybWluYXRlZCEKYGBgCgpUaGUgc2FtZSBnb2VzIGZvciBkb2MgY29tbWVudHM6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTgKLyohIEkgYW0gbm90IHRlcm1pbmF0ZWQhCmBgYAoKWW91IG5lZWQgdG8gZW5kIHlvdXIgbXVsdGktbGluZSBjb21tZW50IHdpdGggYCovYCBpbiBvcmRlciB0byBmaXggdGhpcyBlcnJvcjoKCmBgYAovKiBJIGFtIHRlcm1pbmF0ZWQhICovCi8qISBJIGFtIGFsc28gdGVybWluYXRlZCEgKi8KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH///8P2QLZAgABANkCAJylASboBgAAxA0AAADFDQAAvQIOBgAAww0CBQEEU29tZQEBAJ8OAAHEDQAAvQIOBgACww0AAQCoAiQGAADCDQEBAJ8OAAIAqQIS5wYAnw4FAQVFMDc1OAABHwUFAAEABQCoAiQGAADCDQEBAaQOAAHDDQAAy6UBJuoGAADJDQAAAgDLpQEm6gYAnw4FAc8LUmV0dXJuIHR5cGUgaW52b2x2aW5nIGEgdHJhaXQgZGlkIG5vdCByZXF1aXJlIGAnc3RhdGljYCBsaWZldGltZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNzU5CnVzZSBzdGQ6OmZtdDo6RGVidWc7CgpmbiBmb28oeDogJmkzMikgLT4gaW1wbCBEZWJ1ZyB7IC8vIGVycm9yIQogICAgeAp9CgpmbiBiYXIoeDogJmkzMikgLT4gQm94PGR5biBEZWJ1Zz4geyAvLyBlcnJvciEKICAgIEJveDo6bmV3KHgpCn0KYGBgCgpBZGQgYCdzdGF0aWNgIHJlcXVpcmVtZW50IHRvIGZpeCB0aGVtOgoKYGBgY29tcGlsZV9mYWlsLEUwNzU5CiMgdXNlIHN0ZDo6Zm10OjpEZWJ1ZzsKZm4gZm9vKHg6ICZpMzIpIC0+IGltcGwgRGVidWcgKyAnc3RhdGljIHsgLy8gb2shCiAgICB4Cn0KCmZuIGJhcih4OiAmaTMyKSAtPiBCb3g8ZHluIERlYnVnICsgJ3N0YXRpYz4geyAvLyBvayEKICAgIEJveDo6bmV3KHgpCn0KYGBgCgpCb3RoIFtgZHluIFRyYWl0YF0gYW5kIFtgaW1wbCBUcmFpdGBdIGluIHJldHVybiB0eXBlcyBoYXZlIGEgYW4gaW1wbGljaXQKYCdzdGF0aWNgIHJlcXVpcmVtZW50LCBtZWFuaW5nIHRoYXQgdGhlIHZhbHVlIGltcGxlbWVudGluZyB0aGVtIHRoYXQgaXMgYmVpbmcKcmV0dXJuZWQgaGFzIHRvIGJlIGVpdGhlciBhIGAnc3RhdGljYCBib3Jyb3cgb3IgYW4gb3duZWQgdmFsdWUuCgpJbiBvcmRlciB0byBjaGFuZ2UgdGhlIHJlcXVpcmVtZW50IGZyb20gYCdzdGF0aWNgIHRvIGJlIGEgbGlmZXRpbWUgZGVyaXZlZCBmcm9tCml0cyBhcmd1bWVudHMsIHlvdSBjYW4gYWRkIGFuIGV4cGxpY2l0IGJvdW5kLCBlaXRoZXIgdG8gYW4gYW5vbnltb3VzIGxpZmV0aW1lCmAnX2Agb3Igc29tZSBhcHByb3ByaWF0ZSBuYW1lZCBsaWZldGltZS4KCmBgYAojIHVzZSBzdGQ6OmZtdDo6RGVidWc7CmZuIGZvbyh4OiAmaTMyKSAtPiBpbXBsIERlYnVnICsgJ18gewogICAgeAp9CmZuIGJhcih4OiAmaTMyKSAtPiBCb3g8ZHluIERlYnVnICsgJ18+IHsKICAgIEJveDo6bmV3KHgpCn0KYGBgCgpUaGVzZSBhcmUgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIGV4cGxpY2l0IGxpZmV0aW1lIGFubm90YXRpb25zOgoKYGBgCiMgdXNlIHN0ZDo6Zm10OjpEZWJ1ZzsKZm4gZm9vPCdhPih4OiAmJ2EgaTMyKSAtPiBpbXBsIERlYnVnICsgJ2EgewogICAgeAp9CmZuIGJhcjwnYT4oeDogJidhIGkzMikgLT4gQm94PGR5biBEZWJ1ZyArICdhPiB7CiAgICBCb3g6Om5ldyh4KQp9CmBgYAoKW2BkeW4gVHJhaXRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTctMDItdHJhaXQtb2JqZWN0cy5odG1sI3VzaW5nLXRyYWl0LW9iamVjdHMtdGhhdC1hbGxvdy1mb3ItdmFsdWVzLW9mLWRpZmZlcmVudC10eXBlcwpbYGltcGwgVHJhaXRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTAtMDItdHJhaXRzLmh0bWwjcmV0dXJuaW5nLXR5cGVzLXRoYXQtaW1wbGVtZW50LXRyYWl0cwoAGP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8BzwvPCwABAM8LAMulASbqBgAAyA0AAADJDQAAvQIOBgAAxw0CBQEEU29tZQEBAJ8OAAHIDQAAvQIOBgACxw0AAQCoAiQGAADGDQEBAJ8OAAIAqQIS6QYAnw4FAQVFMDc1OQABHwUFAAEABQCoAiQGAADGDQEBAaQOAAHHDQAA+qUBJuwGAADNDQAAAgD6pQEm7AYAnw4FAaAFYGFzeW5jIGZuYC9gaW1wbCB0cmFpdGAgcmV0dXJuIHR5cGUgY2Fubm90IGNvbnRhaW4gYSBwcm9qZWN0aW9uCm9yIGBTZWxmYCB0aGF0IHJlZmVyZW5jZXMgbGlmZXRpbWVzIGZyb20gYSBwYXJlbnQgc2NvcGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzYwLGVkaXRpb24yMDE4CnN0cnVjdCBTPCdhPigmJ2EgaTMyKTsKCmltcGw8J2E+IFM8J2E+IHsKICAgIGFzeW5jIGZuIG5ldyhpOiAmJ2EgaTMyKSAtPiBTZWxmIHsKICAgICAgICBTKCYyMikKICAgIH0KfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yIHdlIG5lZWQgdG8gc3BlbGwgb3V0IGBTZWxmYCB0byBgUzwnYT5gOgoKYGBgZWRpdGlvbjIwMTgKc3RydWN0IFM8J2E+KCYnYSBpMzIpOwoKaW1wbDwnYT4gUzwnYT4gewogICAgYXN5bmMgZm4gbmV3KGk6ICYnYSBpMzIpIC0+IFM8J2E+IHsKICAgICAgICBTKCYyMikKICAgIH0KfQpgYGAKClRoaXMgd2lsbCBiZSBhbGxvd2VkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwKYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgeWV0IGNvbXBsZXRlLgpTZWUgdGhlIFtpc3N1ZS02MTk0OV0gZm9yIHRoaXMgbGltaXRhdGlvbi4KCltpc3N1ZS02MTk0OV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvNjE5NDkKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////w+gBaAFAAEAoAUA+qUBJuwGAADMDQAAAM0NAAC9Ag4GAADLDQIFAQRTb21lAQEAnw4AAcwNAAC9Ag4GAALLDQABAKgCJAYAAMoNAQEAnw4AAgCpAhLrBgCfDgUBBUUwNzYwAAEfBQUAAQAFAKgCJAYAAMoNAQEBpA4AAcsNAACppgEm7gYAANENAAACAKmmASbuBgCfDgUBngRNdWx0aXBsZSBjYW5kaWRhdGUgZmlsZXMgd2VyZSBmb3VuZCBmb3IgYW4gb3V0LW9mLWxpbmUgbW9kdWxlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYHJ1c3QKLy8gZmlsZTogYW1iaWd1b3VzX21vZHVsZS9tb2QucnMKCmZuIGZvbygpIHt9CmBgYAoKYGBgcnVzdAovLyBmaWxlOiBhbWJpZ3VvdXNfbW9kdWxlLnJzCgpmbiBmb28oKSB7fQpgYGAKCmBgYGlnbm9yZSAobXVsdGlwbGUgc291cmNlIGZpbGVzIHJlcXVpcmVkIGZvciBjb21waWxlX2ZhaWwpCm1vZCBhbWJpZ3VvdXNfbW9kdWxlOyAvLyBlcnJvcjogZmlsZSBmb3IgbW9kdWxlIGBhbWJpZ3VvdXNfbW9kdWxlYAogICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYXQgYm90aCBhbWJpZ3VvdXNfbW9kdWxlLnJzIGFuZAogICAgICAgICAgICAgICAgICAgICAgLy8gYW1iaWd1b3VzX21vZHVsZS5ycy9tb2QucnMKCmZuIG1haW4oKSB7fQpgYGAKClBsZWFzZSByZW1vdmUgdGhpcyBhbWJpZ3VpdHkgYnkgZGVsZXRpbmcvcmVuYW1pbmcgb25lIG9mIHRoZSBjYW5kaWRhdGUgZmlsZXMuCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////A54EngQAAQCeBACppgEm7gYAANANAAAA0Q0AAL0CDgYAAM8NAgUBBFNvbWUBAQCfDgAB0A0AAL0CDgYAAs8NAAEAqAIkBgAAzg0BAQCfDgACAKkCEu0GAJ8OBQEFRTA3NjEAAR8FBQABAAUAqAIkBgAAzg0BAQGkDgABzw0AANimASbwBgAA1Q0AAAIA2KYBJvAGAJ8OBQHXAUEgY2hhcmFjdGVyIGxpdGVyYWwgd2Fzbid0IGVuZGVkIHdpdGggYSBxdW90ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NjIKc3RhdGljIEM6IGNoYXIgPSAn4pePOyAvLyBlcnJvciEKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgYWRkIHRoZSBtaXNzaW5nIHF1b3RlOgoKYGBgCnN0YXRpYyBDOiBjaGFyID0gJ+KXjyc7IC8vIG9rIQpgYGAKAAT///////////8B////////////Af///////////wH///8D1wHXAQABANcBANimASbwBgAA1A0AAADVDQAAvQIOBgAA0w0CBQEEU29tZQEBAJ8OAAHUDQAAvQIOBgAC0w0AAQCoAiQGAADSDQEBAJ8OAAIAqQIS7wYAnw4FAQVFMDc2MgABHwUFAAEABQCoAiQGAADSDQEBAaQOAAHTDQAAh6cBJvIGAADZDQAAAgCHpwEm8gYAnw4FAbwBQSBieXRlIGNvbnN0YW50IHdhc24ndCBjb3JyZWN0bHkgZW5kZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzYzCmxldCBjID0gYidhOyAvLyBlcnJvciEKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgYWRkIHRoZSBtaXNzaW5nIHF1b3RlOgoKYGBgCmxldCBjID0gYidhJzsgLy8gb2shCmBgYAoAA////////////wH///////////8B//////////8PvAG8AQABALwBAIenASbyBgAA2A0AAADZDQAAvQIOBgAA1w0CBQEEU29tZQEBAJ8OAAHYDQAAvQIOBgAC1w0AAQCoAiQGAADWDQEBAJ8OAAIAqQIS8QYAnw4FAQVFMDc2MwABHwUFAAEABQCoAiQGAADWDQEBAaQOAAHXDQAAtqcBJvQGAADdDQAAAgC2pwEm9AYAnw4FAYgJTXV0YWJsZSByZWZlcmVuY2VzIChgJm11dGApIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uc3RhbnQgZnVuY3Rpb25zLCBub3Qgc3RhdGljcwpvciBjb25zdGFudHMuIFRoaXMgbGltaXRhdGlvbiBleGlzdHMgdG8gcHJldmVudCB0aGUgY3JlYXRpb24gb2YgY29uc3RhbnRzIHRoYXQKaGF2ZSBhIG11dGFibGUgcmVmZXJlbmNlIGluIHRoZWlyIGZpbmFsIHZhbHVlLiBJZiB5b3UgaGFkIGEgY29uc3RhbnQgb2YgYCZtdXQKaTMyYCB0eXBlLCB5b3UgY291bGQgbW9kaWZ5IHRoZSB2YWx1ZSB0aHJvdWdoIHRoYXQgcmVmZXJlbmNlLCBtYWtpbmcgdGhlCmNvbnN0YW50IGVzc2VudGlhbGx5IG11dGFibGUuIFdoaWxlIHRoZXJlIGNvdWxkIGJlIGEgbW9yZSBmaW5lLWdyYWluZWQgc2NoZW1lCmluIHRoZSBmdXR1cmUgdGhhdCBhbGxvd3MgbXV0YWJsZSByZWZlcmVuY2VzIGlmIHRoZXkgYXJlIG5vdCAibGVha2VkIiB0byB0aGUKZmluYWwgdmFsdWUsIGEgbW9yZSBjb25zZXJ2YXRpdmUgYXBwcm9hY2ggd2FzIGNob3NlbiBmb3Igbm93LiBgY29uc3QgZm5gIGRvIG5vdApoYXZlIHRoaXMgcHJvYmxlbSwgYXMgdGhlIGJvcnJvdyBjaGVja2VyIHdpbGwgcHJldmVudCB0aGUgYGNvbnN0IGZuYCBmcm9tCnJldHVybmluZyBuZXcgbXV0YWJsZSByZWZlcmVuY2VzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2NAojIVtmZWF0dXJlKGNvbnN0X2ZuKV0KIyFbZmVhdHVyZShjb25zdF9tdXRfcmVmcyldCgpmbiBtYWluKCkgewogICAgY29uc3QgT0hfTk86ICYnc3RhdGljIG11dCB1c2l6ZSA9ICZtdXQgMTsgLy8gZXJyb3IhCn0KYGBgCgpSZW1lbWJlcjogeW91IGNhbm5vdCB1c2UgYSBmdW5jdGlvbiBjYWxsIGluc2lkZSBhIGNvbnN0YW50IG9yIHN0YXRpYy4gSG93ZXZlciwKeW91IGNhbiB0b3RhbGx5IHVzZSBpdCBpbiBjb25zdGFudCBmdW5jdGlvbnM6CgpgYGAKIyFbZmVhdHVyZShjb25zdF9mbildCiMhW2ZlYXR1cmUoY29uc3RfbXV0X3JlZnMpXQoKY29uc3QgZm4gZm9vKHg6IHVzaXplKSAtPiB1c2l6ZSB7CiAgICBsZXQgbXV0IHkgPSAxOwogICAgbGV0IHogPSAmbXV0IHk7CiAgICAqeiArPSB4OwogICAgeQp9CgpmbiBtYWluKCkgewogICAgY29uc3QgRk9POiB1c2l6ZSA9IGZvbygxMCk7IC8vIG9rIQp9CmBgYAoAE////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8BiAmICQABAIgJALanASb0BgAA3A0AAADdDQAAvQIOBgAA2w0CBQEEU29tZQEBAJ8OAAHcDQAAvQIOBgAC2w0AAQCoAiQGAADaDQEBAJ8OAAIAqQIS8wYAnw4FAQVFMDc2NAABHwUFAAEABQCoAiQGAADaDQEBAaQOAAHbDQAA5acBJvYGAADhDQAAAgDlpwEm9gYAnw4FAeABQSBkb3VibGUgcXVvdGUgc3RyaW5nIChgImApIHdhcyBub3QgdGVybWluYXRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NjUKbGV0IHMgPSAiOyAvLyBlcnJvciEKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwg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ICBBKGkzMiksCn0KbGV0IGUgPSBFOjpBKDQyKTsKbWF0Y2ggZSB7CiAgICBFOjpBIHsgbnVtYmVyIH0gPT4gcHJpbnRsbiEoInt9IiwgeCksCn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgeW91IGNhbiB1c2UgdGhlIHR1cGxlIHBhdHRlcm46CgpgYGAKIyBlbnVtIEUgewojICAgICBBKGkzMiksCiMgfQojIGxldCBlID0gRTo6QSg0Mik7Cm1hdGNoIGUgewogICAgRTo6QShudW1iZXIpID0+IHByaW50bG4hKCJ7fSIsIG51bWJlciksCn0KYGBgCgpBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFsc28gdXNlIHRoZSBzdHJ1Y3QgcGF0dGVybiBieSB1c2luZyB0aGUgY29ycmVjdApmaWVsZCBuYW1lcyBhbmQgYmluZGluZyB0aGVtIHRvIG5ldyBpZGVudGlmaWVyczoKCmBgYAojIGVudW0gRSB7CiMgICAgIEEoaTMyKSwKIyB9CiMgbGV0IGUgPSBFOjpBKDQyKTsKbWF0Y2ggZSB7CiAgICBFOjpBIHsgMDogbnVtYmVyIH0gPT4gcHJpbnRsbiEoInt9IiwgbnVtYmVyKSwKfQpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/weKBYoFAAEAigUAoakBJv4GAADwDQAAAPENAAC9Ag4GAADvDQIFAQRTb21lAQEAnw4AAfANAAC9Ag4GAALvDQABAKgCJAYAAO4NAQEAnw4AAgCpAhL9BgCfDgUBBUUwNzY5AAEfBQUAAQAFAKgCJAYAAO4NAQEBpA4AAe8NAADQqQEmgAcAAPUNAAACANCpASaABwCfDgUBvQJUaGUgdHlwZSBvZiBhIGNvbnN0IHBhcmFtZXRlciByZWZlcmVuY2VzIG90aGVyIGdlbmVyaWMgcGFyYW1ldGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzAKIyFbZmVhdHVyZShjb25zdF9nZW5lcmljcyldCmZuIGZvbzxULCBjb25zdCBOOiBUPigpIHt9IC8vIGVycm9yIQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCB1c2UgYSBjb25jcmV0ZSB0eXBlIGZvciB0aGUgY29uc3QgcGFyYW1ldGVyOgoKYGBgCiMhW2ZlYXR1cmUoY29uc3RfZ2VuZXJpY3MpXQpmbiBmb288VCwgY29uc3QgTjogdXNpemU+KCkge30KYGBgCgAF////////////Af///////////wH///////////8B////////////Af//////////H70CvQIAAQC9AgDQqQEmgAcAAPQNAAAA9Q0AAL0CDgYAAPMNAgUBBFNvbWUBAQCfDgAB9A0AAL0CDgYAAvMNAAEAqAIkBgAA8g0BAQCfDgACAKkCEv8GAJ8OBQEFRTA3NzAAAR8FBQABAAUAqAIkBgAA8g0BAQGkDgAB8w0AAP+pASaCBwAA+Q0AAAIA/6kBJoIHAJ8OBQGYBEEgbm9uLWAnc3RhdGljYCBsaWZldGltZSB3YXMgdXNlZCBpbiBhIGNvbnN0IGdlbmVyaWMuIFRoaXMgaXMgY3VycmVudGx5IG5vdAphbGxvd2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc3MQojIVtmZWF0dXJlKGNvbnN0X2dlbmVyaWNzKV0KCmZuIGZ1bmN0aW9uX3dpdGhfc3RyPCdhLCBjb25zdCBTVFJJTkc6ICYnYSBzdHI+KCkge30gLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIHRoZSBsaWZldGltZSBpbiB0aGUgY29uc3QgZ2VuZXJpYyBuZWVkIHRvIGJlIGNoYW5nZWQgdG8KYCdzdGF0aWNgOgoKYGBgCiMhW2ZlYXR1cmUoY29uc3RfZ2VuZXJpY3MpXQoKZm4gZnVuY3Rpb25fd2l0aF9zdHI8Y29uc3QgU1RSSU5HOiAmJ3N0YXRpYyBzdHI+KCkge30gLy8gb2shCmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbR2l0SHViIGlzc3VlICM3NDA1Ml0uCgpbR2l0SHViIGlzc3VlICM3NDA1Ml06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvNzQwNTIKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///weYBJgEAAEAmAQA/6kBJoIHAAD4DQAAAPkNAAC9Ag4GAAD3DQIFAQRTb21lAQEAnw4AAfgNAAC9Ag4GAAL3DQABAKgCJAYAAPYNAQEAnw4AAgCpAhKBBwCfDgUBBUUwNzcxAAEfBQUAAQAFAKgCJAYAAPYNAQEBpA4AAfcNAAD0AgQGAAL7DQAAAOACGQYAAPoNAQEAnw4AAgDhAhGDBwCfDgUBBUUwMTgzAAEfBQUAAQAFAOACGQYAAPoNAQEBpA4AAfsNAAD0AgQGAAL9DQAAAOACGQYAAPwNAQEAnw4AAgDhAhGEBwCfDgUBBUUwMjA4AAEfBQUAAQAFAOACGQYAAPwNAQEBpA4AAf0NAAD0AgQGAAL/DQAAAOACGQYAAP4NAQEAnw4AAgDhAhGFBwCfDgUBBUUwMjEyAAEfBQUAAQAFAOACGQYAAP4NAQEBpA4AAf8NAAD0AgQGAAKBDgAAAOACGQYAAIAOAQEAnw4AAgDhAhGGBwCfDgUBBUUwMjI3AAEfBQUAAQAFAOACGQYAAIAOAQEBpA4AAYEOAAD0AgQGAAKDDgAAAOACGQYAAIIOAQEAnw4AAgDhAhGHBwCfDgUBBUUwMjc5AAEfBQUAAQAFAOACGQYAAIIOAQEBpA4AAYMOAAD0AgQGAAKFDgAAAOACGQYAAIQOAQEAnw4AAgDhAhGIBwCfDgUBBUUwMjgwAAEfBQUAAQAFAOACGQYAAIQOAQEBpA4AAYUOAAD0AgQGAAKHDgAAAOACGQYAAIYOAQEAnw4AAgDhAhGJBwCfDgUBBUUwMzExAAEfBQUAAQAFAOACGQYAAIYOAQEBpA4AAYcOAAD0AgQGAAKJDgAAAOACGQYAAIgOAQEAnw4AAgDhAhGKBwCfDgUBBUUwMzEzAAEfBQUAAQAFAOACGQYAAIgOAQEBpA4AAYkOAAD0AgQGAAKLDgAAAOACGQYAAIoOAQEAnw4AAgDhAhGLBwCfDgUBBUUwMzE0AAEfBQUAAQAFAOACGQYAAIoOAQEBpA4AAYsOAAD0AgQGAAKNDgAAAOACGQYAAIwOAQEAnw4AAgDhAhGMBwCfDgUBBUUwMzE1AAEfBQUAAQAFAOACGQYAAIwOAQEBpA4AAY0OAAD0AgQGAAKPDgAAAOACGQYAAI4OAQEAnw4AAgDhAhGNBwCfDgUBBUUwMzE2AAEfBQUAAQAFAOACGQYAAI4OAQEBpA4AAY8OAAD0AgQGAAKRDgAAAOACGQYAAJAOAQEAnw4AAgDhAhGOBwCfDgUBBUUwMzIwAAEfBQUAAQAFAOACGQYAAJAOAQEBpA4AAZEOAAD0AgQGAAKTDgAAAOACGQYAAJIOAQEAnw4AAgDhAhGPBwCfDgUBBUUwMzc3AAEfBQUAAQAFAOACGQYAAJIOAQEBpA4AAZMOAAD0AgQGAAKVDgAAAOACGQYAAJQOAQEAnw4AAgDhAhGQBwCfDgUBBUUwNDU3AAEfBQUAAQAFAOACGQYAAJQOAQEBpA4AAZUOAAD0AgQGAAKXDgAAAOACGQYAAJYOAQEAnw4AAgDhAhGRBwCfDgUBBUUwNDYwAAEfBQUAAQAFAOACGQYAAJYOAQEBpA4AAZcOAAD0AgQGAAKZDgAAAOACGQYAAJgOAQEAnw4AAgDhAhGSBwCfDgUBBUUwNDYxAAEfBQUAAQAFAOACGQYAAJgOAQEBpA4AAZkOAAD0AgQGAAKbDgAAAOACGQYAAJoOAQEAnw4AAgDhAhGTBwCfDgUBBUUwNDYyAAEfBQUAAQAFAOACGQYAAJoOAQEBpA4AAZsOAAD0AgQGAAKdDgAAAOACGQYAAJwOAQEAnw4AAgDhAhGUBwCfDgUBBUUwNDY0AAEfBQUAAQAFAOACGQYAAJwOAQEBpA4AAZ0OAAD0AgQGAAKfDgAAAOACGQYAAJ4OAQEAnw4AAgDhAhGVBwCfDgUBBUUwNDY1AAEfBQUAAQAFAOACGQYAAJ4OAQEBpA4AAZ8OAAD0AgQGAAKhDgAAAOACGQYAAKAOAQEAnw4AAgDhAhGWBwCfDgUBBUUwNDcyAAEfBQUAAQAFAOACGQYAAKAOAQEBpA4AAaEOAAD0AgQGAAKjDgAAAOACGQYAAKIOAQEAnw4AAgDhAhGXBwCfDgUBBUUwNDczAAEfBQUAAQAFAOACGQYAAKIOAQEBpA4AAaMOAAD0AgQGAAKlDgAAAOACGQYAAKQOAQEAnw4AAgDhAhGYBwCfDgUBBUUwNDc0AAEfBQUAAQAFAOACGQYAAKQOAQEBpA4AAaUOAAD0AgQGAAKnDgAAAOACGQYAAKYOAQEAnw4AAgDhAhGZBwCfDgUBBUUwNDc1AAEfBQUAAQAFAOACGQYAAKYOAQEBpA4AAacOAAD0AgQGAAKpDgAAAOACGQYAAKgOAQEAnw4AAgDhAhGaBwCfDgUBBUUwNDc2AAEfBQUAAQAFAOACGQYAAKgOAQEBpA4AAakOAAD0AgQGAAKrDgAAAOACGQYAAKoOAQEAnw4AAgDhAhGbBwCfDgUBBUUwNDc5AAEfBQUAAQAFAOACGQYAAKoOAQEBpA4AAasOAAD0AgQGAAKtDgAAAOACGQYAAKwOAQEAnw4AAgDhAhGcBwCfDgUBBUUwNDgwAAEfBQUAAQAFAOACGQYAAKwOAQEBpA4AAa0OAAD0AgQGAAKvDgAAAOACGQYAAK4OAQEAnw4AAgDhAhGdBwCfDgUBBUUwNDgxAAEfBQUAAQAFAOACGQYAAK4OAQEBpA4AAa8OAAD0AgQGAAKxDgAAAOACGQYAALAOAQEAnw4AAgDhAhGeBwCfDgUBBUUwNDgyAAEfBQUAAQAFAOACGQYAALAOAQEBpA4AAbEOAAD0AgQGAAKzDgAAAOACGQYAALIOAQEAnw4AAgDhAhGfBwCfDgUBBUUwNDgzAAEfBQUAAQAFAOACGQYAALIOAQEBpA4AAbMOAAD0AgQGAAK1DgAAAOACGQYAALQOAQEAnw4AAgDhAhGgBwCfDgUBBUUwNDg0AAEfBQUAAQAFAOACGQYAALQOAQEBpA4AAbUOAAD0AgQGAAK3DgAAAOACGQYAALYOAQEAnw4AAgDhAhGhBwCfDgUBBUUwNDg1AAEfBQUAAQAFAOACGQYAALYOAQEBpA4AAbcOAAD0AgQGAAK5DgAAAOACGQYAALgOAQEAnw4AAgDhAhGiBwCfDgUBBUUwNDg2AAEfBQUAAQAFAOACGQYAALgOAQEBpA4AAbkOAAD0AgQGAAK7DgAAAOACGQYAALoOAQEAnw4AAgDhAhGjBwCfDgUBBUUwNDg3AAEfBQUAAQAFAOACGQYAALoOAQEBpA4AAbsOAAD0AgQGAAK9DgAAAOACGQYAALwOAQEAnw4AAgDhAhGkBwCfDgUBBUUwNDg4AAEfBQUAAQAFAOACGQYAALwOAQEBpA4AAb0OAAD0AgQGAAK/DgAAAOACGQYAAL4OAQEAnw4AAgDhAhGlBwCfDgUBBUUwNDg5AAEfBQUAAQAFAOACGQYAAL4OAQEBpA4AAb8OAAD0AgQGAALBDgAAAOACGQYAAMAOAQEAnw4AAgDhAhGmBwCfDgUBBUUwNDkwAAEfBQUAAQAFAOACGQYAAMAOAQEBpA4AAcEOAAD0AgQGAALDDgAAAOACGQYAAMIOAQEAnw4AAgDhAhGnBwCfDgUBBUUwNDk4AAEfBQUAAQAFAOACGQYAAMIOAQEBpA4AAcMOAAD0AgQGAALFDgAAAOACGQYAAMQOAQEAnw4AAgDhAhGoBwCfDgUBBUUwNTE0AAEfBQUAAQAFAOACGQYAAMQOAQEBpA4AAcUOAAD0AgQGAALHDgAAAOACGQYAAMYOAQEAnw4AAgDhAhGpBwCfDgUBBUUwNTE5AAEfBQUAAQAFAOACGQYAAMYOAQEBpA4AAccOAAD0AgQGAALJDgAAAOACGQYAAMgOAQEAnw4AAgDhAhGqBwCfDgUBBUUwNTIxAAEfBQUAAQAFAOACGQYAAMgOAQEBpA4AAckOAAD0AgQGAALLDgAAAOACGQYAAMoOAQEAnw4AAgDhAhGrBwCfDgUBBUUwNTIzAAEfBQUAAQAFAOACGQYAAMoOAQEBpA4AAcsOAAD0AgQGAALNDgAAAOACGQYAAMwOAQEAnw4AAgDhAhGsBwCfDgUBBUUwNTQyAAEfBQUAAQAFAOACGQYAAMwOAQEBpA4AAc0OAAD0AgQGAALPDgAAAOACGQYAAM4OAQEAnw4AAgDhAhGtBwCfDgUBBUUwNTQzAAEfBQUAAQAFAOACGQYAAM4OAQEBpA4AAc8OAAD0AgQGAALRDgAAAOACGQYAANAOAQEAnw4AAgDhAhGuBwCfDgUBBUUwNTQ0AAEfBQUAAQAFAOACGQYAANAOAQEBpA4AAdEOAAD0AgQGAALTDgAAAOACGQYAANIOAQEAnw4AAgDhAhGvBwCfDgUBBUUwNTQ1AAEfBQUAAQAFAOACGQYAANIOAQEBpA4AAdMOAAD0AgQGAALVDgAAAOACGQYAANQOAQEAnw4AAgDhAhGwBwCfDgUBBUUwNTQ2AAEfBQUAAQAFAOACGQYAANQOAQEBpA4AAdUOAAD0AgQGAALXDgAAAOACGQYAANYOAQEAnw4AAgDhAhGxBwCfDgUBBUUwNTQ3AAEfBQUAAQAFAOACGQYAANYOAQEBpA4AAdcOAAD0AgQGAALZDgAAAOACGQYAANgOAQEAnw4AAgDhAhGyBwCfDgUBBUUwNTQ5AAEfBQUAAQAFAOACGQYAANgOAQEBpA4AAdkOAAD0AgQGAALbDgAAAOACGQYAANoOAQEAnw4AAgDhAhGzBwCfDgUBBUUwNTUzAAEfBQUAAQAFAOACGQYAANoOAQEBpA4AAdsOAAD0AgQGAALdDgAAAOACGQYAANwOAQEAnw4AAgDhAhG0BwCfDgUBBUUwNjI1AAEfBQUAAQAFAOACGQYAANwOAQEBpA4AAd0OAAD0AgQGAALfDgAAAOACGQYAAN4OAQEAnw4AAgDhAhG1BwCfDgUBBUUwNjI5AAEfBQUAAQAFAOACGQYAAN4OAQEBpA4AAd8OAAD0AgQGAALhDgAAAOACGQYAAOAOAQEAnw4AAgDhAhG2BwCfDgUBBUUwNjMwAAEfBQUAAQAFAOACGQYAAOAOAQEBpA4AAeEOAAD0AgQGAALjDgAAAOACGQYAAOIOAQEAnw4AAgDhAhG3BwCfDgUBBUUwNjMyAAEfBQUAAQAFAOACGQYAAOIOAQEBpA4AAeMOAAD0AgQGAALlDgAAAOACGQYAAOQOAQEAnw4AAgDhAhG4BwCfDgUBBUUwNjQwAAEfBQUAAQAFAOACGQYAAOQOAQEBpA4AAeUOAAD0AgQGAALnDgAAAOACGQYAAOYOAQEAnw4AAgDhAhG5BwCfDgUBBUUwNjY3AAEfBQUAAQAFAOACGQYAAOYOAQEBpA4AAecOAAD0AgQGAALpDgAAAOACGQYAAOgOAQEAnw4AAgDhAhG6BwCfDgUBBUUwNzExAAEfBQUAAQAFAOACGQYAAOgOAQEBpA4AAekOAAD0AgQGAALrDgAAAOACGQYAAOoOAQEAnw4AAgDhAhG7BwCfDgUBBUUwNzE3AAEfBQUAAQAFAOACGQYAAOoOAQEBpA4AAesOAAD0AgQGAALtDgAAAOACGQYAAOwOAQEAnw4AAgDhAhG8BwCfDgUBBUUwNzIyAAEfBQUAAQAFAOACGQYAAOwOAQEBpA4AAe0OAAD0AgQGAALvDgAAAOACGQYAAO4OAQEAnw4AAgDhAhG9BwCfDgUBBUUwNzI2AAEfBQUAAQAFAOACGQYAAO4OAQEBpA4AAe8OAAD0AgQGAALxDgAAAOACGQYAAPAOAQEAnw4AAgDhAhG+BwCfDgUBBUUwNzU1AAEfBQUAAQAFAOACGQYAAPAOAQEBpA4AAfEOAAD0AgQGAALzDgAAAOACGQYAAPIOAQEAnw4AAgDhAhG/BwCfDgUBBUUwNzU2AAEfBQUAAQAFAOACGQYAAPIOAQEBpA4AAfMOAAD0AgQGAAL1DgAAAOACGQYAAPQOAQEAnw4AAgDhAhHABwCfDgUBBUUwNzU3AAEfBQUAAQAFAOACGQYAAPQOAQEBpA4AAfUOAAD0AgQGAAL3DgAAAOACGQYAAPYOAQEAnw4AAgDhAhHBBwCfDgUBBUUwNzcyAAEfBQUAAQAFAOACGQYAAPYOAQEBpA4AAfcOAACXAnAGAAABAAwAnA79AwECAAEGAAEKAAEOAAESAAEWAAEaAAEeAAEiAAEmAAEqAAEuAAEyAAE2AAE6AAE+AAFCAAFGAAFKAAFOAAFSAAFWAAFaAAFeAAFiAAFmAAFqAAFuAAFyAAF2AAF6AAF+AAGCAQABhgEAAYoBAAGOAQABkgEAAZYBAAGaAQABngEAAaIBAAGmAQABqgEAAa4BAAGyAQABtgEAAboBAAG+AQABwgEAAcYBAAHKAQABzgEAAdIBAAHWAQAB2gEAAd4BAAHiAQAB5gEAAeoBAAHuAQAB8gEAAfYBAAH6AQAB/gEAAYICAAGGAgABigIAAY4CAAGSAgABlgIAAZoCAAGeAgABogIAAaYCAAGqAgABrgIAAbICAAG2AgABugIAAb4CAAHCAgABxgIAAcoCAAHOAgAB0gIAAdYCAAHaAgAB3gIAAeICAAHmAgAB6gIAAe4CAAHyAgAB9gIAAfoCAAH+AgABggMAAYYDAAGKAwABjgMAAZIDAAGWAwABmgMAAZ4DAAGiAwABpgMAAaoDAAGuAwABsgMAAbYDAAG6AwABvgMAAcIDAAHGAwABygMAAc4DAAHSAwAB1gMAAdoDAAHeAwAB4gMAAeYDAAHqAwAB7gMAAfIDAAH2AwAB+gMAAf4DAAGCBAABhgQAAYoEAAGOBAABkgQAAZYEAAGaBAABngQAAaIEAAGmBAABqgQAAa4EAAGyBAABtgQAAboEAAG+BAABwgQAAcYEAAHKBAABzgQAAdIEAAHWBAAB2gQAAd4EAAHiBAAB5gQAAeoEAAHuBAAB8gQAAfYEAAH6BAAB/gQAAYIFAAGGBQABigUAAY4FAAGSBQABlgUAAZoFAAGeBQABogUAAaYFAAGqBQABrgUAAbIFAAG2BQABugUAAb4FAAHCBQABxgUAAcoFAAHOBQAB0gUAAdYFAAHaBQAB3gUAAeIFAAHmBQAB6gUAAe4FAAHyBQAB9gUAAfoFAAH+BQABggYAAYYGAAGKBgABjgYAAZIGAAGWBgABmgYAAZ4GAAGiBgABpgYAAaoGAAGuBgABsgYAAbYGAAG6BgABvgYAAcIGAAHGBgABygYAAc4GAAHSBgAB1gYAAdoGAAHeBgAB4gYAAeYGAAHqBgAB7gYAAfIGAAH2BgAB+gYAAf4GAAGCBwABhgcAAYoHAAGOBwABkgcAAZYHAAGaBwABngcAAaIHAAGmBwABqgcAAa4HAAGyBwABtgcAAboHAAG+BwABwgcAAcYHAAHKBwABzgcAAdIHAAHWBwAB2gcAAd4HAAHiBwAB5gcAAeoHAAHuBwAB8gcAAfYHAAH6BwAB/gcAAYIIAAGGCAABiggAAY4IAAGSCAABlggAAZoIAAGeCAABoggAAaYIAAGqCAABrggAAbIIAAG2CAABuggAAb4IAAHCCAABxggAAcoIAAHOCAAB0ggAAdYIAAHaCAAB3ggAAeIIAAHmCAAB6ggAAe4IAAHyCAAB9ggAAfoIAAH+CAABggkAAYYJAAGKCQABjgkAAZIJAAGWCQABmgkAAZ4JAAGiCQABpgkAAaoJAAGuCQABsgkAAbYJAAG6CQABvgkAAcIJAAHGCQABygkAAc4JAAHSCQAB1gkAAdoJAAHeCQAB4gkAAeYJAAHqCQAB7gkAAfIJAAH2CQAB+gkAAf4JAAGCCgABhgoAAYoKAAGOCgABkgoAAZYKAAGaCgABngoAAaIKAAGmCgABqgoAAa4KAAGyCgABtgoAAboKAAG+CgABwgoAAcYKAAHKCgABzgoAAdIKAAHWCgAB2goAAd4KAAHiCgAB5goAAeoKAAHuCgAB8goAAfYKAAH6CgAB/goAAYILAAGGCwABigsAAY4LAAGSCwABlgsAAZoLAAGeCwABogsAAaYLAAGqCwABrgsAAbILAAG2CwABugsAAb4LAAHCCwABxgsAAcoLAAHOCwAB0gsAAdYLAAHaCwAB3gsAAeILAAHmCwAB6gsAAe4LAAHyCwAB9gsAAfoLAAH+CwABggwAAYYMAAGKDAABjgwAAZIMAAGWDAAB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AAAAAACcDgAA4AIZBgAAAAAApA4AAPQCBAYAAAAAAJwOAADgAhkGAAAAAACkDgAA9AIEBgAAAAAAnA4AAOACGQYAAAAAAKQOAAD0AgQGAAAAAACcDgAA4AIZBgAAAAAApA4AAPQCBAYAAAAAAJwOAADgAhkGAAAAAACkDgAA9AIEBgAAAAAAnA4AAOACGQYAAAAAAKQOAAD0AgQGAAAAAACcDgAA4AIZBgAAAAAApA4AAPQCBAYAAAAAAJwOAADgAhkGAAAAAACkDgAA9AIEBgAAAAAAnA4AAOACGQYAAAAAAKQOAAD0AgQGAAAAAACcDgAA4AIZBgAAAAAApA4AAPQCBAYAAAAAAJwOAADgAhkGAAAAAACkDgAA9AIEBgAAAAAAnA4AAOACGQYAAAAAAKQOAAD0AgQGAAAAAACcDgAA4AIZBgAAAAAApA4AAPQCBAYAAAAAAJwOAADgAhkGAAAAAACkDgAA9AIEBgAAAAAAnA4AAOACGQYAAAAAAKQOAAD0AgQGAAAAAACcDgAA4AIZBgAAAAAApA4AAPQCBAYAAAAAAJwOAADgAhkGAAAAAACkDgAA9AIEBgAAAAAAnA4AAOACGQYAAAAAAKQOAAD0AgQGAAAAAACcDgAA4AIZBgAAAAAApA4AAPQCBAYAAAAAAJwOAADgAhkGAAAAAACkDgAA9AIEBgAAAAAAnA4AAOACGQYAAAAAAKQOAAD0AgQGAAAAAACcDgAA4AIZBgAAAAAApA4AAPQCBAYAAAAAAJwOAADgAhkGAAAAAACkDgAA9AIEBgAAAAAAnA4AAOACGQYAAAAAAKQOAAD0AgQGAAAAAACcDgAA4AIZBgAAAAAApA4AAPQCBAYAAAAAAJwOAADgAhkGAAAAAACkDgAA9AIEBgAAAAAAnA4AAOACGQYAAAAAAKQOAAD0AgQGAAAAAACcDgAA4AIZBgAAAAAApA4AAPQCBAYAAAAAAJwOAADgAhkGAAAAAACkDgAA9AIEBgAAAAAAnA4AAOACGQYAAAAAAKQOAAD0AgQGAAAAAACcDgAA4AIZBgAAAAAApA4AAPQCBAYAAAAAAJwOAADgAhkGAAAAAACkDgAA9AIEBgAAAAAAnA4AAOACGQYAAAAAAKQOAAD0AgQGAAAAAACcDgAA4AIZBgAAAAAApA4AAPQCBAYAAAAAAJwOAADgAhkGAAAA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