From 671a7ed99a1dd4ff5f9449be1b0335f8e268a541 Mon Sep 17 00:00:00 2001 From: Joe Polny Date: Fri, 1 Nov 2024 15:49:15 -0400 Subject: [PATCH] send additionalReceiverFunds to inbox after MBR payment --- assets/arc-0059/contracts/arc59.algo.ts | 14 +- .../contracts/artifacts/ARC59.approval.teal | 126 ++--- .../contracts/artifacts/ARC59.arc32.json | 2 +- .../contracts/artifacts/ARC59.src_map.json | 446 +++++++++--------- .../artifacts/MutableARC59.approval.teal | 126 ++--- .../artifacts/MutableARC59.arc32.json | 2 +- .../artifacts/MutableARC59.src_map.json | 310 ++++++------ .../arc-0059/contracts/clients/Arc59Client.ts | 2 +- .../contracts/clients/MutableARC59Client.ts | 2 +- 9 files changed, 515 insertions(+), 515 deletions(-) diff --git a/assets/arc-0059/contracts/arc59.algo.ts b/assets/arc-0059/contracts/arc59.algo.ts index a47f82e4d..ed042f3f5 100644 --- a/assets/arc-0059/contracts/arc59.algo.ts +++ b/assets/arc-0059/contracts/arc59.algo.ts @@ -196,13 +196,6 @@ export class ARC59 extends Contract { const inboxExisted = this.inboxes(receiver).exists; const inbox = this.arc59_getOrCreateInbox(receiver); - if (additionalReceiverFunds !== 0) { - sendPayment({ - receiver: inbox, - amount: additionalReceiverFunds, - }); - } - if (!inbox.isOptedInToAsset(axfer.xferAsset)) { let inboxMbrDelta = globals.assetOptInMinBalance; if (!inboxExisted) inboxMbrDelta += globals.minBalance; @@ -231,6 +224,13 @@ export class ARC59 extends Contract { xferAsset: axfer.xferAsset, }); + if (additionalReceiverFunds !== 0) { + sendPayment({ + receiver: inbox, + amount: additionalReceiverFunds, + }); + } + return inbox; } diff --git a/assets/arc-0059/contracts/artifacts/ARC59.approval.teal b/assets/arc-0059/contracts/artifacts/ARC59.approval.teal index 9db257d23..8a9281a4f 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.approval.teal +++ b/assets/arc-0059/contracts/artifacts/ARC59.approval.teal @@ -836,42 +836,6 @@ arc59_sendAsset: // *if11_condition // contracts/arc59.algo.ts:199 - // additionalReceiverFunds !== 0 - frame_dig -3 // additionalReceiverFunds: uint64 - int 0 - != - bz *if11_end - - // *if11_consequent - // contracts/arc59.algo.ts:200 - // sendPayment({ - // receiver: inbox, - // amount: additionalReceiverFunds, - // }) - itxn_begin - int pay - itxn_field TypeEnum - - // contracts/arc59.algo.ts:201 - // receiver: inbox - frame_dig 1 // inbox: address - itxn_field Receiver - - // contracts/arc59.algo.ts:202 - // amount: additionalReceiverFunds - frame_dig -3 // additionalReceiverFunds: uint64 - itxn_field Amount - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - -*if11_end: - // *if12_condition - // contracts/arc59.algo.ts:206 // !inbox.isOptedInToAsset(axfer.xferAsset) frame_dig 1 // inbox: address frame_dig -1 // axfer: AssetTransferTxn @@ -880,32 +844,32 @@ arc59_sendAsset: swap pop ! - bz *if12_end + bz *if11_end - // *if12_consequent - // contracts/arc59.algo.ts:207 + // *if11_consequent + // contracts/arc59.algo.ts:200 // inboxMbrDelta = globals.assetOptInMinBalance global AssetOptInMinBalance frame_bury 2 // inboxMbrDelta: uint64 - // *if13_condition - // contracts/arc59.algo.ts:208 + // *if12_condition + // contracts/arc59.algo.ts:201 // !inboxExisted frame_dig 0 // inboxExisted: bool ! - bz *if13_end + bz *if12_end - // *if13_consequent - // contracts/arc59.algo.ts:208 + // *if12_consequent + // contracts/arc59.algo.ts:201 // inboxMbrDelta += globals.minBalance frame_dig 2 // inboxMbrDelta: uint64 global MinBalance + frame_bury 2 // inboxMbrDelta: uint64 -*if13_end: - // *if14_condition - // contracts/arc59.algo.ts:211 +*if12_end: + // *if13_condition + // contracts/arc59.algo.ts:204 // inbox.balance < inbox.minBalance + inboxMbrDelta frame_dig 1 // inbox: address acct_params_get AcctBalance @@ -916,10 +880,10 @@ arc59_sendAsset: frame_dig 2 // inboxMbrDelta: uint64 + < - bz *if14_end + bz *if13_end - // *if14_consequent - // contracts/arc59.algo.ts:212 + // *if13_consequent + // contracts/arc59.algo.ts:205 // sendPayment({ // receiver: inbox, // amount: inboxMbrDelta, @@ -928,12 +892,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:213 + // contracts/arc59.algo.ts:206 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:214 + // contracts/arc59.algo.ts:207 // amount: inboxMbrDelta frame_dig 2 // inboxMbrDelta: uint64 itxn_field Amount @@ -945,8 +909,8 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if14_end: - // contracts/arc59.algo.ts:219 +*if13_end: + // contracts/arc59.algo.ts:212 // sendAssetTransfer({ // sender: inbox, // assetReceiver: inbox, @@ -957,22 +921,22 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:220 + // contracts/arc59.algo.ts:213 // sender: inbox frame_dig 1 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:221 + // contracts/arc59.algo.ts:214 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:222 + // contracts/arc59.algo.ts:215 // assetAmount: 0 int 0 itxn_field AssetAmount - // contracts/arc59.algo.ts:223 + // contracts/arc59.algo.ts:216 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -985,8 +949,8 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if12_end: - // contracts/arc59.algo.ts:228 +*if11_end: + // contracts/arc59.algo.ts:221 // sendAssetTransfer({ // assetReceiver: inbox, // assetAmount: axfer.assetAmount, @@ -996,18 +960,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:229 + // contracts/arc59.algo.ts:222 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:230 + // contracts/arc59.algo.ts:223 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:231 + // contracts/arc59.algo.ts:224 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -1020,6 +984,42 @@ arc59_sendAsset: // Submit inner transaction itxn_submit + // *if14_condition + // contracts/arc59.algo.ts:227 + // additionalReceiverFunds !== 0 + frame_dig -3 // additionalReceiverFunds: uint64 + int 0 + != + bz *if14_end + + // *if14_consequent + // contracts/arc59.algo.ts:228 + // sendPayment({ + // receiver: inbox, + // amount: additionalReceiverFunds, + // }) + itxn_begin + int pay + itxn_field TypeEnum + + // contracts/arc59.algo.ts:229 + // receiver: inbox + frame_dig 1 // inbox: address + itxn_field Receiver + + // contracts/arc59.algo.ts:230 + // amount: additionalReceiverFunds + frame_dig -3 // additionalReceiverFunds: uint64 + itxn_field Amount + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + +*if14_end: // contracts/arc59.algo.ts:234 // return inbox; frame_dig 1 // inbox: address diff --git a/assets/arc-0059/contracts/artifacts/ARC59.arc32.json b/assets/arc-0059/contracts/artifacts/ARC59.arc32.json index 14c9d204c..711807630 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.arc32.json +++ b/assets/arc-0059/contracts/artifacts/ARC59.arc32.json @@ -74,7 +74,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltID0gYWxnb05lZWRlZFRvQ2xhaW0gLSByZWNlaXZlci5iYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOAoJLy8gIXJvdXRlck9wdGVkSW4KCWZyYW1lX2RpZyAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCSEKCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEzCgkvLyAhdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE3CgkvLyBpbmZvLml0eG5zICs9IDQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyBwcmVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjEKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMgoJLy8gYm94TWJyRGVsdGEgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNCAvLyBwcmVNQlI6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZGVsZXRlKCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2RlbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNgoJLy8gaW5mby5tYnIgKz0gYm94TWJyRGVsdGEgKyBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZnJhbWVfZGlnIDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSA2IC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMwoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmNV9lbmQKCgkvLyAqaWY1X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzcKCS8vICEoaW5ib3guYmFsYW5jZSA+PSBpbmJveC5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCT49CgkhCglieiAqaWY2X2VuZAoKCS8vICppZjZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM5CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQyCgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjZfZW5kOgoKKmlmNV9lbmQ6CgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ3CgkvLyBpbmJveC5iYWxhbmNlID4gaW5ib3gubWluQmFsYW5jZSAmJiBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICE9PSAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglpbnQgMAoJIT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MgoJLy8gYWxnb0NvbnN1bWVkQnlDbGFpbSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyAoaW5mby5pdHhucyArIDQpICogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKgoJKwoJZnJhbWVfYnVyeSA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MwoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgPyBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSA6IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglieiAqdGVybmFyeTFfZmFsc2UKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCgliICp0ZXJuYXJ5MV9lbmQKCip0ZXJuYXJ5MV9mYWxzZToKCWludCAwCgoqdGVybmFyeTFfZW5kOgoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU0CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveEFsZ29BdmFpbGFibGUgPiBhbGdvQ29uc3VtZWRCeUNsYWltID8gaW5ib3hBbGdvQXZhaWxhYmxlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbSA6IDAKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCT4KCWJ6ICp0ZXJuYXJ5Ml9mYWxzZQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJYiAqdGVybmFyeTJfZW5kCgoqdGVybmFyeTJfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkyX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTYKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU3CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzQKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MgoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg2CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg4CgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OQoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkzCgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk5CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAwCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAxCgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAyCgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA3CgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDgKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA4CgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTNfZW5kOgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTEKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTRfZW5kCgoJLy8gKmlmMTRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTMKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTQKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxOQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIxCgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTJfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMwCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM0CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ3CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MAoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTUKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTYKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcyCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc5CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgwCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTNfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5M19lbmQKCip0ZXJuYXJ5M19mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkzX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAyCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDMKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDQKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJy", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltID0gYWxnb05lZWRlZFRvQ2xhaW0gLSByZWNlaXZlci5iYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOAoJLy8gIXJvdXRlck9wdGVkSW4KCWZyYW1lX2RpZyAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCSEKCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEzCgkvLyAhdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE3CgkvLyBpbmZvLml0eG5zICs9IDQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyBwcmVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjEKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMgoJLy8gYm94TWJyRGVsdGEgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNCAvLyBwcmVNQlI6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZGVsZXRlKCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2RlbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNgoJLy8gaW5mby5tYnIgKz0gYm94TWJyRGVsdGEgKyBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZnJhbWVfZGlnIDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSA2IC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMwoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmNV9lbmQKCgkvLyAqaWY1X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzcKCS8vICEoaW5ib3guYmFsYW5jZSA+PSBpbmJveC5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCT49CgkhCglieiAqaWY2X2VuZAoKCS8vICppZjZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM5CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQyCgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjZfZW5kOgoKKmlmNV9lbmQ6CgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ3CgkvLyBpbmJveC5iYWxhbmNlID4gaW5ib3gubWluQmFsYW5jZSAmJiBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICE9PSAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglpbnQgMAoJIT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MgoJLy8gYWxnb0NvbnN1bWVkQnlDbGFpbSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyAoaW5mby5pdHhucyArIDQpICogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKgoJKwoJZnJhbWVfYnVyeSA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MwoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgPyBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSA6IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglieiAqdGVybmFyeTFfZmFsc2UKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCgliICp0ZXJuYXJ5MV9lbmQKCip0ZXJuYXJ5MV9mYWxzZToKCWludCAwCgoqdGVybmFyeTFfZW5kOgoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU0CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveEFsZ29BdmFpbGFibGUgPiBhbGdvQ29uc3VtZWRCeUNsYWltID8gaW5ib3hBbGdvQXZhaWxhYmxlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbSA6IDAKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCT4KCWJ6ICp0ZXJuYXJ5Ml9mYWxzZQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJYiAqdGVybmFyeTJfZW5kCgoqdGVybmFyeTJfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkyX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTYKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU3CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzQKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MgoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg2CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg4CgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OQoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkzCgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk5CgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDAKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDEKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxMl9lbmQ6CgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNAoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNwoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTNfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEzCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTQKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE1CgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTYKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjEKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMgoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjMKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNAoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjE0X2VuZAoKCS8vICppZjE0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM0CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ3CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MAoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTUKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTYKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcyCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc5CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgwCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTNfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5M19lbmQKCip0ZXJuYXJ5M19mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkzX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAyCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDMKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDQKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/artifacts/ARC59.src_map.json b/assets/arc-0059/contracts/artifacts/ARC59.src_map.json index a7aff61dc..31a24daeb 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.src_map.json +++ b/assets/arc-0059/contracts/artifacts/ARC59.src_map.json @@ -3771,597 +3771,597 @@ "teal": 841, "source": 199, "pc": [ - 948 + 948, + 949 ] }, { "teal": 842, "source": 199, "pc": [ - 949 + 950, + 951 ] }, { "teal": 843, "source": 199, "pc": [ - 950, - 951, - 952 - ] - }, - { - "teal": 851, - "source": 200, - "pc": [ + 952, 953 ] }, { - "teal": 852, - "source": 200, + "teal": 844, + "source": 199, "pc": [ 954 ] }, { - "teal": 853, - "source": 200, + "teal": 845, + "source": 199, "pc": [ - 955, - 956 + 955 ] }, { - "teal": 857, - "source": 201, + "teal": 846, + "source": 199, "pc": [ - 957, - 958 + 956 ] }, { - "teal": 858, - "source": 201, + "teal": 847, + "source": 199, "pc": [ - 959, - 960 + 957, + 958, + 959 ] }, { - "teal": 862, - "source": 202, + "teal": 852, + "source": 200, "pc": [ - 961, - 962 + 960, + 961 ] }, { - "teal": 863, - "source": 202, + "teal": 853, + "source": 200, "pc": [ - 963, - 964 + 962, + 963 ] }, { - "teal": 866, - "source": 200, + "teal": 858, + "source": 201, "pc": [ + 964, 965 ] }, { - "teal": 867, - "source": 200, + "teal": 859, + "source": 201, "pc": [ - 966, - 967 + 966 ] }, { - "teal": 870, - "source": 200, + "teal": 860, + "source": 201, "pc": [ - 968 + 967, + 968, + 969 ] }, { - "teal": 876, - "source": 206, + "teal": 865, + "source": 201, "pc": [ - 969, - 970 + 970, + 971 ] }, { - "teal": 877, - "source": 206, + "teal": 866, + "source": 201, "pc": [ - 971, - 972 + 972, + 973 ] }, { - "teal": 878, - "source": 206, + "teal": 867, + "source": 201, "pc": [ - 973, 974 ] }, { - "teal": 879, - "source": 206, + "teal": 868, + "source": 201, "pc": [ 975, 976 ] }, { - "teal": 880, - "source": 206, + "teal": 874, + "source": 204, "pc": [ - 977 + 977, + 978 ] }, { - "teal": 881, - "source": 206, + "teal": 875, + "source": 204, "pc": [ - 978 + 979, + 980 ] }, { - "teal": 882, - "source": 206, + "teal": 876, + "source": 204, "pc": [ - 979 + 981 ] }, { - "teal": 883, - "source": 206, + "teal": 877, + "source": 204, "pc": [ - 980, - 981, - 982 + 982, + 983 ] }, { - "teal": 888, - "source": 207, + "teal": 878, + "source": 204, "pc": [ - 983, - 984 + 984, + 985 ] }, { - "teal": 889, - "source": 207, + "teal": 879, + "source": 204, "pc": [ - 985, 986 ] }, { - "teal": 894, - "source": 208, + "teal": 880, + "source": 204, "pc": [ 987, 988 ] }, { - "teal": 895, - "source": 208, + "teal": 881, + "source": 204, "pc": [ 989 ] }, { - "teal": 896, - "source": 208, + "teal": 882, + "source": 204, + "pc": [ + 990 + ] + }, + { + "teal": 883, + "source": 204, "pc": [ - 990, 991, - 992 + 992, + 993 ] }, { - "teal": 901, - "source": 208, + "teal": 891, + "source": 205, "pc": [ - 993, 994 ] }, { - "teal": 902, - "source": 208, + "teal": 892, + "source": 205, "pc": [ - 995, - 996 + 995 ] }, { - "teal": 903, - "source": 208, + "teal": 893, + "source": 205, "pc": [ + 996, 997 ] }, { - "teal": 904, - "source": 208, + "teal": 897, + "source": 206, "pc": [ 998, 999 ] }, { - "teal": 910, - "source": 211, + "teal": 898, + "source": 206, "pc": [ 1000, 1001 ] }, { - "teal": 911, - "source": 211, + "teal": 902, + "source": 207, "pc": [ 1002, 1003 ] }, { - "teal": 912, - "source": 211, + "teal": 903, + "source": 207, "pc": [ - 1004 + 1004, + 1005 ] }, { - "teal": 913, - "source": 211, + "teal": 906, + "source": 205, "pc": [ - 1005, 1006 ] }, { - "teal": 914, - "source": 211, + "teal": 907, + "source": 205, "pc": [ 1007, 1008 ] }, { - "teal": 915, - "source": 211, + "teal": 910, + "source": 205, "pc": [ 1009 ] }, { - "teal": 916, - "source": 211, + "teal": 920, + "source": 212, "pc": [ - 1010, - 1011 + 1010 ] }, { - "teal": 917, - "source": 211, + "teal": 921, + "source": 212, "pc": [ - 1012 + 1011 ] }, { - "teal": 918, - "source": 211, + "teal": 922, + "source": 212, "pc": [ + 1012, 1013 ] }, { - "teal": 919, - "source": 211, + "teal": 926, + "source": 213, "pc": [ 1014, - 1015, - 1016 + 1015 ] }, { "teal": 927, - "source": 212, + "source": 213, "pc": [ + 1016, 1017 ] }, { - "teal": 928, - "source": 212, + "teal": 931, + "source": 214, "pc": [ - 1018 + 1018, + 1019 ] }, { - "teal": 929, - "source": 212, + "teal": 932, + "source": 214, "pc": [ - 1019, - 1020 + 1020, + 1021 ] }, { - "teal": 933, - "source": 213, + "teal": 936, + "source": 215, "pc": [ - 1021, 1022 ] }, { - "teal": 934, - "source": 213, + "teal": 937, + "source": 215, "pc": [ 1023, 1024 ] }, { - "teal": 938, - "source": 214, + "teal": 941, + "source": 216, "pc": [ 1025, 1026 ] }, { - "teal": 939, - "source": 214, + "teal": 942, + "source": 216, "pc": [ 1027, 1028 ] }, { - "teal": 942, - "source": 212, + "teal": 943, + "source": 216, "pc": [ - 1029 + 1029, + 1030 ] }, { - "teal": 943, + "teal": 946, "source": 212, "pc": [ - 1030, 1031 ] }, { - "teal": 946, + "teal": 947, "source": 212, "pc": [ - 1032 + 1032, + 1033 ] }, { - "teal": 956, - "source": 219, + "teal": 950, + "source": 212, "pc": [ - 1033 + 1034 ] }, { - "teal": 957, - "source": 219, + "teal": 959, + "source": 221, "pc": [ - 1034 + 1035 ] }, { - "teal": 958, - "source": 219, + "teal": 960, + "source": 221, "pc": [ - 1035, 1036 ] }, { - "teal": 962, - "source": 220, + "teal": 961, + "source": 221, "pc": [ 1037, 1038 ] }, { - "teal": 963, - "source": 220, + "teal": 965, + "source": 222, "pc": [ 1039, 1040 ] }, { - "teal": 967, - "source": 221, + "teal": 966, + "source": 222, "pc": [ 1041, 1042 ] }, { - "teal": 968, - "source": 221, + "teal": 970, + "source": 223, "pc": [ 1043, 1044 ] }, { - "teal": 972, - "source": 222, - "pc": [ - 1045 - ] - }, - { - "teal": 973, - "source": 222, + "teal": 971, + "source": 223, "pc": [ - 1046, - 1047 + 1045, + 1046 ] }, { - "teal": 977, + "teal": 972, "source": 223, "pc": [ - 1048, - 1049 + 1047, + 1048 ] }, { - "teal": 978, - "source": 223, + "teal": 976, + "source": 224, "pc": [ - 1050, - 1051 + 1049, + 1050 ] }, { - "teal": 979, - "source": 223, + "teal": 977, + "source": 224, "pc": [ - 1052, - 1053 + 1051, + 1052 ] }, { - "teal": 982, - "source": 219, + "teal": 978, + "source": 224, "pc": [ + 1053, 1054 ] }, { - "teal": 983, - "source": 219, + "teal": 981, + "source": 221, "pc": [ - 1055, - 1056 + 1055 ] }, { - "teal": 986, - "source": 219, + "teal": 982, + "source": 221, "pc": [ + 1056, 1057 ] }, { - "teal": 995, - "source": 228, + "teal": 985, + "source": 221, "pc": [ 1058 ] }, { - "teal": 996, - "source": 228, + "teal": 990, + "source": 227, "pc": [ - 1059 + 1059, + 1060 ] }, { - "teal": 997, - "source": 228, + "teal": 991, + "source": 227, "pc": [ - 1060, 1061 ] }, { - "teal": 1001, - "source": 229, + "teal": 992, + "source": 227, "pc": [ - 1062, - 1063 + 1062 ] }, { - "teal": 1002, - "source": 229, + "teal": 993, + "source": 227, "pc": [ + 1063, 1064, 1065 ] }, { - "teal": 1006, - "source": 230, + "teal": 1001, + "source": 228, + "pc": [ + 1066 + ] + }, + { + "teal": 1002, + "source": 228, "pc": [ - 1066, 1067 ] }, { - "teal": 1007, - "source": 230, + "teal": 1003, + "source": 228, "pc": [ 1068, 1069 ] }, { - "teal": 1008, - "source": 230, + "teal": 1007, + "source": 229, "pc": [ 1070, 1071 ] }, { - "teal": 1012, - "source": 231, + "teal": 1008, + "source": 229, "pc": [ 1072, 1073 ] }, { - "teal": 1013, - "source": 231, + "teal": 1012, + "source": 230, "pc": [ 1074, 1075 ] }, { - "teal": 1014, - "source": 231, + "teal": 1013, + "source": 230, "pc": [ 1076, 1077 ] }, { - "teal": 1017, + "teal": 1016, "source": 228, "pc": [ 1078 ] }, { - "teal": 1018, + "teal": 1017, "source": 228, "pc": [ 1079, @@ -4369,7 +4369,7 @@ ] }, { - "teal": 1021, + "teal": 1020, "source": 228, "pc": [ 1081 diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal b/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal index c28b95f74..0487ef280 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal @@ -836,42 +836,6 @@ arc59_sendAsset: // *if11_condition // contracts/arc59.algo.ts:199 - // additionalReceiverFunds !== 0 - frame_dig -3 // additionalReceiverFunds: uint64 - int 0 - != - bz *if11_end - - // *if11_consequent - // contracts/arc59.algo.ts:200 - // sendPayment({ - // receiver: inbox, - // amount: additionalReceiverFunds, - // }) - itxn_begin - int pay - itxn_field TypeEnum - - // contracts/arc59.algo.ts:201 - // receiver: inbox - frame_dig 1 // inbox: address - itxn_field Receiver - - // contracts/arc59.algo.ts:202 - // amount: additionalReceiverFunds - frame_dig -3 // additionalReceiverFunds: uint64 - itxn_field Amount - - // Fee field not set, defaulting to 0 - int 0 - itxn_field Fee - - // Submit inner transaction - itxn_submit - -*if11_end: - // *if12_condition - // contracts/arc59.algo.ts:206 // !inbox.isOptedInToAsset(axfer.xferAsset) frame_dig 1 // inbox: address frame_dig -1 // axfer: AssetTransferTxn @@ -880,32 +844,32 @@ arc59_sendAsset: swap pop ! - bz *if12_end + bz *if11_end - // *if12_consequent - // contracts/arc59.algo.ts:207 + // *if11_consequent + // contracts/arc59.algo.ts:200 // inboxMbrDelta = globals.assetOptInMinBalance global AssetOptInMinBalance frame_bury 2 // inboxMbrDelta: uint64 - // *if13_condition - // contracts/arc59.algo.ts:208 + // *if12_condition + // contracts/arc59.algo.ts:201 // !inboxExisted frame_dig 0 // inboxExisted: bool ! - bz *if13_end + bz *if12_end - // *if13_consequent - // contracts/arc59.algo.ts:208 + // *if12_consequent + // contracts/arc59.algo.ts:201 // inboxMbrDelta += globals.minBalance frame_dig 2 // inboxMbrDelta: uint64 global MinBalance + frame_bury 2 // inboxMbrDelta: uint64 -*if13_end: - // *if14_condition - // contracts/arc59.algo.ts:211 +*if12_end: + // *if13_condition + // contracts/arc59.algo.ts:204 // inbox.balance < inbox.minBalance + inboxMbrDelta frame_dig 1 // inbox: address acct_params_get AcctBalance @@ -916,10 +880,10 @@ arc59_sendAsset: frame_dig 2 // inboxMbrDelta: uint64 + < - bz *if14_end + bz *if13_end - // *if14_consequent - // contracts/arc59.algo.ts:212 + // *if13_consequent + // contracts/arc59.algo.ts:205 // sendPayment({ // receiver: inbox, // amount: inboxMbrDelta, @@ -928,12 +892,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:213 + // contracts/arc59.algo.ts:206 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:214 + // contracts/arc59.algo.ts:207 // amount: inboxMbrDelta frame_dig 2 // inboxMbrDelta: uint64 itxn_field Amount @@ -945,8 +909,8 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if14_end: - // contracts/arc59.algo.ts:219 +*if13_end: + // contracts/arc59.algo.ts:212 // sendAssetTransfer({ // sender: inbox, // assetReceiver: inbox, @@ -957,22 +921,22 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:220 + // contracts/arc59.algo.ts:213 // sender: inbox frame_dig 1 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:221 + // contracts/arc59.algo.ts:214 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:222 + // contracts/arc59.algo.ts:215 // assetAmount: 0 int 0 itxn_field AssetAmount - // contracts/arc59.algo.ts:223 + // contracts/arc59.algo.ts:216 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -985,8 +949,8 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if12_end: - // contracts/arc59.algo.ts:228 +*if11_end: + // contracts/arc59.algo.ts:221 // sendAssetTransfer({ // assetReceiver: inbox, // assetAmount: axfer.assetAmount, @@ -996,18 +960,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:229 + // contracts/arc59.algo.ts:222 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:230 + // contracts/arc59.algo.ts:223 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:231 + // contracts/arc59.algo.ts:224 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -1020,6 +984,42 @@ arc59_sendAsset: // Submit inner transaction itxn_submit + // *if14_condition + // contracts/arc59.algo.ts:227 + // additionalReceiverFunds !== 0 + frame_dig -3 // additionalReceiverFunds: uint64 + int 0 + != + bz *if14_end + + // *if14_consequent + // contracts/arc59.algo.ts:228 + // sendPayment({ + // receiver: inbox, + // amount: additionalReceiverFunds, + // }) + itxn_begin + int pay + itxn_field TypeEnum + + // contracts/arc59.algo.ts:229 + // receiver: inbox + frame_dig 1 // inbox: address + itxn_field Receiver + + // contracts/arc59.algo.ts:230 + // amount: additionalReceiverFunds + frame_dig -3 // additionalReceiverFunds: uint64 + itxn_field Amount + + // Fee field not set, defaulting to 0 + int 0 + itxn_field Fee + + // Submit inner transaction + itxn_submit + +*if14_end: // contracts/arc59.algo.ts:234 // return inbox; frame_dig 1 // inbox: address diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json b/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json index e0f326bd4..c0c0f9981 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json @@ -79,7 +79,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSA9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlID8gaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgOiAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJYnogKnRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJYiAqdGVybmFyeTFfZW5kCgoqdGVybmFyeTFfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkxX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3hBbGdvQXZhaWxhYmxlID4gYWxnb0NvbnN1bWVkQnlDbGFpbSA/IGluYm94QWxnb0F2YWlsYWJsZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0gOiAwCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0Cgk+CglieiAqdGVybmFyeTJfZmFsc2UKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWIgKnRlcm5hcnkyX2VuZAoKKnRlcm5hcnkyX2ZhbHNlOgoJaW50IDAKCip0ZXJuYXJ5Ml9lbmQ6CglmcmFtZV9idXJ5IDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU2CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPCBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJPAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NwoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAtPSBpbmJveEFsZ29BdmFpbGFibGUKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjhfZW5kOgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjEKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gYXhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfc2VuZEFzc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuLCByZWNlaXZlcjogQWRkcmVzcywgYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NCk6IEFkZHJlc3MKLy8KLy8gU2VuZCBhbiBhc3NldCB0byB0aGUgcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBheGZlciBUaGUgYXNzZXQgdHJhbnNmZXIgdG8gdGhpcyBhcHAKLy8gQHBhcmFtIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzIFRoZSBhbW91bnQgb2YgQUxHTyB0byBzZW5kIHRvIHRoZSByZWNlaXZlci9pbmJveCBpbiBhZGRpdGlvbiB0byB0aGUgTUJSCi8vCi8vIEByZXR1cm5zIFRoZSBhZGRyZXNzIHRoYXQgdGhlIGFzc2V0IHdhcyBzZW50IHRvIChlaXRoZXIgdGhlIHJlY2VpdmVyIG9yIHRoZWlyIGluYm94KQphcmM1OV9zZW5kQXNzZXQ6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc0CgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGF4ZmVyLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vICppZjlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzkKCS8vIHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODAKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OAoJLy8gcmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODkKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MwoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY5X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NgoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OQoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjExX2VuZAoKCS8vICppZjExX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMgoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTFfZW5kOgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjEyX2VuZAoKCS8vICppZjEyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNwoJLy8gaW5ib3hNYnJEZWx0YSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vICppZjEzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA4CgkvLyAhaW5ib3hFeGlzdGVkCglmcmFtZV9kaWcgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCSEKCWJ6ICppZjEzX2VuZAoKCS8vICppZjEzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOAoJLy8gaW5ib3hNYnJEZWx0YSArPSBnbG9iYWxzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCippZjEzX2VuZDoKCS8vICppZjE0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjExCgkvLyBpbmJveC5iYWxhbmNlIDwgaW5ib3gubWluQmFsYW5jZSArIGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCSsKCTwKCWJ6ICppZjE0X2VuZAoKCS8vICppZjE0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgICBhbW91bnQ6IGluYm94TWJyRGVsdGEsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEzCgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE0CgkvLyBhbW91bnQ6IGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTkKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMQoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEyX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMxCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDYKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDgKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTAKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTMKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU1CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU2CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MQoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NAoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4MAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkzX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTNfZW5kCgoqdGVybmFyeTNfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5M19lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAzCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzA0CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIHVwZGF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpOiB2b2lkCnVwZGF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL211dGFibGVfYXJjNTkuYWxnby50czo1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCgk9PQoJYXNzZXJ0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycgoKKmNhbGxfVXBkYXRlQXBwbGljYXRpb246CgltZXRob2QgInVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbgoJZXJy", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSA9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlID8gaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgOiAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJYnogKnRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJYiAqdGVybmFyeTFfZW5kCgoqdGVybmFyeTFfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkxX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3hBbGdvQXZhaWxhYmxlID4gYWxnb0NvbnN1bWVkQnlDbGFpbSA/IGluYm94QWxnb0F2YWlsYWJsZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0gOiAwCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0Cgk+CglieiAqdGVybmFyeTJfZmFsc2UKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWIgKnRlcm5hcnkyX2VuZAoKKnRlcm5hcnkyX2ZhbHNlOgoJaW50IDAKCip0ZXJuYXJ5Ml9lbmQ6CglmcmFtZV9idXJ5IDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU2CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPCBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJPAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NwoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAtPSBpbmJveEFsZ29BdmFpbGFibGUKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjhfZW5kOgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjEKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gYXhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfc2VuZEFzc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuLCByZWNlaXZlcjogQWRkcmVzcywgYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NCk6IEFkZHJlc3MKLy8KLy8gU2VuZCBhbiBhc3NldCB0byB0aGUgcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBheGZlciBUaGUgYXNzZXQgdHJhbnNmZXIgdG8gdGhpcyBhcHAKLy8gQHBhcmFtIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzIFRoZSBhbW91bnQgb2YgQUxHTyB0byBzZW5kIHRvIHRoZSByZWNlaXZlci9pbmJveCBpbiBhZGRpdGlvbiB0byB0aGUgTUJSCi8vCi8vIEByZXR1cm5zIFRoZSBhZGRyZXNzIHRoYXQgdGhlIGFzc2V0IHdhcyBzZW50IHRvIChlaXRoZXIgdGhlIHJlY2VpdmVyIG9yIHRoZWlyIGluYm94KQphcmM1OV9zZW5kQXNzZXQ6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc0CgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGF4ZmVyLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vICppZjlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzkKCS8vIHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODAKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OAoJLy8gcmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODkKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MwoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY5X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NgoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OQoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAwCgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDEKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAxCgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTJfZW5kOgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDQKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDcKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEzX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMwoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE0CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNQoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE2CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTFfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIxCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjIKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIzCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjQKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjcKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzAKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDYKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDgKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTAKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTMKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU1CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU2CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MQoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NAoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4MAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkzX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTNfZW5kCgoqdGVybmFyeTNfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5M19lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAzCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzA0CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIHVwZGF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpOiB2b2lkCnVwZGF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL211dGFibGVfYXJjNTkuYWxnby50czo1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCgk9PQoJYXNzZXJ0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycgoKKmNhbGxfVXBkYXRlQXBwbGljYXRpb246CgltZXRob2QgInVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbgoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json b/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json index 295b0259e..cb7df17a1 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json @@ -3771,127 +3771,121 @@ "teal": 841, "source": 8, "pc": [ - 948 - ] - }, - { - "teal": 842, - "source": 8, - "pc": [ + 948, 949 ] }, { - "teal": 843, + "teal": 842, "source": 8, "pc": [ 950, - 951, - 952 + 951 ] }, { - "teal": 851, + "teal": 843, "source": 8, "pc": [ + 952, 953 ] }, { - "teal": 852, + "teal": 844, "source": 8, "pc": [ 954 ] }, { - "teal": 853, + "teal": 845, "source": 8, "pc": [ - 955, - 956 + 955 ] }, { - "teal": 857, + "teal": 846, "source": 8, "pc": [ - 957, - 958 + 956 ] }, { - "teal": 858, + "teal": 847, "source": 8, "pc": [ - 959, - 960 + 957, + 958, + 959 ] }, { - "teal": 862, + "teal": 852, "source": 8, "pc": [ - 961, - 962 + 960, + 961 ] }, { - "teal": 863, + "teal": 853, "source": 8, "pc": [ - 963, - 964 + 962, + 963 ] }, { - "teal": 866, + "teal": 858, "source": 8, "pc": [ + 964, 965 ] }, { - "teal": 867, + "teal": 859, "source": 8, "pc": [ - 966, - 967 + 966 ] }, { - "teal": 870, + "teal": 860, "source": 8, "pc": [ - 968 + 967, + 968, + 969 ] }, { - "teal": 876, + "teal": 865, "source": 8, "pc": [ - 969, - 970 + 970, + 971 ] }, { - "teal": 877, + "teal": 866, "source": 8, "pc": [ - 971, - 972 + 972, + 973 ] }, { - "teal": 878, + "teal": 867, "source": 8, "pc": [ - 973, 974 ] }, { - "teal": 879, + "teal": 868, "source": 8, "pc": [ 975, @@ -3899,53 +3893,53 @@ ] }, { - "teal": 880, + "teal": 874, "source": 8, "pc": [ - 977 + 977, + 978 ] }, { - "teal": 881, + "teal": 875, "source": 8, "pc": [ - 978 + 979, + 980 ] }, { - "teal": 882, + "teal": 876, "source": 8, "pc": [ - 979 + 981 ] }, { - "teal": 883, + "teal": 877, "source": 8, "pc": [ - 980, - 981, - 982 + 982, + 983 ] }, { - "teal": 888, + "teal": 878, "source": 8, "pc": [ - 983, - 984 + 984, + 985 ] }, { - "teal": 889, + "teal": 879, "source": 8, "pc": [ - 985, 986 ] }, { - "teal": 894, + "teal": 880, "source": 8, "pc": [ 987, @@ -3953,46 +3947,52 @@ ] }, { - "teal": 895, + "teal": 881, "source": 8, "pc": [ 989 ] }, { - "teal": 896, + "teal": 882, + "source": 8, + "pc": [ + 990 + ] + }, + { + "teal": 883, "source": 8, "pc": [ - 990, 991, - 992 + 992, + 993 ] }, { - "teal": 901, + "teal": 891, "source": 8, "pc": [ - 993, 994 ] }, { - "teal": 902, + "teal": 892, "source": 8, "pc": [ - 995, - 996 + 995 ] }, { - "teal": 903, + "teal": 893, "source": 8, "pc": [ + 996, 997 ] }, { - "teal": 904, + "teal": 897, "source": 8, "pc": [ 998, @@ -4000,7 +4000,7 @@ ] }, { - "teal": 910, + "teal": 898, "source": 8, "pc": [ 1000, @@ -4008,7 +4008,7 @@ ] }, { - "teal": 911, + "teal": 902, "source": 8, "pc": [ 1002, @@ -4016,22 +4016,22 @@ ] }, { - "teal": 912, + "teal": 903, "source": 8, "pc": [ - 1004 + 1004, + 1005 ] }, { - "teal": 913, + "teal": 906, "source": 8, "pc": [ - 1005, 1006 ] }, { - "teal": 914, + "teal": 907, "source": 8, "pc": [ 1007, @@ -4039,75 +4039,75 @@ ] }, { - "teal": 915, + "teal": 910, "source": 8, "pc": [ 1009 ] }, { - "teal": 916, + "teal": 920, "source": 8, "pc": [ - 1010, - 1011 + 1010 ] }, { - "teal": 917, + "teal": 921, "source": 8, "pc": [ - 1012 + 1011 ] }, { - "teal": 918, + "teal": 922, "source": 8, "pc": [ + 1012, 1013 ] }, { - "teal": 919, + "teal": 926, "source": 8, "pc": [ 1014, - 1015, - 1016 + 1015 ] }, { "teal": 927, "source": 8, "pc": [ + 1016, 1017 ] }, { - "teal": 928, + "teal": 931, "source": 8, "pc": [ - 1018 + 1018, + 1019 ] }, { - "teal": 929, + "teal": 932, "source": 8, "pc": [ - 1019, - 1020 + 1020, + 1021 ] }, { - "teal": 933, + "teal": 936, "source": 8, "pc": [ - 1021, 1022 ] }, { - "teal": 934, + "teal": 937, "source": 8, "pc": [ 1023, @@ -4115,7 +4115,7 @@ ] }, { - "teal": 938, + "teal": 941, "source": 8, "pc": [ 1025, @@ -4123,7 +4123,7 @@ ] }, { - "teal": 939, + "teal": 942, "source": 8, "pc": [ 1027, @@ -4131,51 +4131,51 @@ ] }, { - "teal": 942, + "teal": 943, "source": 8, "pc": [ - 1029 + 1029, + 1030 ] }, { - "teal": 943, + "teal": 946, "source": 8, "pc": [ - 1030, 1031 ] }, { - "teal": 946, + "teal": 947, "source": 8, "pc": [ - 1032 + 1032, + 1033 ] }, { - "teal": 956, + "teal": 950, "source": 8, "pc": [ - 1033 + 1034 ] }, { - "teal": 957, + "teal": 959, "source": 8, "pc": [ - 1034 + 1035 ] }, { - "teal": 958, + "teal": 960, "source": 8, "pc": [ - 1035, 1036 ] }, { - "teal": 962, + "teal": 961, "source": 8, "pc": [ 1037, @@ -4183,7 +4183,7 @@ ] }, { - "teal": 963, + "teal": 965, "source": 8, "pc": [ 1039, @@ -4191,7 +4191,7 @@ ] }, { - "teal": 967, + "teal": 966, "source": 8, "pc": [ 1041, @@ -4199,7 +4199,7 @@ ] }, { - "teal": 968, + "teal": 970, "source": 8, "pc": [ 1043, @@ -4207,114 +4207,114 @@ ] }, { - "teal": 972, - "source": 8, - "pc": [ - 1045 - ] - }, - { - "teal": 973, + "teal": 971, "source": 8, "pc": [ - 1046, - 1047 + 1045, + 1046 ] }, { - "teal": 977, + "teal": 972, "source": 8, "pc": [ - 1048, - 1049 + 1047, + 1048 ] }, { - "teal": 978, + "teal": 976, "source": 8, "pc": [ - 1050, - 1051 + 1049, + 1050 ] }, { - "teal": 979, + "teal": 977, "source": 8, "pc": [ - 1052, - 1053 + 1051, + 1052 ] }, { - "teal": 982, + "teal": 978, "source": 8, "pc": [ + 1053, 1054 ] }, { - "teal": 983, + "teal": 981, "source": 8, "pc": [ - 1055, - 1056 + 1055 ] }, { - "teal": 986, + "teal": 982, "source": 8, "pc": [ + 1056, 1057 ] }, { - "teal": 995, + "teal": 985, "source": 8, "pc": [ 1058 ] }, { - "teal": 996, + "teal": 990, "source": 8, "pc": [ - 1059 + 1059, + 1060 ] }, { - "teal": 997, + "teal": 991, "source": 8, "pc": [ - 1060, 1061 ] }, { - "teal": 1001, + "teal": 992, "source": 8, "pc": [ - 1062, - 1063 + 1062 ] }, { - "teal": 1002, + "teal": 993, "source": 8, "pc": [ + 1063, 1064, 1065 ] }, { - "teal": 1006, + "teal": 1001, + "source": 8, + "pc": [ + 1066 + ] + }, + { + "teal": 1002, "source": 8, "pc": [ - 1066, 1067 ] }, { - "teal": 1007, + "teal": 1003, "source": 8, "pc": [ 1068, @@ -4322,7 +4322,7 @@ ] }, { - "teal": 1008, + "teal": 1007, "source": 8, "pc": [ 1070, @@ -4330,7 +4330,7 @@ ] }, { - "teal": 1012, + "teal": 1008, "source": 8, "pc": [ 1072, @@ -4338,7 +4338,7 @@ ] }, { - "teal": 1013, + "teal": 1012, "source": 8, "pc": [ 1074, @@ -4346,7 +4346,7 @@ ] }, { - "teal": 1014, + "teal": 1013, "source": 8, "pc": [ 1076, @@ -4354,14 +4354,14 @@ ] }, { - "teal": 1017, + "teal": 1016, "source": 8, "pc": [ 1078 ] }, { - "teal": 1018, + "teal": 1017, "source": 8, "pc": [ 1079, @@ -4369,7 +4369,7 @@ ] }, { - "teal": 1021, + "teal": 1020, "source": 8, "pc": [ 1081 diff --git a/assets/arc-0059/contracts/clients/Arc59Client.ts b/assets/arc-0059/contracts/clients/Arc59Client.ts index a29800ab5..0892056f2 100644 --- a/assets/arc-0059/contracts/clients/Arc59Client.ts +++ b/assets/arc-0059/contracts/clients/Arc59Client.ts @@ -103,7 +103,7 @@ export const APP_SPEC: AppSpec = { } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltID0gYWxnb05lZWRlZFRvQ2xhaW0gLSByZWNlaXZlci5iYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOAoJLy8gIXJvdXRlck9wdGVkSW4KCWZyYW1lX2RpZyAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCSEKCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEzCgkvLyAhdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE3CgkvLyBpbmZvLml0eG5zICs9IDQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyBwcmVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjEKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMgoJLy8gYm94TWJyRGVsdGEgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNCAvLyBwcmVNQlI6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZGVsZXRlKCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2RlbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNgoJLy8gaW5mby5tYnIgKz0gYm94TWJyRGVsdGEgKyBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZnJhbWVfZGlnIDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSA2IC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMwoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmNV9lbmQKCgkvLyAqaWY1X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzcKCS8vICEoaW5ib3guYmFsYW5jZSA+PSBpbmJveC5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCT49CgkhCglieiAqaWY2X2VuZAoKCS8vICppZjZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM5CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQyCgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjZfZW5kOgoKKmlmNV9lbmQ6CgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ3CgkvLyBpbmJveC5iYWxhbmNlID4gaW5ib3gubWluQmFsYW5jZSAmJiBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICE9PSAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglpbnQgMAoJIT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MgoJLy8gYWxnb0NvbnN1bWVkQnlDbGFpbSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyAoaW5mby5pdHhucyArIDQpICogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKgoJKwoJZnJhbWVfYnVyeSA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MwoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgPyBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSA6IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglieiAqdGVybmFyeTFfZmFsc2UKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCgliICp0ZXJuYXJ5MV9lbmQKCip0ZXJuYXJ5MV9mYWxzZToKCWludCAwCgoqdGVybmFyeTFfZW5kOgoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU0CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveEFsZ29BdmFpbGFibGUgPiBhbGdvQ29uc3VtZWRCeUNsYWltID8gaW5ib3hBbGdvQXZhaWxhYmxlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbSA6IDAKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCT4KCWJ6ICp0ZXJuYXJ5Ml9mYWxzZQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJYiAqdGVybmFyeTJfZW5kCgoqdGVybmFyeTJfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkyX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTYKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU3CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzQKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MgoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg2CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg4CgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OQoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkzCgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk5CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAwCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAxCgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAyCgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA3CgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDgKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA4CgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTNfZW5kOgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTEKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTRfZW5kCgoJLy8gKmlmMTRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTMKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTQKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxOQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIxCgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTJfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMwCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM0CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ3CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MAoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTUKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTYKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcyCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc5CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgwCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTNfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5M19lbmQKCip0ZXJuYXJ5M19mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkzX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAyCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDMKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDQKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJy", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltID0gYWxnb05lZWRlZFRvQ2xhaW0gLSByZWNlaXZlci5iYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOAoJLy8gIXJvdXRlck9wdGVkSW4KCWZyYW1lX2RpZyAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCSEKCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEzCgkvLyAhdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE3CgkvLyBpbmZvLml0eG5zICs9IDQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyBwcmVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjEKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMgoJLy8gYm94TWJyRGVsdGEgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNCAvLyBwcmVNQlI6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZGVsZXRlKCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2RlbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNgoJLy8gaW5mby5tYnIgKz0gYm94TWJyRGVsdGEgKyBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZnJhbWVfZGlnIDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSA2IC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMwoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmNV9lbmQKCgkvLyAqaWY1X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzcKCS8vICEoaW5ib3guYmFsYW5jZSA+PSBpbmJveC5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCT49CgkhCglieiAqaWY2X2VuZAoKCS8vICppZjZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM5CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQyCgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjZfZW5kOgoKKmlmNV9lbmQ6CgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ3CgkvLyBpbmJveC5iYWxhbmNlID4gaW5ib3gubWluQmFsYW5jZSAmJiBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICE9PSAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglpbnQgMAoJIT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MgoJLy8gYWxnb0NvbnN1bWVkQnlDbGFpbSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyAoaW5mby5pdHhucyArIDQpICogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKgoJKwoJZnJhbWVfYnVyeSA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MwoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgPyBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSA6IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglieiAqdGVybmFyeTFfZmFsc2UKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCgliICp0ZXJuYXJ5MV9lbmQKCip0ZXJuYXJ5MV9mYWxzZToKCWludCAwCgoqdGVybmFyeTFfZW5kOgoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU0CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveEFsZ29BdmFpbGFibGUgPiBhbGdvQ29uc3VtZWRCeUNsYWltID8gaW5ib3hBbGdvQXZhaWxhYmxlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbSA6IDAKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCT4KCWJ6ICp0ZXJuYXJ5Ml9mYWxzZQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJYiAqdGVybmFyeTJfZW5kCgoqdGVybmFyeTJfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkyX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTYKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU3CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzQKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MgoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg2CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg4CgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OQoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkzCgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk5CgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDAKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDEKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxMl9lbmQ6CgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNAoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNwoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTNfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEzCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTQKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE1CgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTYKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjEKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMgoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjMKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNAoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjE0X2VuZAoKCS8vICppZjE0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM0CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ3CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MAoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTUKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTYKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcyCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc5CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgwCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTNfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5M19lbmQKCip0ZXJuYXJ5M19mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkzX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAyCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDMKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDQKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/clients/MutableARC59Client.ts b/assets/arc-0059/contracts/clients/MutableARC59Client.ts index 47c330ca9..1b5c54965 100644 --- a/assets/arc-0059/contracts/clients/MutableARC59Client.ts +++ b/assets/arc-0059/contracts/clients/MutableARC59Client.ts @@ -108,7 +108,7 @@ export const APP_SPEC: AppSpec = { } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSA9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlID8gaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgOiAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJYnogKnRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJYiAqdGVybmFyeTFfZW5kCgoqdGVybmFyeTFfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkxX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3hBbGdvQXZhaWxhYmxlID4gYWxnb0NvbnN1bWVkQnlDbGFpbSA/IGluYm94QWxnb0F2YWlsYWJsZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0gOiAwCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0Cgk+CglieiAqdGVybmFyeTJfZmFsc2UKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWIgKnRlcm5hcnkyX2VuZAoKKnRlcm5hcnkyX2ZhbHNlOgoJaW50IDAKCip0ZXJuYXJ5Ml9lbmQ6CglmcmFtZV9idXJ5IDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU2CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPCBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJPAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NwoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAtPSBpbmJveEFsZ29BdmFpbGFibGUKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjhfZW5kOgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjEKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gYXhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfc2VuZEFzc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuLCByZWNlaXZlcjogQWRkcmVzcywgYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NCk6IEFkZHJlc3MKLy8KLy8gU2VuZCBhbiBhc3NldCB0byB0aGUgcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBheGZlciBUaGUgYXNzZXQgdHJhbnNmZXIgdG8gdGhpcyBhcHAKLy8gQHBhcmFtIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzIFRoZSBhbW91bnQgb2YgQUxHTyB0byBzZW5kIHRvIHRoZSByZWNlaXZlci9pbmJveCBpbiBhZGRpdGlvbiB0byB0aGUgTUJSCi8vCi8vIEByZXR1cm5zIFRoZSBhZGRyZXNzIHRoYXQgdGhlIGFzc2V0IHdhcyBzZW50IHRvIChlaXRoZXIgdGhlIHJlY2VpdmVyIG9yIHRoZWlyIGluYm94KQphcmM1OV9zZW5kQXNzZXQ6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc0CgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGF4ZmVyLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vICppZjlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzkKCS8vIHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODAKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OAoJLy8gcmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODkKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MwoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY5X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NgoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OQoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjExX2VuZAoKCS8vICppZjExX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMgoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTFfZW5kOgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjEyX2VuZAoKCS8vICppZjEyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNwoJLy8gaW5ib3hNYnJEZWx0YSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vICppZjEzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA4CgkvLyAhaW5ib3hFeGlzdGVkCglmcmFtZV9kaWcgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCSEKCWJ6ICppZjEzX2VuZAoKCS8vICppZjEzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOAoJLy8gaW5ib3hNYnJEZWx0YSArPSBnbG9iYWxzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCippZjEzX2VuZDoKCS8vICppZjE0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjExCgkvLyBpbmJveC5iYWxhbmNlIDwgaW5ib3gubWluQmFsYW5jZSArIGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCSsKCTwKCWJ6ICppZjE0X2VuZAoKCS8vICppZjE0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgICBhbW91bnQ6IGluYm94TWJyRGVsdGEsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEzCgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE0CgkvLyBhbW91bnQ6IGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTkKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMQoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEyX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMxCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDYKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDgKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTAKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTMKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU1CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU2CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MQoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NAoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4MAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkzX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTNfZW5kCgoqdGVybmFyeTNfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5M19lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAzCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzA0CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIHVwZGF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpOiB2b2lkCnVwZGF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL211dGFibGVfYXJjNTkuYWxnby50czo1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCgk9PQoJYXNzZXJ0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycgoKKmNhbGxfVXBkYXRlQXBwbGljYXRpb246CgltZXRob2QgInVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbgoJZXJy", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSA9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlID8gaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgOiAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJYnogKnRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJYiAqdGVybmFyeTFfZW5kCgoqdGVybmFyeTFfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkxX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3hBbGdvQXZhaWxhYmxlID4gYWxnb0NvbnN1bWVkQnlDbGFpbSA/IGluYm94QWxnb0F2YWlsYWJsZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0gOiAwCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0Cgk+CglieiAqdGVybmFyeTJfZmFsc2UKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWIgKnRlcm5hcnkyX2VuZAoKKnRlcm5hcnkyX2ZhbHNlOgoJaW50IDAKCip0ZXJuYXJ5Ml9lbmQ6CglmcmFtZV9idXJ5IDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU2CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPCBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJPAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NwoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAtPSBpbmJveEFsZ29BdmFpbGFibGUKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjhfZW5kOgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjEKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gYXhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfc2VuZEFzc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuLCByZWNlaXZlcjogQWRkcmVzcywgYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NCk6IEFkZHJlc3MKLy8KLy8gU2VuZCBhbiBhc3NldCB0byB0aGUgcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBheGZlciBUaGUgYXNzZXQgdHJhbnNmZXIgdG8gdGhpcyBhcHAKLy8gQHBhcmFtIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzIFRoZSBhbW91bnQgb2YgQUxHTyB0byBzZW5kIHRvIHRoZSByZWNlaXZlci9pbmJveCBpbiBhZGRpdGlvbiB0byB0aGUgTUJSCi8vCi8vIEByZXR1cm5zIFRoZSBhZGRyZXNzIHRoYXQgdGhlIGFzc2V0IHdhcyBzZW50IHRvIChlaXRoZXIgdGhlIHJlY2VpdmVyIG9yIHRoZWlyIGluYm94KQphcmM1OV9zZW5kQXNzZXQ6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc0CgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGF4ZmVyLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vICppZjlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzkKCS8vIHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODAKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OAoJLy8gcmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODkKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MwoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY5X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NgoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OQoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAwCgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDEKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAxCgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTJfZW5kOgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDQKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDcKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEzX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMwoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE0CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNQoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE2CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTFfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIxCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjIKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIzCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjQKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjcKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzAKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDYKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDgKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTAKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTMKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU1CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU2CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MQoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NAoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4MAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkzX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTNfZW5kCgoqdGVybmFyeTNfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5M19lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAzCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzA0CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIHVwZGF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpOiB2b2lkCnVwZGF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL211dGFibGVfYXJjNTkuYWxnby50czo1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCgk9PQoJYXNzZXJ0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycgoKKmNhbGxfVXBkYXRlQXBwbGljYXRpb246CgltZXRob2QgInVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbgoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": {