@alpha-arcade/sdk 0.2.8 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/dist/index.cjs +795 -32
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +36 -1
- package/dist/index.d.ts +36 -1
- package/dist/index.js +794 -31
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import algosdk2, { AtomicTransactionComposer, getApplicationAddress, modelsv2 } from 'algosdk';
|
|
2
|
-
import * as
|
|
2
|
+
import * as algokit4 from '@algorandfoundation/algokit-utils';
|
|
3
3
|
import { Decimal } from 'decimal.js';
|
|
4
4
|
|
|
5
5
|
// src/modules/trading.ts
|
|
@@ -581,7 +581,7 @@ var MarketAppClient = class _MarketAppClient {
|
|
|
581
581
|
constructor(appDetails, algod) {
|
|
582
582
|
this.algod = algod;
|
|
583
583
|
this.sender = appDetails.sender;
|
|
584
|
-
this.appClient =
|
|
584
|
+
this.appClient = algokit4.getAppClient({
|
|
585
585
|
...appDetails,
|
|
586
586
|
app: APP_SPEC
|
|
587
587
|
}, algod);
|
|
@@ -979,7 +979,7 @@ var MarketAppClient = class _MarketAppClient {
|
|
|
979
979
|
return this;
|
|
980
980
|
},
|
|
981
981
|
addTransaction(txn, defaultSender) {
|
|
982
|
-
promiseChain = promiseChain.then(async () => atc.addTransaction(await
|
|
982
|
+
promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit4.getTransactionWithSigner(txn, defaultSender ?? client.sender)));
|
|
983
983
|
return this;
|
|
984
984
|
},
|
|
985
985
|
async atc() {
|
|
@@ -996,7 +996,7 @@ var MarketAppClient = class _MarketAppClient {
|
|
|
996
996
|
},
|
|
997
997
|
async execute(sendParams) {
|
|
998
998
|
await promiseChain;
|
|
999
|
-
const result = await
|
|
999
|
+
const result = await algokit4.sendAtomicTransactionComposer({ atc, sendParams }, client.algod);
|
|
1000
1000
|
return {
|
|
1001
1001
|
...result,
|
|
1002
1002
|
returns: result.returns?.map((val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val.returnValue) : val.returnValue)
|
|
@@ -1140,7 +1140,7 @@ var MatcherAppClient = class {
|
|
|
1140
1140
|
constructor(appDetails, algod) {
|
|
1141
1141
|
this.algod = algod;
|
|
1142
1142
|
this.sender = appDetails.sender;
|
|
1143
|
-
this.appClient =
|
|
1143
|
+
this.appClient = algokit4.getAppClient({
|
|
1144
1144
|
...appDetails,
|
|
1145
1145
|
app: APP_SPEC2
|
|
1146
1146
|
}, algod);
|
|
@@ -1242,7 +1242,7 @@ var MatcherAppClient = class {
|
|
|
1242
1242
|
return this;
|
|
1243
1243
|
},
|
|
1244
1244
|
addTransaction(txn, defaultSender) {
|
|
1245
|
-
promiseChain = promiseChain.then(async () => atc.addTransaction(await
|
|
1245
|
+
promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit4.getTransactionWithSigner(txn, defaultSender ?? client.sender)));
|
|
1246
1246
|
return this;
|
|
1247
1247
|
},
|
|
1248
1248
|
async atc() {
|
|
@@ -1259,7 +1259,693 @@ var MatcherAppClient = class {
|
|
|
1259
1259
|
},
|
|
1260
1260
|
async execute(sendParams) {
|
|
1261
1261
|
await promiseChain;
|
|
1262
|
-
const result = await
|
|
1262
|
+
const result = await algokit4.sendAtomicTransactionComposer({ atc, sendParams }, client.algod);
|
|
1263
|
+
return {
|
|
1264
|
+
...result,
|
|
1265
|
+
returns: result.returns?.map((val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val.returnValue) : val.returnValue)
|
|
1266
|
+
};
|
|
1267
|
+
}
|
|
1268
|
+
};
|
|
1269
|
+
}
|
|
1270
|
+
};
|
|
1271
|
+
var APP_SPEC3 = {
|
|
1272
|
+
"hints": {
|
|
1273
|
+
"on_create()uint8": {
|
|
1274
|
+
"call_config": {
|
|
1275
|
+
"no_op": "CREATE"
|
|
1276
|
+
}
|
|
1277
|
+
},
|
|
1278
|
+
"setup(string,string,string,string,string)uint8": {
|
|
1279
|
+
"call_config": {
|
|
1280
|
+
"no_op": "CALL"
|
|
1281
|
+
}
|
|
1282
|
+
},
|
|
1283
|
+
"match_maker(application,uint64)uint8": {
|
|
1284
|
+
"call_config": {
|
|
1285
|
+
"no_op": "CALL"
|
|
1286
|
+
}
|
|
1287
|
+
},
|
|
1288
|
+
"amend_order(uint64,uint64,uint64)uint8": {
|
|
1289
|
+
"call_config": {
|
|
1290
|
+
"no_op": "CALL"
|
|
1291
|
+
}
|
|
1292
|
+
},
|
|
1293
|
+
"match_taker(application)uint64": {
|
|
1294
|
+
"call_config": {
|
|
1295
|
+
"no_op": "CALL"
|
|
1296
|
+
}
|
|
1297
|
+
},
|
|
1298
|
+
"delete()uint8": {
|
|
1299
|
+
"call_config": {
|
|
1300
|
+
"delete_application": "CALL"
|
|
1301
|
+
}
|
|
1302
|
+
},
|
|
1303
|
+
"on_update()uint64": {
|
|
1304
|
+
"call_config": {
|
|
1305
|
+
"update_application": "CALL"
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
},
|
|
1309
|
+
"source": {
|
|
1310
|
+
"approval": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMSAxMDAwMDAwIDQgMjU2IDEwMDAwMDAwMDAwMDAwMDAwMDAKYnl0ZWNibG9jayAweDZkNjE3MjZiNjU3NDVmNjE3MDcwNWY2OTY0IDB4NzA2ZjczNjk3NDY5NmY2ZSAweDcwNzI2OTYzNjUgMHg3MzY5NjQ2NSAweDczNmM2OTcwNzA2MTY3NjUgMHg2Zjc3NmU2NTcyIDB4NzE3NTYxNmU3NDY5NzQ3OSAweDY2NjU2NTVmNzQ2OTZkNjU3MjVmNzM3NDYxNzI3NCAweDcxNzU2MTZlNzQ2OTc0Nzk1ZjY2Njk2YzZjNjU2NCAweDYzNmY2YzZjNjE3NDY1NzI2MTZjNWY2MTczNzM2NTc0NWY2OTY0IDB4MTUxZjdjNzUgMHg3OTY1NzM1ZjYxNzM3MzY1NzQ1ZjY5NjQgMHg2ZTZmNWY2MTczNzM2NTc0NWY2OTY0IDB4NjY2NTY1NWY2MjYxNzM2NTVmNzA2NTcyNjM2NTZlNzQgMHgwMCAweDYxNzM3MzY1NzQ1ZjZjNjk3Mzc0NjU2NCAweDY2NjU2NTVmNjE2NDY0NzI2NTczNzMgMHg5NTRlN2Q3MiAweDMyY2UyODFlIDB4YzkxZTg4ZjUgMHhkYjkyMmZjMiAweCAweGJhMWRlZWY1CnR4biBOdW1BcHBBcmdzCmludGNfMCAvLyAwCj09CmJueiBtYWluX2wxNgp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDQzZGI2MmExIC8vICJvbl9jcmVhdGUoKXVpbnQ4Igo9PQpibnogbWFpbl9sMTUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApieXRlYyAxNyAvLyAic2V0dXAoc3RyaW5nLHN0cmluZyxzdHJpbmcsc3RyaW5nLHN0cmluZyl1aW50OCIKPT0KYm56IG1haW5fbDE0CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKYnl0ZWMgMTggLy8gIm1hdGNoX21ha2VyKGFwcGxpY2F0aW9uLHVpbnQ2NCl1aW50OCIKPT0KYm56IG1haW5fbDEzCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKYnl0ZWMgMTkgLy8gImFtZW5kX29yZGVyKHVpbnQ2NCx1aW50NjQsdWludDY0KXVpbnQ4Igo9PQpibnogbWFpbl9sMTIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApieXRlYyAyMCAvLyAibWF0Y2hfdGFrZXIoYXBwbGljYXRpb24pdWludDY0Igo9PQpibnogbWFpbl9sMTEKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgxMTllM2M0YiAvLyAiZGVsZXRlKCl1aW50OCIKPT0KYm56IG1haW5fbDEwCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4MjRjM2QyMzQgLy8gIm9uX3VwZGF0ZSgpdWludDY0Igo9PQpibnogbWFpbl9sOQplcnIKbWFpbl9sOToKdHhuIE9uQ29tcGxldGlvbgppbnRjXzMgLy8gVXBkYXRlQXBwbGljYXRpb24KPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgb251cGRhdGVjYXN0ZXJfMzMKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDEwOgp0eG4gT25Db21wbGV0aW9uCnB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBkZWxldGVjYXN0ZXJfMzIKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDExOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIG1hdGNodGFrZXJjYXN0ZXJfMzEKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDEyOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGFtZW5kb3JkZXJjYXN0ZXJfMzAKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDEzOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIG1hdGNobWFrZXJjYXN0ZXJfMjkKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDE0Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIHNldHVwY2FzdGVyXzI4CmludGNfMSAvLyAxCnJldHVybgptYWluX2wxNToKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAo9PQomJgphc3NlcnQKY2FsbHN1YiBvbmNyZWF0ZWNhc3Rlcl8yNwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTY6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KYm56IG1haW5fbDE4CmVycgptYWluX2wxODoKdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKPT0KYXNzZXJ0CmNhbGxzdWIgY3JlYXRlXzgKaW50Y18xIC8vIDEKcmV0dXJuCgovLyBkaXZfcm91bmQKZGl2cm91bmRfMDoKcHJvdG8gMiAxCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTEKLwpzdG9yZSA5CmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTEKJQpwdXNoaW50IDUwMCAvLyA1MDAKPgpibnogZGl2cm91bmRfMF9sMgpsb2FkIDkKcmV0c3ViCmRpdnJvdW5kXzBfbDI6CmxvYWQgOQppbnRjXzEgLy8gMQorCnJldHN1YgoKLy8gZGl2X2NlaWxfYnl0ZXMKZGl2Y2VpbGJ5dGVzXzE6CnByb3RvIDIgMQpmcmFtZV9kaWcgLTIKZnJhbWVfZGlnIC0xCmIvCnN0b3JlIDE3CmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTEKYiUKbGVuCmludGNfMCAvLyAwCj4KYm56IGRpdmNlaWxieXRlc18xX2wyCmxvYWQgMTcKcmV0c3ViCmRpdmNlaWxieXRlc18xX2wyOgpsb2FkIDE3CmludGNfMSAvLyAxCml0b2IKYisKcmV0c3ViCgovLyBjYWxjdWxhdGVfZmVlCmNhbGN1bGF0ZWZlZV8yOgpwcm90byAzIDEKZnJhbWVfZGlnIC0zCml0b2IKc3RvcmUgMgpmcmFtZV9kaWcgLTIKaXRvYgpzdG9yZSAzCmludGNfMiAvLyAxMDAwMDAwCmZyYW1lX2RpZyAtMgotCml0b2IKc3RvcmUgNApsb2FkIDIKbG9hZCAzCmIqCnN0b3JlIDIKbG9hZCAyCmxvYWQgNApiKgpzdG9yZSAyCmxvYWQgMgpmcmFtZV9kaWcgLTEKaXRvYgpiKgpzdG9yZSAyCmxvYWQgMgppbnRjIDUgLy8gMTAwMDAwMDAwMDAwMDAwMDAwMAppdG9iCmIvCmJ0b2kKcmV0c3ViCgovLyBjYWxjdWxhdGVfZmVlX2NvbW1pdApjYWxjdWxhdGVmZWVjb21taXRfMzoKcHJvdG8gMyAxCmZyYW1lX2RpZyAtMwppdG9iCnN0b3JlIDE0CmZyYW1lX2RpZyAtMgppdG9iCnN0b3JlIDE1CmludGNfMiAvLyAxMDAwMDAwCmZyYW1lX2RpZyAtMgotCml0b2IKc3RvcmUgMTYKbG9hZCAxNApsb2FkIDE1CmIqCnN0b3JlIDE0CmxvYWQgMTQKbG9hZCAxNgpiKgpzdG9yZSAxNApsb2FkIDE0CmZyYW1lX2RpZyAtMQppdG9iCmIqCnN0b3JlIDE0CmxvYWQgMTQKaW50YyA1IC8vIDEwMDAwMDAwMDAwMDAwMDAwMDAKaXRvYgpjYWxsc3ViIGRpdmNlaWxieXRlc18xCmJ0b2kKcmV0c3ViCgovLyBnbG9iYWxfbXVzdF9nZXQKZ2xvYmFsbXVzdGdldF80Ogpwcm90byAyIDEKZnJhbWVfZGlnIC0yCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX2dldF9leApzdG9yZSAxCnN0b3JlIDAKbG9hZCAxCmFzc2VydApsb2FkIDAKcmV0c3ViCgovLyBnZXRfYXBwX2FkZHIKZ2V0YXBwYWRkcl81Ogpwcm90byAxIDEKZnJhbWVfZGlnIC0xCmFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKc3RvcmUgNgpzdG9yZSA1CmxvYWQgNgphc3NlcnQKbG9hZCA1CnJldHN1YgoKLy8gc2VuZF9hc3NldApzZW5kYXNzZXRfNjoKcHJvdG8gNCAwCml0eG5fYmVnaW4KaW50Y18zIC8vIGF4ZmVyCml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC00Cml0eG5fZmllbGQgU2VuZGVyCmZyYW1lX2RpZyAtMwppdHhuX2ZpZWxkIEFzc2V0QW1vdW50CmZyYW1lX2RpZyAtMgppdHhuX2ZpZWxkIFhmZXJBc3NldApmcmFtZV9kaWcgLTEKaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCml0eG5fc3VibWl0CnJldHN1YgoKLy8gZ2V0X2Z1bmRzX3RvX3RyYWRlcgpnZXRmdW5kc3RvdHJhZGVyXzc6CnByb3RvIDQgMApmcmFtZV9kaWcgLTQKZnJhbWVfZGlnIC0yCmFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQpzdG9yZSA4CnN0b3JlIDcKbG9hZCA4CmJueiBnZXRmdW5kc3RvdHJhZGVyXzdfbDIKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTMKY2FsbHN1YiBzZW5kYXNzZXRfNgpiIGdldGZ1bmRzdG90cmFkZXJfN19sMwpnZXRmdW5kc3RvdHJhZGVyXzdfbDI6Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmZyYW1lX2RpZyAtMQpmcmFtZV9kaWcgLTIKZnJhbWVfZGlnIC00CmNhbGxzdWIgc2VuZGFzc2V0XzYKZ2V0ZnVuZHN0b3RyYWRlcl83X2wzOgpyZXRzdWIKCi8vIGNyZWF0ZQpjcmVhdGVfODoKcHJvdG8gMCAwCmJ5dGVjIDE1IC8vICJhc3NldF9saXN0ZWQiCmludGNfMCAvLyAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDcgLy8gImZlZV90aW1lcl9zdGFydCIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNSAvLyAib3duZXIiCmJ5dGVjIDIxIC8vICIiCmFwcF9nbG9iYWxfcHV0CmJ5dGVjXzEgLy8gInBvc2l0aW9uIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlY18yIC8vICJwcmljZSIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNiAvLyAicXVhbnRpdHkiCmludGNfMCAvLyAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDggLy8gInF1YW50aXR5X2ZpbGxlZCIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMyAvLyAic2lkZSIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNCAvLyAic2xpcHBhZ2UiCmludGNfMCAvLyAwCmFwcF9nbG9iYWxfcHV0CnJldHN1YgoKLy8gb25fY3JlYXRlCm9uY3JlYXRlXzk6CnByb3RvIDAgMQppbnRjXzAgLy8gMAppbnRjXzEgLy8gMQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKaW50YyA0IC8vIDI1Ngo8CmFzc2VydApyZXRzdWIKCi8vIHNldHVwCnNldHVwXzEwOgpwcm90byA1IDEKaW50Y18wIC8vIDAKdHhuIFNlbmRlcgpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKPT0KLy8gdW5hdXRob3JpemVkCmFzc2VydAp0eG4gVHlwZUVudW0KcHVzaGludCA2IC8vIGFwcGwKPT0KYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKYnl0ZWMgMTcgLy8gInNldHVwKHN0cmluZyxzdHJpbmcsc3RyaW5nLHN0cmluZyxzdHJpbmcpdWludDgiCj09CmFzc2VydApmcmFtZV9kaWcgLTUKZXh0cmFjdCAyIDAKYnRvaQppbnRjXzAgLy8gMAo9PQpmcmFtZV9kaWcgLTUKZXh0cmFjdCAyIDAKYnRvaQppbnRjXzEgLy8gMQo9PQp8fAphc3NlcnQKZnJhbWVfZGlnIC0zCmV4dHJhY3QgMiAwCmJ0b2kKaW50Y18wIC8vIDAKPT0KZnJhbWVfZGlnIC0zCmV4dHJhY3QgMiAwCmJ0b2kKaW50Y18xIC8vIDEKPT0KfHwKYXNzZXJ0CmZyYW1lX2RpZyAtNApleHRyYWN0IDIgMApidG9pCmludGNfMCAvLyAwCj4KYXNzZXJ0CmZyYW1lX2RpZyAtNApleHRyYWN0IDIgMApidG9pCmludGNfMiAvLyAxMDAwMDAwCjwKYXNzZXJ0CmZyYW1lX2RpZyAtMgpleHRyYWN0IDIgMApidG9pCmludGNfMCAvLyAwCj4KYXNzZXJ0CmJ5dGVjIDE1IC8vICJhc3NldF9saXN0ZWQiCmludGNfMCAvLyAwCnR4bmFzIEFzc2V0cwphcHBfZ2xvYmFsX3B1dApieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgpnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRAphcHBfZ2xvYmFsX3B1dApieXRlY18xIC8vICJwb3NpdGlvbiIKZnJhbWVfZGlnIC01CmV4dHJhY3QgMiAwCmJ0b2kKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMyAvLyAic2lkZSIKZnJhbWVfZGlnIC0zCmV4dHJhY3QgMiAwCmJ0b2kKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNiAvLyAicXVhbnRpdHkiCmZyYW1lX2RpZyAtMgpleHRyYWN0IDIgMApidG9pCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDggLy8gInF1YW50aXR5X2ZpbGxlZCIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMiAvLyAicHJpY2UiCmZyYW1lX2RpZyAtNApleHRyYWN0IDIgMApidG9pCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDUgLy8gIm93bmVyIgppbnRjXzEgLy8gMQp0eG5hcyBBY2NvdW50cwphcHBfZ2xvYmFsX3B1dApieXRlYyA0IC8vICJzbGlwcGFnZSIKZnJhbWVfZGlnIC0xCmV4dHJhY3QgMiAwCmJ0b2kKYXBwX2dsb2JhbF9wdXQKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKaW50Y18wIC8vIDAKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgOSAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKY2FsbHN1YiBzZW5kYXNzZXRfNgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwppbnRjXzAgLy8gMApieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxMSAvLyAieWVzX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpjYWxsc3ViIHNlbmRhc3NldF82Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmludGNfMCAvLyAwCmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDEyIC8vICJub19hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKY2FsbHN1YiBzZW5kYXNzZXRfNgpieXRlYyA3IC8vICJmZWVfdGltZXJfc3RhcnQiCmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKYXBwX2dsb2JhbF9wdXQKaW50Y18xIC8vIDEKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmludGMgNCAvLyAyNTYKPAphc3NlcnQKcmV0c3ViCgovLyB2YWxpZGF0ZV9tYXRjaF9ncm91cAp2YWxpZGF0ZW1hdGNoZ3JvdXBfMTE6CnByb3RvIDEgMAp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQorCmd0eG5zIFR5cGVFbnVtCnB1c2hpbnQgNiAvLyBhcHBsCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQorCmd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMApieXRlYyAyMCAvLyAibWF0Y2hfdGFrZXIoYXBwbGljYXRpb24pdWludDY0Igo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKKwpndHhucyBBcHBsaWNhdGlvbklECmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CnB1c2hpbnQgMiAvLyAyCisKZ3R4bnMgVHlwZUVudW0KcHVzaGludCA2IC8vIGFwcGwKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CnB1c2hpbnQgMiAvLyAyCisKZ3R4bnNhIEFwcGxpY2F0aW9uQXJncyAwCmJ5dGVjIDIyIC8vICJwcm9jZXNzX3BvdGVudGlhbF9tYXRjaChhcHBsaWNhdGlvbixhcHBsaWNhdGlvbil1aW50OCIKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CnB1c2hpbnQgMiAvLyAyCisKZ3R4bnMgQXBwbGljYXRpb25JRApieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldAo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKKwpndHhucyBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CnB1c2hpbnQgMiAvLyAyCisKZ3R4bnMgT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CmFzc2VydApyZXRzdWIKCi8vIGhhbmRsZV9mZWVfdHJhbnNmZXIKaGFuZGxlZmVldHJhbnNmZXJfMTI6CnByb3RvIDUgMApmcmFtZV9kaWcgLTUKZnJhbWVfZGlnIC00CmZyYW1lX2RpZyAtMwpmcmFtZV9kaWcgLTIKY2FsbHN1YiBjYWxjdWxhdGVmZWVfMgpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyA5IC8vICJjb2xsYXRlcmFsX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApmcmFtZV9kaWcgLTEKY2FsbHN1YiBzZW5kYXNzZXRfNgpyZXRzdWIKCi8vIGhhbmRsZV9iaWRfYXNrX21ha2VyX2JpZApoYW5kbGViaWRhc2ttYWtlcmJpZF8xMzoKcHJvdG8gMiAwCmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTIKYnl0ZWNfMiAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmZyYW1lX2RpZyAtMgpieXRlYyA0IC8vICJzbGlwcGFnZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKLQo+PQphc3NlcnQKZnJhbWVfZGlnIC0yCmJ5dGVjIDUgLy8gIm93bmVyIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApmcmFtZV9kaWcgLTIKY2FsbHN1YiBnZXRhcHBhZGRyXzUKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgOSAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKZnJhbWVfZGlnIC0xCmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldAoqCmludGNfMiAvLyAxMDAwMDAwCi8KZnJhbWVfZGlnIC0xCmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxMyAvLyAiZmVlX2Jhc2VfcGVyY2VudCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKY2FsbHN1YiBjYWxjdWxhdGVmZWVfMgotCmNhbGxzdWIgZ2V0ZnVuZHN0b3RyYWRlcl83Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmZyYW1lX2RpZyAtMQpieXRlY18yIC8vICJwcmljZSIKYXBwX2dsb2JhbF9nZXQKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgMTMgLy8gImZlZV9iYXNlX3BlcmNlbnQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDE2IC8vICJmZWVfYWRkcmVzcyIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKY2FsbHN1YiBoYW5kbGVmZWV0cmFuc2Zlcl8xMgpyZXRzdWIKCi8vIGhhbmRsZV9iaWRfYXNrX21ha2VyX2FzawpoYW5kbGViaWRhc2ttYWtlcmFza18xNDoKcHJvdG8gMiAwCmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTIKYnl0ZWNfMiAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmZyYW1lX2RpZyAtMgpieXRlYyA0IC8vICJzbGlwcGFnZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKKwo8PQphc3NlcnQKZnJhbWVfZGlnIC0yCmJ5dGVjIDUgLy8gIm93bmVyIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApmcmFtZV9kaWcgLTIKY2FsbHN1YiBnZXRhcHBhZGRyXzUKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJueiBoYW5kbGViaWRhc2ttYWtlcmFza18xNF9sMgpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxMSAvLyAieWVzX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApiIGhhbmRsZWJpZGFza21ha2VyYXNrXzE0X2wzCmhhbmRsZWJpZGFza21ha2VyYXNrXzE0X2wyOgpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxMiAvLyAibm9fYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmhhbmRsZWJpZGFza21ha2VyYXNrXzE0X2wzOgpmcmFtZV9kaWcgLTEKY2FsbHN1YiBnZXRmdW5kc3RvdHJhZGVyXzcKcmV0c3ViCgovLyBoYW5kbGVfbWFrZXJfYmlkX2JpZF9jb21wbGVtZW50CmhhbmRsZW1ha2VyYmlkYmlkY29tcGxlbWVudF8xNToKcHJvdG8gMiAwCmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTIKYnl0ZWNfMiAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CisKZnJhbWVfZGlnIC0yCmJ5dGVjIDQgLy8gInNsaXBwYWdlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNAorCmludGNfMiAvLyAxMDAwMDAwCj49CmFzc2VydApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpmcmFtZV9kaWcgLTEKYnl0ZWNfMiAvLyAicHJpY2UiCmFwcF9nbG9iYWxfZ2V0CioKaW50Y18yIC8vIDEwMDAwMDAKY2FsbHN1YiBkaXZyb3VuZF8wCmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDkgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmNhbGxzdWIgZ2V0YXBwYWRkcl81CmNhbGxzdWIgc2VuZGFzc2V0XzYKcmV0c3ViCgovLyBoYW5kbGVfbWFrZXJfYXNrX2Fza19jb21wbGVtZW50CmhhbmRsZW1ha2VyYXNrYXNrY29tcGxlbWVudF8xNjoKcHJvdG8gMiAwCmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTIKYnl0ZWNfMiAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmZyYW1lX2RpZyAtMgpieXRlYyA0IC8vICJzbGlwcGFnZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKLQorCmludGNfMiAvLyAxMDAwMDAwCjw9CmFzc2VydApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpmcmFtZV9kaWcgLTEKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJueiBoYW5kbGVtYWtlcmFza2Fza2NvbXBsZW1lbnRfMTZfbDIKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgMTEgLy8gInllc19hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKYiBoYW5kbGVtYWtlcmFza2Fza2NvbXBsZW1lbnRfMTZfbDMKaGFuZGxlbWFrZXJhc2thc2tjb21wbGVtZW50XzE2X2wyOgpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxMiAvLyAibm9fYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmhhbmRsZW1ha2VyYXNrYXNrY29tcGxlbWVudF8xNl9sMzoKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKY2FsbHN1YiBnZXRhcHBhZGRyXzUKY2FsbHN1YiBzZW5kYXNzZXRfNgpyZXRzdWIKCi8vIG1hdGNoX21ha2VyCm1hdGNobWFrZXJfMTc6CnByb3RvIDIgMQppbnRjXzAgLy8gMApmcmFtZV9kaWcgLTIKY2FsbHN1YiB2YWxpZGF0ZW1hdGNoZ3JvdXBfMTEKZnJhbWVfZGlnIC0xCmJ5dGVjIDYgLy8gInF1YW50aXR5IgphcHBfZ2xvYmFsX2dldApieXRlYyA4IC8vICJxdWFudGl0eV9maWxsZWQiCmFwcF9nbG9iYWxfZ2V0Ci0KPD0KYXNzZXJ0CmJ5dGVjIDQgLy8gInNsaXBwYWdlIgphcHBfZ2xvYmFsX2dldAppbnRjXzAgLy8gMAo+CmJueiBtYXRjaG1ha2VyXzE3X2wxMQptYXRjaG1ha2VyXzE3X2wxOgpieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKPgpibnogbWF0Y2htYWtlcl8xN19sMTAKbWF0Y2htYWtlcl8xN19sMjoKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18wIC8vIDAKPT0KJiYKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18wIC8vIDAKPT0KJiYKfHwKYm56IG1hdGNobWFrZXJfMTdfbDkKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18xIC8vIDEKPT0KJiYKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18xIC8vIDEKPT0KJiYKfHwKYm56IG1hdGNobWFrZXJfMTdfbDgKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18xIC8vIDEKPT0KJiYKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18xIC8vIDEKPT0KJiYKfHwKYm56IG1hdGNobWFrZXJfMTdfbDcKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18wIC8vIDAKPT0KJiYKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18wIC8vIDAKPT0KJiYKfHwKYnogbWF0Y2htYWtlcl8xN19sMTIKZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwpmcmFtZV9kaWcgLTEKY2FsbHN1YiBoYW5kbGVtYWtlcmFza2Fza2NvbXBsZW1lbnRfMTYKYiBtYXRjaG1ha2VyXzE3X2wxMgptYXRjaG1ha2VyXzE3X2w3OgpmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmZyYW1lX2RpZyAtMQpjYWxsc3ViIGhhbmRsZW1ha2VyYmlkYmlkY29tcGxlbWVudF8xNQpiIG1hdGNobWFrZXJfMTdfbDEyCm1hdGNobWFrZXJfMTdfbDg6CmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKZnJhbWVfZGlnIC0xCmNhbGxzdWIgaGFuZGxlYmlkYXNrbWFrZXJhc2tfMTQKYiBtYXRjaG1ha2VyXzE3X2wxMgptYXRjaG1ha2VyXzE3X2w5OgpmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmZyYW1lX2RpZyAtMQpjYWxsc3ViIGhhbmRsZWJpZGFza21ha2VyYmlkXzEzCmIgbWF0Y2htYWtlcl8xN19sMTIKbWF0Y2htYWtlcl8xN19sMTA6Cmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKYnl0ZWMgNyAvLyAiZmVlX3RpbWVyX3N0YXJ0IgphcHBfZ2xvYmFsX2dldApwdXNoaW50IDEyMCAvLyAxMjAKKwo8CmFzc2VydApiIG1hdGNobWFrZXJfMTdfbDIKbWF0Y2htYWtlcl8xN19sMTE6CmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWMgNCAvLyAic2xpcHBhZ2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj4KYnl0ZWMgNyAvLyAiZmVlX3RpbWVyX3N0YXJ0IgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDcgLy8gImZlZV90aW1lcl9zdGFydCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKPD0KJiYKYXNzZXJ0CmIgbWF0Y2htYWtlcl8xN19sMQptYXRjaG1ha2VyXzE3X2wxMjoKYnl0ZWMgOCAvLyAicXVhbnRpdHlfZmlsbGVkIgpieXRlYyA4IC8vICJxdWFudGl0eV9maWxsZWQiCmFwcF9nbG9iYWxfZ2V0CmZyYW1lX2RpZyAtMQorCmFwcF9nbG9iYWxfcHV0CmludGNfMSAvLyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMAppbnRjIDQgLy8gMjU2CjwKYXNzZXJ0CnJldHN1YgoKLy8gdmFsaWRhdGVfdGFrZXJfbWF0Y2hfZ3JvdXAKdmFsaWRhdGV0YWtlcm1hdGNoZ3JvdXBfMTg6CnByb3RvIDEgMAp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCmd0eG5zIFR5cGVFbnVtCnB1c2hpbnQgNiAvLyBhcHBsCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCmd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMApieXRlYyAxOCAvLyAibWF0Y2hfbWFrZXIoYXBwbGljYXRpb24sdWludDY0KXVpbnQ4Igo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpndHhucyBBcHBsaWNhdGlvbklECmZyYW1lX2RpZyAtMQo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKKwpndHhucyBUeXBlRW51bQpwdXNoaW50IDYgLy8gYXBwbAo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKKwpndHhuc2EgQXBwbGljYXRpb25BcmdzIDAKYnl0ZWMgMjIgLy8gInByb2Nlc3NfcG90ZW50aWFsX21hdGNoKGFwcGxpY2F0aW9uLGFwcGxpY2F0aW9uKXVpbnQ4Igo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKKwpndHhucyBBcHBsaWNhdGlvbklECmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0Cj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCmd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMgpidG9pCmJ5dGVjIDYgLy8gInF1YW50aXR5IgphcHBfZ2xvYmFsX2dldApieXRlYyA4IC8vICJxdWFudGl0eV9maWxsZWQiCmFwcF9nbG9iYWxfZ2V0Ci0KPD0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0KZ3R4bnMgT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQorCmd0eG5zIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQphc3NlcnQKcmV0c3ViCgovLyBoYW5kbGVfdGFrZXJfYmlkX2Fza19iaWQKaGFuZGxldGFrZXJiaWRhc2tiaWRfMTk6CnByb3RvIDIgMApieXRlY18yIC8vICJwcmljZSIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgNCAvLyAic2xpcHBhZ2UiCmFwcF9nbG9iYWxfZ2V0CisKZnJhbWVfZGlnIC0yCmJ5dGVjXzIgLy8gInByaWNlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNAo+PQphc3NlcnQKZnJhbWVfZGlnIC0yCmJ5dGVjIDUgLy8gIm93bmVyIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApmcmFtZV9kaWcgLTIKY2FsbHN1YiBnZXRhcHBhZGRyXzUKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgOSAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAtMgpieXRlY18yIC8vICJwcmljZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKKgppbnRjXzIgLy8gMTAwMDAwMAovCmNhbGxzdWIgZ2V0ZnVuZHN0b3RyYWRlcl83Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmZyYW1lX2RpZyAtMQpmcmFtZV9kaWcgLTIKYnl0ZWNfMiAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDEzIC8vICJmZWVfYmFzZV9wZXJjZW50IgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxNiAvLyAiZmVlX2FkZHJlc3MiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmNhbGxzdWIgaGFuZGxlZmVldHJhbnNmZXJfMTIKcmV0c3ViCgovLyBoYW5kbGVfdGFrZXJfYmlkX2Fza19hc2sKaGFuZGxldGFrZXJiaWRhc2thc2tfMjA6CnByb3RvIDIgMApieXRlY18yIC8vICJwcmljZSIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgNCAvLyAic2xpcHBhZ2UiCmFwcF9nbG9iYWxfZ2V0Ci0KZnJhbWVfZGlnIC0yCmJ5dGVjXzIgLy8gInByaWNlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNAo8PQphc3NlcnQKZnJhbWVfZGlnIC0yCmJ5dGVjIDUgLy8gIm93bmVyIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApmcmFtZV9kaWcgLTIKY2FsbHN1YiBnZXRhcHBhZGRyXzUKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJueiBoYW5kbGV0YWtlcmJpZGFza2Fza18yMF9sMgpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxMSAvLyAieWVzX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApiIGhhbmRsZXRha2VyYmlkYXNrYXNrXzIwX2wzCmhhbmRsZXRha2VyYmlkYXNrYXNrXzIwX2wyOgpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxMiAvLyAibm9fYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmhhbmRsZXRha2VyYmlkYXNrYXNrXzIwX2wzOgpmcmFtZV9kaWcgLTEKY2FsbHN1YiBnZXRmdW5kc3RvdHJhZGVyXzcKcmV0c3ViCgovLyBoYW5kbGVfdGFrZXJfYmlkX2JpZF9jb21wbGVtZW50CmhhbmRsZXRha2VyYmlkYmlkY29tcGxlbWVudF8yMToKcHJvdG8gMiAwCmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTIKYnl0ZWNfMiAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CisKYnl0ZWMgNCAvLyAic2xpcHBhZ2UiCmFwcF9nbG9iYWxfZ2V0CisKaW50Y18yIC8vIDEwMDAwMDAKPj0KYXNzZXJ0CmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKKwppbnRjXzIgLy8gMTAwMDAwMApmcmFtZV9kaWcgLTIKYnl0ZWNfMiAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80Ci0KPgpibnogaGFuZGxldGFrZXJiaWRiaWRjb21wbGVtZW50XzIxX2wyCmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKKwpzdG9yZSAxOApiIGhhbmRsZXRha2VyYmlkYmlkY29tcGxlbWVudF8yMV9sMwpoYW5kbGV0YWtlcmJpZGJpZGNvbXBsZW1lbnRfMjFfbDI6CmludGNfMiAvLyAxMDAwMDAwCmZyYW1lX2RpZyAtMgpieXRlY18yIC8vICJwcmljZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKLQpzdG9yZSAxOApoYW5kbGV0YWtlcmJpZGJpZGNvbXBsZW1lbnRfMjFfbDM6Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmZyYW1lX2RpZyAtMQpsb2FkIDE4CioKaW50Y18yIC8vIDEwMDAwMDAKY2FsbHN1YiBkaXZyb3VuZF8wCmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDkgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmNhbGxzdWIgZ2V0YXBwYWRkcl81CmNhbGxzdWIgc2VuZGFzc2V0XzYKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKZnJhbWVfZGlnIC0xCmxvYWQgMTgKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgMTMgLy8gImZlZV9iYXNlX3BlcmNlbnQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDE2IC8vICJmZWVfYWRkcmVzcyIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKY2FsbHN1YiBoYW5kbGVmZWV0cmFuc2Zlcl8xMgpyZXRzdWIKCi8vIGhhbmRsZV90YWtlcl9hc2tfYXNrX2NvbXBsZW1lbnQKaGFuZGxldGFrZXJhc2thc2tjb21wbGVtZW50XzIyOgpwcm90byAyIDAKYnl0ZWNfMiAvLyAicHJpY2UiCmFwcF9nbG9iYWxfZ2V0CmZyYW1lX2RpZyAtMgpieXRlY18yIC8vICJwcmljZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKKwpieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKLQppbnRjXzIgLy8gMTAwMDAwMAo8PQphc3NlcnQKYnl0ZWNfMiAvLyAicHJpY2UiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDQgLy8gInNsaXBwYWdlIgphcHBfZ2xvYmFsX2dldAotCmludGNfMiAvLyAxMDAwMDAwCmZyYW1lX2RpZyAtMgpieXRlY18yIC8vICJwcmljZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKLQo8CmJueiBoYW5kbGV0YWtlcmFza2Fza2NvbXBsZW1lbnRfMjJfbDUKaW50Y18yIC8vIDEwMDAwMDAKZnJhbWVfZGlnIC0yCmJ5dGVjXzIgLy8gInByaWNlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNAotCnN0b3JlIDE5CmhhbmRsZXRha2VyYXNrYXNrY29tcGxlbWVudF8yMl9sMjoKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKZnJhbWVfZGlnIC0xCmJ5dGVjXzEgLy8gInBvc2l0aW9uIgphcHBfZ2xvYmFsX2dldAppbnRjXzAgLy8gMAo9PQpibnogaGFuZGxldGFrZXJhc2thc2tjb21wbGVtZW50XzIyX2w0CmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDExIC8vICJ5ZXNfYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmIgaGFuZGxldGFrZXJhc2thc2tjb21wbGVtZW50XzIyX2w2CmhhbmRsZXRha2VyYXNrYXNrY29tcGxlbWVudF8yMl9sNDoKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgMTIgLy8gIm5vX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApiIGhhbmRsZXRha2VyYXNrYXNrY29tcGxlbWVudF8yMl9sNgpoYW5kbGV0YWtlcmFza2Fza2NvbXBsZW1lbnRfMjJfbDU6CmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKLQpzdG9yZSAxOQpiIGhhbmRsZXRha2VyYXNrYXNrY29tcGxlbWVudF8yMl9sMgpoYW5kbGV0YWtlcmFza2Fza2NvbXBsZW1lbnRfMjJfbDY6CmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmNhbGxzdWIgZ2V0YXBwYWRkcl81CmNhbGxzdWIgc2VuZGFzc2V0XzYKcmV0c3ViCgovLyBhbWVuZF9vcmRlcgphbWVuZG9yZGVyXzIzOgpwcm90byAzIDEKaW50Y18wIC8vIDAKdHhuIFR5cGVFbnVtCnB1c2hpbnQgNiAvLyBhcHBsCj09CmFzc2VydAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCmJ5dGVjIDE5IC8vICJhbWVuZF9vcmRlcih1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50OCIKPT0KYXNzZXJ0CnR4biBTZW5kZXIKYnl0ZWMgNSAvLyAib3duZXIiCmFwcF9nbG9iYWxfZ2V0Cj09CmFzc2VydApieXRlYyA4IC8vICJxdWFudGl0eV9maWxsZWQiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmFzc2VydApmcmFtZV9kaWcgLTMKaW50Y18wIC8vIDAKPgphc3NlcnQKZnJhbWVfZGlnIC0zCmludGNfMiAvLyAxMDAwMDAwCjwKYXNzZXJ0CmZyYW1lX2RpZyAtMgppbnRjXzAgLy8gMAo+CmFzc2VydApmcmFtZV9kaWcgLTMKYnl0ZWNfMiAvLyAicHJpY2UiCmFwcF9nbG9iYWxfZ2V0CiE9CmZyYW1lX2RpZyAtMgpieXRlYyA2IC8vICJxdWFudGl0eSIKYXBwX2dsb2JhbF9nZXQKIT0KfHwKZnJhbWVfZGlnIC0xCmJ5dGVjIDQgLy8gInNsaXBwYWdlIgphcHBfZ2xvYmFsX2dldAohPQp8fAphc3NlcnQKYnl0ZWNfMyAvLyAic2lkZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18xIC8vIDEKPT0KYm56IGFtZW5kb3JkZXJfMjNfbDUKYnl0ZWMgMTUgLy8gImFzc2V0X2xpc3RlZCIKYXBwX2dsb2JhbF9nZXQKc3RvcmUgMTMKZnJhbWVfZGlnIC0yCmJ5dGVjIDYgLy8gInF1YW50aXR5IgphcHBfZ2xvYmFsX2dldAo+CmJueiBhbWVuZG9yZGVyXzIzX2w0CmJ5dGVjIDYgLy8gInF1YW50aXR5IgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTIKLQpzdG9yZSAxMgpsb2FkIDEyCmludGNfMCAvLyAwCj4KYnogYW1lbmRvcmRlcl8yM19sOQpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpsb2FkIDEyCmxvYWQgMTMKdHhuIFNlbmRlcgpjYWxsc3ViIHNlbmRhc3NldF82CmIgYW1lbmRvcmRlcl8yM19sOQphbWVuZG9yZGVyXzIzX2w0OgpmcmFtZV9kaWcgLTIKYnl0ZWMgNiAvLyAicXVhbnRpdHkiCmFwcF9nbG9iYWxfZ2V0Ci0Kc3RvcmUgMTIKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDAKPgphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpndHhucyBUeXBlRW51bQppbnRjXzMgLy8gYXhmZXIKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0KZ3R4bnMgU2VuZGVyCnR4biBTZW5kZXIKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0KZ3R4bnMgQXNzZXRSZWNlaXZlcgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKbG9hZCAxMwo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpndHhucyBBc3NldEFtb3VudApsb2FkIDEyCj09CmFzc2VydApiIGFtZW5kb3JkZXJfMjNfbDkKYW1lbmRvcmRlcl8yM19sNToKYnl0ZWMgNiAvLyAicXVhbnRpdHkiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKKwoqCmludGNfMiAvLyAxMDAwMDAwCi8KYnl0ZWMgNiAvLyAicXVhbnRpdHkiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKKwpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxMyAvLyAiZmVlX2Jhc2VfcGVyY2VudCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKY2FsbHN1YiBjYWxjdWxhdGVmZWVjb21taXRfMworCnN0b3JlIDEwCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTMKZnJhbWVfZGlnIC0xCisKKgppbnRjXzIgLy8gMTAwMDAwMAovCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTMKZnJhbWVfZGlnIC0xCisKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgMTMgLy8gImZlZV9iYXNlX3BlcmNlbnQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmNhbGxzdWIgY2FsY3VsYXRlZmVlY29tbWl0XzMKKwpzdG9yZSAxMQpsb2FkIDExCmxvYWQgMTAKPgpibnogYW1lbmRvcmRlcl8yM19sOApsb2FkIDEwCmxvYWQgMTEKLQpzdG9yZSAxMgpsb2FkIDEyCmludGNfMCAvLyAwCj4KYnogYW1lbmRvcmRlcl8yM19sOQpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpsb2FkIDEyCmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDkgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CnR4biBTZW5kZXIKY2FsbHN1YiBzZW5kYXNzZXRfNgpiIGFtZW5kb3JkZXJfMjNfbDkKYW1lbmRvcmRlcl8yM19sODoKbG9hZCAxMQpsb2FkIDEwCi0Kc3RvcmUgMTIKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDAKPgphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpndHhucyBUeXBlRW51bQppbnRjXzMgLy8gYXhmZXIKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0KZ3R4bnMgU2VuZGVyCnR4biBTZW5kZXIKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0KZ3R4bnMgQXNzZXRSZWNlaXZlcgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgOSAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKbG9hZCAxMgo9PQphc3NlcnQKYW1lbmRvcmRlcl8yM19sOToKYnl0ZWNfMiAvLyAicHJpY2UiCmZyYW1lX2RpZyAtMwphcHBfZ2xvYmFsX3B1dApieXRlYyA2IC8vICJxdWFudGl0eSIKZnJhbWVfZGlnIC0yCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDQgLy8gInNsaXBwYWdlIgpmcmFtZV9kaWcgLTEKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNyAvLyAiZmVlX3RpbWVyX3N0YXJ0IgpnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCmFwcF9nbG9iYWxfcHV0CmludGNfMSAvLyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMAppbnRjIDQgLy8gMjU2CjwKYXNzZXJ0CnJldHN1YgoKLy8gbWF0Y2hfdGFrZXIKbWF0Y2h0YWtlcl8yNDoKcHJvdG8gMSAxCmludGNfMCAvLyAwCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKY2FsbHN1YiB2YWxpZGF0ZXRha2VybWF0Y2hncm91cF8xOApmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDQgLy8gInNsaXBwYWdlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNAppbnRjXzAgLy8gMAo+CmJueiBtYXRjaHRha2VyXzI0X2wxMQptYXRjaHRha2VyXzI0X2wxOgpieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKPgpibnogbWF0Y2h0YWtlcl8yNF9sMTAKbWF0Y2h0YWtlcl8yNF9sMjoKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18wIC8vIDAKPT0KJiYKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18wIC8vIDAKPT0KJiYKfHwKYm56IG1hdGNodGFrZXJfMjRfbDkKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18xIC8vIDEKPT0KJiYKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18xIC8vIDEKPT0KJiYKfHwKYm56IG1hdGNodGFrZXJfMjRfbDgKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18xIC8vIDEKPT0KJiYKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18xIC8vIDEKPT0KJiYKfHwKYm56IG1hdGNodGFrZXJfMjRfbDcKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18wIC8vIDAKPT0KJiYKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18wIC8vIDAKPT0KJiYKfHwKYnogbWF0Y2h0YWtlcl8yNF9sMTIKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCmd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMgpidG9pCmNhbGxzdWIgaGFuZGxldGFrZXJhc2thc2tjb21wbGVtZW50XzIyCmIgbWF0Y2h0YWtlcl8yNF9sMTIKbWF0Y2h0YWtlcl8yNF9sNzoKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCmd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMgpidG9pCmNhbGxzdWIgaGFuZGxldGFrZXJiaWRiaWRjb21wbGVtZW50XzIxCmIgbWF0Y2h0YWtlcl8yNF9sMTIKbWF0Y2h0YWtlcl8yNF9sODoKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCmd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMgpidG9pCmNhbGxzdWIgaGFuZGxldGFrZXJiaWRhc2thc2tfMjAKYiBtYXRjaHRha2VyXzI0X2wxMgptYXRjaHRha2VyXzI0X2w5OgpmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0KZ3R4bnNhIEFwcGxpY2F0aW9uQXJncyAyCmJ0b2kKY2FsbHN1YiBoYW5kbGV0YWtlcmJpZGFza2JpZF8xOQpiIG1hdGNodGFrZXJfMjRfbDEyCm1hdGNodGFrZXJfMjRfbDEwOgpnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCmJ5dGVjIDcgLy8gImZlZV90aW1lcl9zdGFydCIKYXBwX2dsb2JhbF9nZXQKcHVzaGludCAxMjAgLy8gMTIwCisKPAphc3NlcnQKYiBtYXRjaHRha2VyXzI0X2wyCm1hdGNodGFrZXJfMjRfbDExOgpieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKPgpmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDcgLy8gImZlZV90aW1lcl9zdGFydCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKYnl0ZWMgNyAvLyAiZmVlX3RpbWVyX3N0YXJ0IgphcHBfZ2xvYmFsX2dldAo8PQomJgphc3NlcnQKYiBtYXRjaHRha2VyXzI0X2wxCm1hdGNodGFrZXJfMjRfbDEyOgpieXRlYyA4IC8vICJxdWFudGl0eV9maWxsZWQiCmJ5dGVjIDggLy8gInF1YW50aXR5X2ZpbGxlZCIKYXBwX2dsb2JhbF9nZXQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpndHhuc2EgQXBwbGljYXRpb25BcmdzIDIKYnRvaQorCmFwcF9nbG9iYWxfcHV0CmludGNfMSAvLyAxCmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIGRlbGV0ZQpkZWxldGVfMjU6CnByb3RvIDAgMQppbnRjXzAgLy8gMAp0eG4gU2VuZGVyCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwo9PQp0eG4gU2VuZGVyCmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CnB1c2hieXRlcyAweDY1NzM2MzcyNmY3NzVmNjM2MTZlNjM2NTZjNWY2MTY0NjQ3MjY1NzM3MyAvLyAiZXNjcm93X2NhbmNlbF9hZGRyZXNzIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNAo9PQp8fAphc3NlcnQKaXR4bl9iZWdpbgppbnRjXzMgLy8gYXhmZXIKaXR4bl9maWVsZCBUeXBlRW51bQpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyA5IC8vICJjb2xsYXRlcmFsX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNAppdHhuX2ZpZWxkIFhmZXJBc3NldApieXRlYyA1IC8vICJvd25lciIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCmludGNfMCAvLyAwCml0eG5fZmllbGQgQXNzZXRBbW91bnQKYnl0ZWMgNSAvLyAib3duZXIiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQXNzZXRDbG9zZVRvCml0eG5fc3VibWl0Cml0eG5fYmVnaW4KaW50Y18zIC8vIGF4ZmVyCml0eG5fZmllbGQgVHlwZUVudW0KYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgMTEgLy8gInllc19hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaXR4bl9maWVsZCBYZmVyQXNzZXQKYnl0ZWMgNSAvLyAib3duZXIiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEFzc2V0QW1vdW50CmJ5dGVjIDUgLy8gIm93bmVyIgphcHBfZ2xvYmFsX2dldAppdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwppdHhuX3N1Ym1pdAppdHhuX2JlZ2luCmludGNfMyAvLyBheGZlcgppdHhuX2ZpZWxkIFR5cGVFbnVtCmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDEyIC8vICJub19hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaXR4bl9maWVsZCBYZmVyQXNzZXQKYnl0ZWMgNSAvLyAib3duZXIiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEFzc2V0QW1vdW50CmJ5dGVjIDUgLy8gIm93bmVyIgphcHBfZ2xvYmFsX2dldAppdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwppdHhuX3N1Ym1pdAppdHhuX2JlZ2luCmludGNfMSAvLyBwYXkKaXR4bl9maWVsZCBUeXBlRW51bQppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEFtb3VudApieXRlYyA1IC8vICJvd25lciIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBSZWNlaXZlcgppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQpieXRlYyA1IC8vICJvd25lciIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBDbG9zZVJlbWFpbmRlclRvCml0eG5fc3VibWl0CmludGNfMSAvLyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMAppbnRjIDQgLy8gMjU2CjwKYXNzZXJ0CnJldHN1YgoKLy8gb25fdXBkYXRlCm9udXBkYXRlXzI2Ogpwcm90byAwIDEKaW50Y18wIC8vIDAKdHhuIFNlbmRlcgpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApwdXNoYnl0ZXMgMHg2ZDYxNzI2YjY1NzQ1ZjY2NzI2OTY1NmU2NDVmNjE2NDY0NzIgLy8gIm1hcmtldF9mcmllbmRfYWRkciIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKPT0KZ2xvYmFsIEdyb3VwU2l6ZQppbnRjXzEgLy8gMQo9PQomJgphc3NlcnQKaW50Y18xIC8vIDEKZnJhbWVfYnVyeSAwCnJldHN1YgoKLy8gb25fY3JlYXRlX2Nhc3RlcgpvbmNyZWF0ZWNhc3Rlcl8yNzoKcHJvdG8gMCAwCmludGNfMCAvLyAwCmNhbGxzdWIgb25jcmVhdGVfOQpmcmFtZV9idXJ5IDAKYnl0ZWMgMTAgLy8gMHgxNTFmN2M3NQpieXRlYyAxNCAvLyAweDAwCmludGNfMCAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWIKCi8vIHNldHVwX2Nhc3RlcgpzZXR1cGNhc3Rlcl8yODoKcHJvdG8gMCAwCmludGNfMCAvLyAwCmJ5dGVjIDIxIC8vICIiCmR1cG4gNAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmZyYW1lX2J1cnkgMgp0eG5hIEFwcGxpY2F0aW9uQXJncyAzCmZyYW1lX2J1cnkgMwp0eG5hIEFwcGxpY2F0aW9uQXJncyA0CmZyYW1lX2J1cnkgNAp0eG5hIEFwcGxpY2F0aW9uQXJncyA1CmZyYW1lX2J1cnkgNQpmcmFtZV9kaWcgMQpmcmFtZV9kaWcgMgpmcmFtZV9kaWcgMwpmcmFtZV9kaWcgNApmcmFtZV9kaWcgNQpjYWxsc3ViIHNldHVwXzEwCmZyYW1lX2J1cnkgMApieXRlYyAxMCAvLyAweDE1MWY3Yzc1CmJ5dGVjIDE0IC8vIDB4MDAKaW50Y18wIC8vIDAKZnJhbWVfZGlnIDAKc2V0Ynl0ZQpjb25jYXQKbG9nCnJldHN1YgoKLy8gbWF0Y2hfbWFrZXJfY2FzdGVyCm1hdGNobWFrZXJjYXN0ZXJfMjk6CnByb3RvIDAgMAppbnRjXzAgLy8gMApkdXBuIDIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQppbnRjXzAgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmJ0b2kKZnJhbWVfYnVyeSAyCmZyYW1lX2RpZyAxCmZyYW1lX2RpZyAyCmNhbGxzdWIgbWF0Y2htYWtlcl8xNwpmcmFtZV9idXJ5IDAKYnl0ZWMgMTAgLy8gMHgxNTFmN2M3NQpieXRlYyAxNCAvLyAweDAwCmludGNfMCAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWIKCi8vIGFtZW5kX29yZGVyX2Nhc3RlcgphbWVuZG9yZGVyY2FzdGVyXzMwOgpwcm90byAwIDAKaW50Y18wIC8vIDAKZHVwbiAzCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpmcmFtZV9idXJ5IDEKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgpidG9pCmZyYW1lX2J1cnkgMgp0eG5hIEFwcGxpY2F0aW9uQXJncyAzCmJ0b2kKZnJhbWVfYnVyeSAzCmZyYW1lX2RpZyAxCmZyYW1lX2RpZyAyCmZyYW1lX2RpZyAzCmNhbGxzdWIgYW1lbmRvcmRlcl8yMwpmcmFtZV9idXJ5IDAKYnl0ZWMgMTAgLy8gMHgxNTFmN2M3NQpieXRlYyAxNCAvLyAweDAwCmludGNfMCAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWIKCi8vIG1hdGNoX3Rha2VyX2Nhc3RlcgptYXRjaHRha2VyY2FzdGVyXzMxOgpwcm90byAwIDAKaW50Y18wIC8vIDAKZHVwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKY2FsbHN1YiBtYXRjaHRha2VyXzI0CmZyYW1lX2J1cnkgMApieXRlYyAxMCAvLyAweDE1MWY3Yzc1CmZyYW1lX2RpZyAwCml0b2IKY29uY2F0CmxvZwpyZXRzdWIKCi8vIGRlbGV0ZV9jYXN0ZXIKZGVsZXRlY2FzdGVyXzMyOgpwcm90byAwIDAKaW50Y18wIC8vIDAKY2FsbHN1YiBkZWxldGVfMjUKZnJhbWVfYnVyeSAwCmJ5dGVjIDEwIC8vIDB4MTUxZjdjNzUKYnl0ZWMgMTQgLy8gMHgwMAppbnRjXzAgLy8gMApmcmFtZV9kaWcgMApzZXRieXRlCmNvbmNhdApsb2cKcmV0c3ViCgovLyBvbl91cGRhdGVfY2FzdGVyCm9udXBkYXRlY2FzdGVyXzMzOgpwcm90byAwIDAKaW50Y18wIC8vIDAKY2FsbHN1YiBvbnVwZGF0ZV8yNgpmcmFtZV9idXJ5IDAKYnl0ZWMgMTAgLy8gMHgxNTFmN2M3NQpmcmFtZV9kaWcgMAppdG9iCmNvbmNhdApsb2cKcmV0c3Vi",
|
|
1311
|
+
"clear": "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu"
|
|
1312
|
+
},
|
|
1313
|
+
"state": {
|
|
1314
|
+
"global": {
|
|
1315
|
+
"num_byte_slices": 1,
|
|
1316
|
+
"num_uints": 9
|
|
1317
|
+
},
|
|
1318
|
+
"local": {
|
|
1319
|
+
"num_byte_slices": 0,
|
|
1320
|
+
"num_uints": 0
|
|
1321
|
+
}
|
|
1322
|
+
},
|
|
1323
|
+
"schema": {
|
|
1324
|
+
"global": {
|
|
1325
|
+
"declared": {
|
|
1326
|
+
"asset_listed": {
|
|
1327
|
+
"type": "uint64",
|
|
1328
|
+
"key": "asset_listed",
|
|
1329
|
+
"descr": "The asset id of the escrow"
|
|
1330
|
+
},
|
|
1331
|
+
"fee_timer_start": {
|
|
1332
|
+
"type": "uint64",
|
|
1333
|
+
"key": "fee_timer_start",
|
|
1334
|
+
"descr": "The timestamp of the fee timer start"
|
|
1335
|
+
},
|
|
1336
|
+
"market_app_id": {
|
|
1337
|
+
"type": "uint64",
|
|
1338
|
+
"key": "market_app_id",
|
|
1339
|
+
"descr": "The id of the market app"
|
|
1340
|
+
},
|
|
1341
|
+
"owner": {
|
|
1342
|
+
"type": "bytes",
|
|
1343
|
+
"key": "owner",
|
|
1344
|
+
"descr": "The owner of the escrow"
|
|
1345
|
+
},
|
|
1346
|
+
"position": {
|
|
1347
|
+
"type": "uint64",
|
|
1348
|
+
"key": "position",
|
|
1349
|
+
"descr": "The position of the escrow: yes/no"
|
|
1350
|
+
},
|
|
1351
|
+
"price": {
|
|
1352
|
+
"type": "uint64",
|
|
1353
|
+
"key": "price",
|
|
1354
|
+
"descr": "The price of the escrow"
|
|
1355
|
+
},
|
|
1356
|
+
"quantity": {
|
|
1357
|
+
"type": "uint64",
|
|
1358
|
+
"key": "quantity",
|
|
1359
|
+
"descr": "The quantity of the escrow"
|
|
1360
|
+
},
|
|
1361
|
+
"quantity_filled": {
|
|
1362
|
+
"type": "uint64",
|
|
1363
|
+
"key": "quantity_filled",
|
|
1364
|
+
"descr": "The quantity of the escrow filled"
|
|
1365
|
+
},
|
|
1366
|
+
"side": {
|
|
1367
|
+
"type": "uint64",
|
|
1368
|
+
"key": "side",
|
|
1369
|
+
"descr": "The side of the escrow: buy/sell"
|
|
1370
|
+
},
|
|
1371
|
+
"slippage": {
|
|
1372
|
+
"type": "uint64",
|
|
1373
|
+
"key": "slippage",
|
|
1374
|
+
"descr": "The slippage of the escrow. 0 if limit."
|
|
1375
|
+
}
|
|
1376
|
+
},
|
|
1377
|
+
"reserved": {}
|
|
1378
|
+
},
|
|
1379
|
+
"local": {
|
|
1380
|
+
"declared": {},
|
|
1381
|
+
"reserved": {}
|
|
1382
|
+
}
|
|
1383
|
+
},
|
|
1384
|
+
"contract": {
|
|
1385
|
+
"name": "escrow_app",
|
|
1386
|
+
"methods": [
|
|
1387
|
+
{
|
|
1388
|
+
"name": "on_create",
|
|
1389
|
+
"args": [],
|
|
1390
|
+
"returns": {
|
|
1391
|
+
"type": "uint8"
|
|
1392
|
+
}
|
|
1393
|
+
},
|
|
1394
|
+
{
|
|
1395
|
+
"name": "setup",
|
|
1396
|
+
"args": [
|
|
1397
|
+
{
|
|
1398
|
+
"type": "string",
|
|
1399
|
+
"name": "position"
|
|
1400
|
+
},
|
|
1401
|
+
{
|
|
1402
|
+
"type": "string",
|
|
1403
|
+
"name": "price"
|
|
1404
|
+
},
|
|
1405
|
+
{
|
|
1406
|
+
"type": "string",
|
|
1407
|
+
"name": "side"
|
|
1408
|
+
},
|
|
1409
|
+
{
|
|
1410
|
+
"type": "string",
|
|
1411
|
+
"name": "quantity"
|
|
1412
|
+
},
|
|
1413
|
+
{
|
|
1414
|
+
"type": "string",
|
|
1415
|
+
"name": "slippage"
|
|
1416
|
+
}
|
|
1417
|
+
],
|
|
1418
|
+
"returns": {
|
|
1419
|
+
"type": "uint8"
|
|
1420
|
+
}
|
|
1421
|
+
},
|
|
1422
|
+
{
|
|
1423
|
+
"name": "match_maker",
|
|
1424
|
+
"args": [
|
|
1425
|
+
{
|
|
1426
|
+
"type": "application",
|
|
1427
|
+
"name": "taker"
|
|
1428
|
+
},
|
|
1429
|
+
{
|
|
1430
|
+
"type": "uint64",
|
|
1431
|
+
"name": "match_quantity"
|
|
1432
|
+
}
|
|
1433
|
+
],
|
|
1434
|
+
"returns": {
|
|
1435
|
+
"type": "uint8"
|
|
1436
|
+
}
|
|
1437
|
+
},
|
|
1438
|
+
{
|
|
1439
|
+
"name": "amend_order",
|
|
1440
|
+
"args": [
|
|
1441
|
+
{
|
|
1442
|
+
"type": "uint64",
|
|
1443
|
+
"name": "price"
|
|
1444
|
+
},
|
|
1445
|
+
{
|
|
1446
|
+
"type": "uint64",
|
|
1447
|
+
"name": "quantity"
|
|
1448
|
+
},
|
|
1449
|
+
{
|
|
1450
|
+
"type": "uint64",
|
|
1451
|
+
"name": "slippage"
|
|
1452
|
+
}
|
|
1453
|
+
],
|
|
1454
|
+
"returns": {
|
|
1455
|
+
"type": "uint8"
|
|
1456
|
+
}
|
|
1457
|
+
},
|
|
1458
|
+
{
|
|
1459
|
+
"name": "match_taker",
|
|
1460
|
+
"args": [
|
|
1461
|
+
{
|
|
1462
|
+
"type": "application",
|
|
1463
|
+
"name": "maker"
|
|
1464
|
+
}
|
|
1465
|
+
],
|
|
1466
|
+
"returns": {
|
|
1467
|
+
"type": "uint64"
|
|
1468
|
+
}
|
|
1469
|
+
},
|
|
1470
|
+
{
|
|
1471
|
+
"name": "delete",
|
|
1472
|
+
"args": [],
|
|
1473
|
+
"returns": {
|
|
1474
|
+
"type": "uint8"
|
|
1475
|
+
}
|
|
1476
|
+
},
|
|
1477
|
+
{
|
|
1478
|
+
"name": "on_update",
|
|
1479
|
+
"args": [],
|
|
1480
|
+
"returns": {
|
|
1481
|
+
"type": "uint64"
|
|
1482
|
+
}
|
|
1483
|
+
}
|
|
1484
|
+
],
|
|
1485
|
+
"networks": {}
|
|
1486
|
+
},
|
|
1487
|
+
"bare_call_config": {
|
|
1488
|
+
"no_op": "CREATE"
|
|
1489
|
+
}
|
|
1490
|
+
};
|
|
1491
|
+
var EscrowAppCallFactory = class {
|
|
1492
|
+
/**
|
|
1493
|
+
* Gets available create call factories
|
|
1494
|
+
*/
|
|
1495
|
+
static get create() {
|
|
1496
|
+
return {
|
|
1497
|
+
/**
|
|
1498
|
+
* Constructs a create call for the escrow_app smart contract using a bare call
|
|
1499
|
+
*
|
|
1500
|
+
* @param params Any parameters for the call
|
|
1501
|
+
* @returns A TypedCallParams object for the call
|
|
1502
|
+
*/
|
|
1503
|
+
bare(params = {}) {
|
|
1504
|
+
return {
|
|
1505
|
+
method: void 0,
|
|
1506
|
+
methodArgs: void 0,
|
|
1507
|
+
...params
|
|
1508
|
+
};
|
|
1509
|
+
},
|
|
1510
|
+
/**
|
|
1511
|
+
* Constructs a create call for the escrow_app smart contract using the on_create()uint8 ABI method
|
|
1512
|
+
*
|
|
1513
|
+
* @param args Any args for the contract call
|
|
1514
|
+
* @param params Any additional parameters for the call
|
|
1515
|
+
* @returns A TypedCallParams object for the call
|
|
1516
|
+
*/
|
|
1517
|
+
onCreate(args, params = {}) {
|
|
1518
|
+
return {
|
|
1519
|
+
method: "on_create()uint8",
|
|
1520
|
+
methodArgs: Array.isArray(args) ? args : [],
|
|
1521
|
+
...params
|
|
1522
|
+
};
|
|
1523
|
+
}
|
|
1524
|
+
};
|
|
1525
|
+
}
|
|
1526
|
+
/**
|
|
1527
|
+
* Gets available update call factories
|
|
1528
|
+
*/
|
|
1529
|
+
static get update() {
|
|
1530
|
+
return {
|
|
1531
|
+
/**
|
|
1532
|
+
* Constructs an update call for the escrow_app smart contract using the on_update()uint64 ABI method
|
|
1533
|
+
*
|
|
1534
|
+
* @param args Any args for the contract call
|
|
1535
|
+
* @param params Any additional parameters for the call
|
|
1536
|
+
* @returns A TypedCallParams object for the call
|
|
1537
|
+
*/
|
|
1538
|
+
onUpdate(args, params = {}) {
|
|
1539
|
+
return {
|
|
1540
|
+
method: "on_update()uint64",
|
|
1541
|
+
methodArgs: Array.isArray(args) ? args : [],
|
|
1542
|
+
...params
|
|
1543
|
+
};
|
|
1544
|
+
}
|
|
1545
|
+
};
|
|
1546
|
+
}
|
|
1547
|
+
/**
|
|
1548
|
+
* Gets available delete call factories
|
|
1549
|
+
*/
|
|
1550
|
+
static get delete() {
|
|
1551
|
+
return {
|
|
1552
|
+
/**
|
|
1553
|
+
* Constructs a delete call for the escrow_app smart contract using the delete()uint8 ABI method
|
|
1554
|
+
*
|
|
1555
|
+
* @param args Any args for the contract call
|
|
1556
|
+
* @param params Any additional parameters for the call
|
|
1557
|
+
* @returns A TypedCallParams object for the call
|
|
1558
|
+
*/
|
|
1559
|
+
delete(args, params = {}) {
|
|
1560
|
+
return {
|
|
1561
|
+
method: "delete()uint8",
|
|
1562
|
+
methodArgs: Array.isArray(args) ? args : [],
|
|
1563
|
+
...params
|
|
1564
|
+
};
|
|
1565
|
+
}
|
|
1566
|
+
};
|
|
1567
|
+
}
|
|
1568
|
+
/**
|
|
1569
|
+
* Constructs a no op call for the setup(string,string,string,string,string)uint8 ABI method
|
|
1570
|
+
*
|
|
1571
|
+
* @param args Any args for the contract call
|
|
1572
|
+
* @param params Any additional parameters for the call
|
|
1573
|
+
* @returns A TypedCallParams object for the call
|
|
1574
|
+
*/
|
|
1575
|
+
static setup(args, params) {
|
|
1576
|
+
return {
|
|
1577
|
+
method: "setup(string,string,string,string,string)uint8",
|
|
1578
|
+
methodArgs: Array.isArray(args) ? args : [args.position, args.price, args.side, args.quantity, args.slippage],
|
|
1579
|
+
...params
|
|
1580
|
+
};
|
|
1581
|
+
}
|
|
1582
|
+
/**
|
|
1583
|
+
* Constructs a no op call for the match_maker(application,uint64)uint8 ABI method
|
|
1584
|
+
*
|
|
1585
|
+
* @param args Any args for the contract call
|
|
1586
|
+
* @param params Any additional parameters for the call
|
|
1587
|
+
* @returns A TypedCallParams object for the call
|
|
1588
|
+
*/
|
|
1589
|
+
static matchMaker(args, params) {
|
|
1590
|
+
return {
|
|
1591
|
+
method: "match_maker(application,uint64)uint8",
|
|
1592
|
+
methodArgs: Array.isArray(args) ? args : [args.taker, args.matchQuantity],
|
|
1593
|
+
...params
|
|
1594
|
+
};
|
|
1595
|
+
}
|
|
1596
|
+
/**
|
|
1597
|
+
* Constructs a no op call for the amend_order(uint64,uint64,uint64)uint8 ABI method
|
|
1598
|
+
*
|
|
1599
|
+
* @param args Any args for the contract call
|
|
1600
|
+
* @param params Any additional parameters for the call
|
|
1601
|
+
* @returns A TypedCallParams object for the call
|
|
1602
|
+
*/
|
|
1603
|
+
static amendOrder(args, params) {
|
|
1604
|
+
return {
|
|
1605
|
+
method: "amend_order(uint64,uint64,uint64)uint8",
|
|
1606
|
+
methodArgs: Array.isArray(args) ? args : [args.price, args.quantity, args.slippage],
|
|
1607
|
+
...params
|
|
1608
|
+
};
|
|
1609
|
+
}
|
|
1610
|
+
/**
|
|
1611
|
+
* Constructs a no op call for the match_taker(application)uint64 ABI method
|
|
1612
|
+
*
|
|
1613
|
+
* @param args Any args for the contract call
|
|
1614
|
+
* @param params Any additional parameters for the call
|
|
1615
|
+
* @returns A TypedCallParams object for the call
|
|
1616
|
+
*/
|
|
1617
|
+
static matchTaker(args, params) {
|
|
1618
|
+
return {
|
|
1619
|
+
method: "match_taker(application)uint64",
|
|
1620
|
+
methodArgs: Array.isArray(args) ? args : [args.maker],
|
|
1621
|
+
...params
|
|
1622
|
+
};
|
|
1623
|
+
}
|
|
1624
|
+
};
|
|
1625
|
+
var EscrowAppClient = class _EscrowAppClient {
|
|
1626
|
+
/**
|
|
1627
|
+
* Creates a new instance of `EscrowAppClient`
|
|
1628
|
+
*
|
|
1629
|
+
* @param appDetails appDetails The details to identify the app to deploy
|
|
1630
|
+
* @param algod An algod client instance
|
|
1631
|
+
*/
|
|
1632
|
+
constructor(appDetails, algod) {
|
|
1633
|
+
this.algod = algod;
|
|
1634
|
+
this.sender = appDetails.sender;
|
|
1635
|
+
this.appClient = algokit4.getAppClient({
|
|
1636
|
+
...appDetails,
|
|
1637
|
+
app: APP_SPEC3
|
|
1638
|
+
}, algod);
|
|
1639
|
+
}
|
|
1640
|
+
/**
|
|
1641
|
+
* The underlying `ApplicationClient` for when you want to have more flexibility
|
|
1642
|
+
*/
|
|
1643
|
+
appClient;
|
|
1644
|
+
sender;
|
|
1645
|
+
/**
|
|
1646
|
+
* Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type
|
|
1647
|
+
*
|
|
1648
|
+
* @param result The AppCallTransactionResult to be mapped
|
|
1649
|
+
* @param returnValueFormatter An optional delegate to format the return value if required
|
|
1650
|
+
* @returns The smart contract response with an updated return value
|
|
1651
|
+
*/
|
|
1652
|
+
mapReturnValue(result, returnValueFormatter) {
|
|
1653
|
+
if (result.return?.decodeError) {
|
|
1654
|
+
throw result.return.decodeError;
|
|
1655
|
+
}
|
|
1656
|
+
const returnValue = result.return?.returnValue !== void 0 && returnValueFormatter !== void 0 ? returnValueFormatter(result.return.returnValue) : result.return?.returnValue;
|
|
1657
|
+
return { ...result, return: returnValue };
|
|
1658
|
+
}
|
|
1659
|
+
/**
|
|
1660
|
+
* Calls the ABI method with the matching signature using an onCompletion code of NO_OP
|
|
1661
|
+
*
|
|
1662
|
+
* @param typedCallParams An object containing the method signature, args, and any other relevant parameters
|
|
1663
|
+
* @param returnValueFormatter An optional delegate which when provided will be used to map non-undefined return values to the target type
|
|
1664
|
+
* @returns The result of the smart contract call
|
|
1665
|
+
*/
|
|
1666
|
+
async call(typedCallParams, returnValueFormatter) {
|
|
1667
|
+
return this.mapReturnValue(await this.appClient.call(typedCallParams), returnValueFormatter);
|
|
1668
|
+
}
|
|
1669
|
+
/**
|
|
1670
|
+
* Idempotently deploys the escrow_app smart contract.
|
|
1671
|
+
*
|
|
1672
|
+
* @param params The arguments for the contract calls and any additional parameters for the call
|
|
1673
|
+
* @returns The deployment result
|
|
1674
|
+
*/
|
|
1675
|
+
deploy(params = {}) {
|
|
1676
|
+
const createArgs = params.createCall?.(EscrowAppCallFactory.create);
|
|
1677
|
+
const updateArgs = params.updateCall?.(EscrowAppCallFactory.update);
|
|
1678
|
+
const deleteArgs = params.deleteCall?.(EscrowAppCallFactory.delete);
|
|
1679
|
+
return this.appClient.deploy({
|
|
1680
|
+
...params,
|
|
1681
|
+
updateArgs,
|
|
1682
|
+
deleteArgs,
|
|
1683
|
+
createArgs,
|
|
1684
|
+
createOnCompleteAction: createArgs?.onCompleteAction
|
|
1685
|
+
});
|
|
1686
|
+
}
|
|
1687
|
+
/**
|
|
1688
|
+
* Gets available create methods
|
|
1689
|
+
*/
|
|
1690
|
+
get create() {
|
|
1691
|
+
const $this = this;
|
|
1692
|
+
return {
|
|
1693
|
+
/**
|
|
1694
|
+
* Creates a new instance of the escrow_app smart contract using a bare call.
|
|
1695
|
+
*
|
|
1696
|
+
* @param args The arguments for the bare call
|
|
1697
|
+
* @returns The create result
|
|
1698
|
+
*/
|
|
1699
|
+
async bare(args = {}) {
|
|
1700
|
+
return $this.mapReturnValue(await $this.appClient.create(args));
|
|
1701
|
+
},
|
|
1702
|
+
/**
|
|
1703
|
+
* Creates a new instance of the escrow_app smart contract using the on_create()uint8 ABI method.
|
|
1704
|
+
*
|
|
1705
|
+
* @param args The arguments for the smart contract call
|
|
1706
|
+
* @param params Any additional parameters for the call
|
|
1707
|
+
* @returns The create result
|
|
1708
|
+
*/
|
|
1709
|
+
async onCreate(args, params = {}) {
|
|
1710
|
+
return $this.mapReturnValue(await $this.appClient.create(EscrowAppCallFactory.create.onCreate(args, params)));
|
|
1711
|
+
}
|
|
1712
|
+
};
|
|
1713
|
+
}
|
|
1714
|
+
/**
|
|
1715
|
+
* Gets available update methods
|
|
1716
|
+
*/
|
|
1717
|
+
get update() {
|
|
1718
|
+
const $this = this;
|
|
1719
|
+
return {
|
|
1720
|
+
/**
|
|
1721
|
+
* Updates an existing instance of the escrow_app smart contract using the on_update()uint64 ABI method.
|
|
1722
|
+
*
|
|
1723
|
+
* @param args The arguments for the smart contract call
|
|
1724
|
+
* @param params Any additional parameters for the call
|
|
1725
|
+
* @returns The update result
|
|
1726
|
+
*/
|
|
1727
|
+
async onUpdate(args, params = {}) {
|
|
1728
|
+
return $this.mapReturnValue(await $this.appClient.update(EscrowAppCallFactory.update.onUpdate(args, params)));
|
|
1729
|
+
}
|
|
1730
|
+
};
|
|
1731
|
+
}
|
|
1732
|
+
/**
|
|
1733
|
+
* Gets available delete methods
|
|
1734
|
+
*/
|
|
1735
|
+
get delete() {
|
|
1736
|
+
const $this = this;
|
|
1737
|
+
return {
|
|
1738
|
+
/**
|
|
1739
|
+
* Deletes an existing instance of the escrow_app smart contract using the delete()uint8 ABI method.
|
|
1740
|
+
*
|
|
1741
|
+
* @param args The arguments for the smart contract call
|
|
1742
|
+
* @param params Any additional parameters for the call
|
|
1743
|
+
* @returns The delete result
|
|
1744
|
+
*/
|
|
1745
|
+
async delete(args, params = {}) {
|
|
1746
|
+
return $this.mapReturnValue(await $this.appClient.delete(EscrowAppCallFactory.delete.delete(args, params)));
|
|
1747
|
+
}
|
|
1748
|
+
};
|
|
1749
|
+
}
|
|
1750
|
+
/**
|
|
1751
|
+
* Makes a clear_state call to an existing instance of the escrow_app smart contract.
|
|
1752
|
+
*
|
|
1753
|
+
* @param args The arguments for the bare call
|
|
1754
|
+
* @returns The clear_state result
|
|
1755
|
+
*/
|
|
1756
|
+
clearState(args = {}) {
|
|
1757
|
+
return this.appClient.clearState(args);
|
|
1758
|
+
}
|
|
1759
|
+
/**
|
|
1760
|
+
* Calls the setup(string,string,string,string,string)uint8 ABI method.
|
|
1761
|
+
*
|
|
1762
|
+
* @param args The arguments for the contract call
|
|
1763
|
+
* @param params Any additional parameters for the call
|
|
1764
|
+
* @returns The result of the call
|
|
1765
|
+
*/
|
|
1766
|
+
setup(args, params = {}) {
|
|
1767
|
+
return this.call(EscrowAppCallFactory.setup(args, params));
|
|
1768
|
+
}
|
|
1769
|
+
/**
|
|
1770
|
+
* Calls the match_maker(application,uint64)uint8 ABI method.
|
|
1771
|
+
*
|
|
1772
|
+
* @param args The arguments for the contract call
|
|
1773
|
+
* @param params Any additional parameters for the call
|
|
1774
|
+
* @returns The result of the call
|
|
1775
|
+
*/
|
|
1776
|
+
matchMaker(args, params = {}) {
|
|
1777
|
+
return this.call(EscrowAppCallFactory.matchMaker(args, params));
|
|
1778
|
+
}
|
|
1779
|
+
/**
|
|
1780
|
+
* Calls the amend_order(uint64,uint64,uint64)uint8 ABI method.
|
|
1781
|
+
*
|
|
1782
|
+
* @param args The arguments for the contract call
|
|
1783
|
+
* @param params Any additional parameters for the call
|
|
1784
|
+
* @returns The result of the call
|
|
1785
|
+
*/
|
|
1786
|
+
amendOrder(args, params = {}) {
|
|
1787
|
+
return this.call(EscrowAppCallFactory.amendOrder(args, params));
|
|
1788
|
+
}
|
|
1789
|
+
/**
|
|
1790
|
+
* Calls the match_taker(application)uint64 ABI method.
|
|
1791
|
+
*
|
|
1792
|
+
* @param args The arguments for the contract call
|
|
1793
|
+
* @param params Any additional parameters for the call
|
|
1794
|
+
* @returns The result of the call
|
|
1795
|
+
*/
|
|
1796
|
+
matchTaker(args, params = {}) {
|
|
1797
|
+
return this.call(EscrowAppCallFactory.matchTaker(args, params));
|
|
1798
|
+
}
|
|
1799
|
+
/**
|
|
1800
|
+
* Extracts a binary state value out of an AppState dictionary
|
|
1801
|
+
*
|
|
1802
|
+
* @param state The state dictionary containing the state value
|
|
1803
|
+
* @param key The key of the state value
|
|
1804
|
+
* @returns A BinaryState instance containing the state value, or undefined if the key was not found
|
|
1805
|
+
*/
|
|
1806
|
+
static getBinaryState(state, key) {
|
|
1807
|
+
const value = state[key];
|
|
1808
|
+
if (!value) return void 0;
|
|
1809
|
+
if (!("valueRaw" in value))
|
|
1810
|
+
throw new Error(`Failed to parse state value for ${key}; received an int when expected a byte array`);
|
|
1811
|
+
return {
|
|
1812
|
+
asString() {
|
|
1813
|
+
return value.value;
|
|
1814
|
+
},
|
|
1815
|
+
asByteArray() {
|
|
1816
|
+
return value.valueRaw;
|
|
1817
|
+
}
|
|
1818
|
+
};
|
|
1819
|
+
}
|
|
1820
|
+
/**
|
|
1821
|
+
* Extracts a integer state value out of an AppState dictionary
|
|
1822
|
+
*
|
|
1823
|
+
* @param state The state dictionary containing the state value
|
|
1824
|
+
* @param key The key of the state value
|
|
1825
|
+
* @returns An IntegerState instance containing the state value, or undefined if the key was not found
|
|
1826
|
+
*/
|
|
1827
|
+
static getIntegerState(state, key) {
|
|
1828
|
+
const value = state[key];
|
|
1829
|
+
if (!value) return void 0;
|
|
1830
|
+
if ("valueRaw" in value)
|
|
1831
|
+
throw new Error(`Failed to parse state value for ${key}; received a byte array when expected a number`);
|
|
1832
|
+
return {
|
|
1833
|
+
asBigInt() {
|
|
1834
|
+
return typeof value.value === "bigint" ? value.value : BigInt(value.value);
|
|
1835
|
+
},
|
|
1836
|
+
asNumber() {
|
|
1837
|
+
return typeof value.value === "bigint" ? Number(value.value) : value.value;
|
|
1838
|
+
}
|
|
1839
|
+
};
|
|
1840
|
+
}
|
|
1841
|
+
/**
|
|
1842
|
+
* Returns the smart contract's global state wrapped in a strongly typed accessor with options to format the stored value
|
|
1843
|
+
*/
|
|
1844
|
+
async getGlobalState() {
|
|
1845
|
+
const state = await this.appClient.getGlobalState();
|
|
1846
|
+
return {
|
|
1847
|
+
get assetListed() {
|
|
1848
|
+
return _EscrowAppClient.getIntegerState(state, "asset_listed");
|
|
1849
|
+
},
|
|
1850
|
+
get feeTimerStart() {
|
|
1851
|
+
return _EscrowAppClient.getIntegerState(state, "fee_timer_start");
|
|
1852
|
+
},
|
|
1853
|
+
get marketAppId() {
|
|
1854
|
+
return _EscrowAppClient.getIntegerState(state, "market_app_id");
|
|
1855
|
+
},
|
|
1856
|
+
get owner() {
|
|
1857
|
+
return _EscrowAppClient.getBinaryState(state, "owner");
|
|
1858
|
+
},
|
|
1859
|
+
get position() {
|
|
1860
|
+
return _EscrowAppClient.getIntegerState(state, "position");
|
|
1861
|
+
},
|
|
1862
|
+
get price() {
|
|
1863
|
+
return _EscrowAppClient.getIntegerState(state, "price");
|
|
1864
|
+
},
|
|
1865
|
+
get quantity() {
|
|
1866
|
+
return _EscrowAppClient.getIntegerState(state, "quantity");
|
|
1867
|
+
},
|
|
1868
|
+
get quantityFilled() {
|
|
1869
|
+
return _EscrowAppClient.getIntegerState(state, "quantity_filled");
|
|
1870
|
+
},
|
|
1871
|
+
get side() {
|
|
1872
|
+
return _EscrowAppClient.getIntegerState(state, "side");
|
|
1873
|
+
},
|
|
1874
|
+
get slippage() {
|
|
1875
|
+
return _EscrowAppClient.getIntegerState(state, "slippage");
|
|
1876
|
+
}
|
|
1877
|
+
};
|
|
1878
|
+
}
|
|
1879
|
+
compose() {
|
|
1880
|
+
const client = this;
|
|
1881
|
+
const atc = new AtomicTransactionComposer();
|
|
1882
|
+
let promiseChain = Promise.resolve();
|
|
1883
|
+
const resultMappers = [];
|
|
1884
|
+
return {
|
|
1885
|
+
setup(args, params) {
|
|
1886
|
+
promiseChain = promiseChain.then(() => client.setup(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
|
|
1887
|
+
resultMappers.push(void 0);
|
|
1888
|
+
return this;
|
|
1889
|
+
},
|
|
1890
|
+
matchMaker(args, params) {
|
|
1891
|
+
promiseChain = promiseChain.then(() => client.matchMaker(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
|
|
1892
|
+
resultMappers.push(void 0);
|
|
1893
|
+
return this;
|
|
1894
|
+
},
|
|
1895
|
+
amendOrder(args, params) {
|
|
1896
|
+
promiseChain = promiseChain.then(() => client.amendOrder(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
|
|
1897
|
+
resultMappers.push(void 0);
|
|
1898
|
+
return this;
|
|
1899
|
+
},
|
|
1900
|
+
matchTaker(args, params) {
|
|
1901
|
+
promiseChain = promiseChain.then(() => client.matchTaker(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
|
|
1902
|
+
resultMappers.push(void 0);
|
|
1903
|
+
return this;
|
|
1904
|
+
},
|
|
1905
|
+
get update() {
|
|
1906
|
+
const $this = this;
|
|
1907
|
+
return {
|
|
1908
|
+
onUpdate(args, params) {
|
|
1909
|
+
promiseChain = promiseChain.then(() => client.update.onUpdate(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
|
|
1910
|
+
resultMappers.push(void 0);
|
|
1911
|
+
return $this;
|
|
1912
|
+
}
|
|
1913
|
+
};
|
|
1914
|
+
},
|
|
1915
|
+
get delete() {
|
|
1916
|
+
const $this = this;
|
|
1917
|
+
return {
|
|
1918
|
+
delete(args, params) {
|
|
1919
|
+
promiseChain = promiseChain.then(() => client.delete.delete(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
|
|
1920
|
+
resultMappers.push(void 0);
|
|
1921
|
+
return $this;
|
|
1922
|
+
}
|
|
1923
|
+
};
|
|
1924
|
+
},
|
|
1925
|
+
clearState(args) {
|
|
1926
|
+
promiseChain = promiseChain.then(() => client.clearState({ ...args, sendParams: { ...args?.sendParams, skipSending: true, atc } }));
|
|
1927
|
+
resultMappers.push(void 0);
|
|
1928
|
+
return this;
|
|
1929
|
+
},
|
|
1930
|
+
addTransaction(txn, defaultSender) {
|
|
1931
|
+
promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit4.getTransactionWithSigner(txn, defaultSender ?? client.sender)));
|
|
1932
|
+
return this;
|
|
1933
|
+
},
|
|
1934
|
+
async atc() {
|
|
1935
|
+
await promiseChain;
|
|
1936
|
+
return atc;
|
|
1937
|
+
},
|
|
1938
|
+
async simulate(options) {
|
|
1939
|
+
await promiseChain;
|
|
1940
|
+
const result = await atc.simulate(client.algod, new modelsv2.SimulateRequest({ txnGroups: [], ...options }));
|
|
1941
|
+
return {
|
|
1942
|
+
...result,
|
|
1943
|
+
returns: result.methodResults?.map((val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val.returnValue) : val.returnValue)
|
|
1944
|
+
};
|
|
1945
|
+
},
|
|
1946
|
+
async execute(sendParams) {
|
|
1947
|
+
await promiseChain;
|
|
1948
|
+
const result = await algokit4.sendAtomicTransactionComposer({ atc, sendParams }, client.algod);
|
|
1263
1949
|
return {
|
|
1264
1950
|
...result,
|
|
1265
1951
|
returns: result.returns?.map((val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val.returnValue) : val.returnValue)
|
|
@@ -1634,7 +2320,7 @@ var createOrder = async (config, params) => {
|
|
|
1634
2320
|
if (!isBuying) {
|
|
1635
2321
|
const hasUsdcOptIn = await checkAssetOptIn(algodClient, activeAddress, usdcAssetId);
|
|
1636
2322
|
if (!hasUsdcOptIn) {
|
|
1637
|
-
const optInTxn = await
|
|
2323
|
+
const optInTxn = await algokit4.transferAsset(
|
|
1638
2324
|
{ from: signerAccount, to: activeAddress, assetId: usdcAssetId, amount: 0, skipSending: true },
|
|
1639
2325
|
algodClient
|
|
1640
2326
|
);
|
|
@@ -1645,7 +2331,7 @@ var createOrder = async (config, params) => {
|
|
|
1645
2331
|
const assetId = position === 1 ? yesAssetId : noAssetId;
|
|
1646
2332
|
const hasAssetOptIn = await checkAssetOptIn(algodClient, activeAddress, assetId);
|
|
1647
2333
|
if (!hasAssetOptIn) {
|
|
1648
|
-
const optInTxn = await
|
|
2334
|
+
const optInTxn = await algokit4.transferAsset(
|
|
1649
2335
|
{ from: signerAccount, to: activeAddress, assetId, amount: 0, skipSending: true },
|
|
1650
2336
|
algodClient
|
|
1651
2337
|
);
|
|
@@ -1653,15 +2339,15 @@ var createOrder = async (config, params) => {
|
|
|
1653
2339
|
createEscrowTxnIndex++;
|
|
1654
2340
|
}
|
|
1655
2341
|
}
|
|
1656
|
-
const paymentTxn = await
|
|
1657
|
-
{ from: signerAccount, to: marketAddress, amount:
|
|
2342
|
+
const paymentTxn = await algokit4.transferAlgos(
|
|
2343
|
+
{ from: signerAccount, to: marketAddress, amount: algokit4.microAlgos(957e3), skipSending: true },
|
|
1658
2344
|
algodClient
|
|
1659
2345
|
);
|
|
1660
2346
|
atc.addTransaction({ txn: paymentTxn.transaction, signer });
|
|
1661
2347
|
createEscrowTxnIndex++;
|
|
1662
2348
|
const fundAmount = isBuying ? Math.floor(quantity * (price + slippage) / 1e6) + fee : quantity;
|
|
1663
2349
|
const fundAssetId = isBuying ? usdcAssetId : position === 1 ? yesAssetId : noAssetId;
|
|
1664
|
-
const assetTransferTxn = await
|
|
2350
|
+
const assetTransferTxn = await algokit4.transferAsset(
|
|
1665
2351
|
{ from: signerAccount, to: marketAddress, amount: fundAmount, assetId: fundAssetId, skipSending: true },
|
|
1666
2352
|
algodClient
|
|
1667
2353
|
);
|
|
@@ -1674,11 +2360,11 @@ var createOrder = async (config, params) => {
|
|
|
1674
2360
|
atc.addTransaction({ txn: createEscrowTxn.transaction, signer });
|
|
1675
2361
|
let matchIndex = 1;
|
|
1676
2362
|
for (const matchingOrder of matchingOrders) {
|
|
1677
|
-
const payCounterPartyTxn = await
|
|
2363
|
+
const payCounterPartyTxn = await algokit4.transferAlgos(
|
|
1678
2364
|
{
|
|
1679
2365
|
from: signerAccount,
|
|
1680
2366
|
to: getApplicationAddress(matchingOrder.escrowAppId),
|
|
1681
|
-
amount:
|
|
2367
|
+
amount: algokit4.microAlgos(1e3 * (isBuying ? 1 : 2)),
|
|
1682
2368
|
skipSending: true
|
|
1683
2369
|
},
|
|
1684
2370
|
algodClient
|
|
@@ -1697,7 +2383,7 @@ var createOrder = async (config, params) => {
|
|
|
1697
2383
|
{
|
|
1698
2384
|
assets: [usdcAssetId, yesAssetId, noAssetId],
|
|
1699
2385
|
accounts: [activeAddress, marketFeeAddress, matchingOrder.owner],
|
|
1700
|
-
sendParams: { skipSending: true, fee:
|
|
2386
|
+
sendParams: { skipSending: true, fee: algokit4.microAlgos(1e4) }
|
|
1701
2387
|
}
|
|
1702
2388
|
);
|
|
1703
2389
|
atc.addTransaction({ txn: proposeAMatchTxn.transaction, signer });
|
|
@@ -1730,7 +2416,7 @@ var cancelOrder = async (config, params) => {
|
|
|
1730
2416
|
apps: [escrowAppId],
|
|
1731
2417
|
assets: [usdcAssetId, yesAssetId, noAssetId],
|
|
1732
2418
|
accounts: [orderOwner],
|
|
1733
|
-
sendParams: { skipSending: true, fee:
|
|
2419
|
+
sendParams: { skipSending: true, fee: algokit4.microAlgos(7e3) }
|
|
1734
2420
|
}
|
|
1735
2421
|
);
|
|
1736
2422
|
atc.addTransaction({ txn: deleteCallTxn.transaction, signer });
|
|
@@ -1754,11 +2440,11 @@ var proposeMatch = async (config, params) => {
|
|
|
1754
2440
|
algodClient
|
|
1755
2441
|
);
|
|
1756
2442
|
const atc = new AtomicTransactionComposer();
|
|
1757
|
-
const payMakerTxn = await
|
|
2443
|
+
const payMakerTxn = await algokit4.transferAlgos(
|
|
1758
2444
|
{
|
|
1759
2445
|
from: signerAccount,
|
|
1760
2446
|
to: getApplicationAddress(makerEscrowAppId),
|
|
1761
|
-
amount:
|
|
2447
|
+
amount: algokit4.microAlgos(2e3),
|
|
1762
2448
|
skipSending: true
|
|
1763
2449
|
},
|
|
1764
2450
|
algodClient
|
|
@@ -1777,7 +2463,7 @@ var proposeMatch = async (config, params) => {
|
|
|
1777
2463
|
{
|
|
1778
2464
|
assets: [usdcAssetId, yesAssetId, noAssetId],
|
|
1779
2465
|
accounts: [activeAddress, marketFeeAddress, makerAddress],
|
|
1780
|
-
sendParams: { skipSending: true, fee:
|
|
2466
|
+
sendParams: { skipSending: true, fee: algokit4.microAlgos(1e4) }
|
|
1781
2467
|
}
|
|
1782
2468
|
);
|
|
1783
2469
|
atc.addTransaction({ txn: proposeTxn.transaction, signer });
|
|
@@ -1788,6 +2474,68 @@ var proposeMatch = async (config, params) => {
|
|
|
1788
2474
|
confirmedRound: result.confirmedRound
|
|
1789
2475
|
};
|
|
1790
2476
|
};
|
|
2477
|
+
var amendOrder = async (config, params) => {
|
|
2478
|
+
const { algodClient, signer, activeAddress, usdcAssetId } = config;
|
|
2479
|
+
const { marketAppId, escrowAppId, price, quantity, slippage = 0 } = params;
|
|
2480
|
+
const escrowAppInfo = await algodClient.getApplicationByID(escrowAppId).do();
|
|
2481
|
+
const escrowState = decodeGlobalState(
|
|
2482
|
+
escrowAppInfo.params?.["global-state"] ?? escrowAppInfo["params"]?.["global-state"] ?? []
|
|
2483
|
+
);
|
|
2484
|
+
if ((escrowState.quantity_filled ?? 0) > 0) {
|
|
2485
|
+
throw new Error("Cannot amend an order that has been partially or fully filled.");
|
|
2486
|
+
}
|
|
2487
|
+
const globalState = await getMarketGlobalState(algodClient, marketAppId);
|
|
2488
|
+
const yesAssetId = globalState.yes_asset_id;
|
|
2489
|
+
const noAssetId = globalState.no_asset_id;
|
|
2490
|
+
const feeBase = globalState.fee_base_percent;
|
|
2491
|
+
const isBuy = escrowState.side === 1;
|
|
2492
|
+
const position = escrowState.position;
|
|
2493
|
+
const computeCollateral = (qty, px, slip) => {
|
|
2494
|
+
if (isBuy) {
|
|
2495
|
+
const fee = calculateFee(qty, px + slip, feeBase);
|
|
2496
|
+
return Math.floor(qty * (px + slip) / 1e6) + fee;
|
|
2497
|
+
}
|
|
2498
|
+
return qty;
|
|
2499
|
+
};
|
|
2500
|
+
const oldCollateral = computeCollateral(
|
|
2501
|
+
escrowState.quantity ?? 0,
|
|
2502
|
+
escrowState.price ?? 0,
|
|
2503
|
+
escrowState.slippage ?? 0
|
|
2504
|
+
);
|
|
2505
|
+
const newCollateral = computeCollateral(quantity, price, slippage);
|
|
2506
|
+
const delta = newCollateral - oldCollateral;
|
|
2507
|
+
const fundAssetId = isBuy ? usdcAssetId : position === 1 ? yesAssetId : noAssetId;
|
|
2508
|
+
const escrowAddr = getApplicationAddress(escrowAppId).toString();
|
|
2509
|
+
const signerAccount = { signer, addr: activeAddress };
|
|
2510
|
+
const atc = new AtomicTransactionComposer();
|
|
2511
|
+
if (delta > 0) {
|
|
2512
|
+
const fundTxn = await algokit4.transferAsset(
|
|
2513
|
+
{ from: signerAccount, to: escrowAddr, amount: delta, assetId: fundAssetId, skipSending: true },
|
|
2514
|
+
algodClient
|
|
2515
|
+
);
|
|
2516
|
+
atc.addTransaction({ txn: fundTxn.transaction, signer });
|
|
2517
|
+
}
|
|
2518
|
+
const escrowClient = new EscrowAppClient(
|
|
2519
|
+
{ resolveBy: "id", id: escrowAppId, sender: signerAccount },
|
|
2520
|
+
algodClient
|
|
2521
|
+
);
|
|
2522
|
+
const feeMicros = delta <= 0 ? 2e3 : 1e3;
|
|
2523
|
+
const amendCall = await escrowClient.amendOrder(
|
|
2524
|
+
{ price, quantity, slippage },
|
|
2525
|
+
{
|
|
2526
|
+
assets: [usdcAssetId, yesAssetId, noAssetId],
|
|
2527
|
+
apps: [marketAppId],
|
|
2528
|
+
sendParams: { fee: algokit4.microAlgos(feeMicros), skipSending: true }
|
|
2529
|
+
}
|
|
2530
|
+
);
|
|
2531
|
+
atc.addTransaction({ txn: amendCall.transaction, signer });
|
|
2532
|
+
const result = await atc.execute(algodClient, 4);
|
|
2533
|
+
return {
|
|
2534
|
+
success: true,
|
|
2535
|
+
txIds: result.txIDs,
|
|
2536
|
+
confirmedRound: result.confirmedRound
|
|
2537
|
+
};
|
|
2538
|
+
};
|
|
1791
2539
|
var splitShares = async (config, params) => {
|
|
1792
2540
|
const { algodClient, signer, activeAddress, usdcAssetId } = config;
|
|
1793
2541
|
const { marketAppId, amount } = params;
|
|
@@ -1804,7 +2552,7 @@ var splitShares = async (config, params) => {
|
|
|
1804
2552
|
let optInCosts = 0;
|
|
1805
2553
|
const hasYesOptIn = await checkAssetOptIn(algodClient, activeAddress, yesAssetId);
|
|
1806
2554
|
if (!hasYesOptIn) {
|
|
1807
|
-
const optInTxn = await
|
|
2555
|
+
const optInTxn = await algokit4.transferAsset(
|
|
1808
2556
|
{ from: signerAccount, to: activeAddress, assetId: yesAssetId, amount: 0, skipSending: true },
|
|
1809
2557
|
algodClient
|
|
1810
2558
|
);
|
|
@@ -1813,19 +2561,19 @@ var splitShares = async (config, params) => {
|
|
|
1813
2561
|
}
|
|
1814
2562
|
const hasNoOptIn = await checkAssetOptIn(algodClient, activeAddress, noAssetId);
|
|
1815
2563
|
if (!hasNoOptIn) {
|
|
1816
|
-
const optInTxn = await
|
|
2564
|
+
const optInTxn = await algokit4.transferAsset(
|
|
1817
2565
|
{ from: signerAccount, to: activeAddress, assetId: noAssetId, amount: 0, skipSending: true },
|
|
1818
2566
|
algodClient
|
|
1819
2567
|
);
|
|
1820
2568
|
atc.addTransaction({ txn: optInTxn.transaction, signer });
|
|
1821
2569
|
optInCosts += 1e3;
|
|
1822
2570
|
}
|
|
1823
|
-
const algoPayment = await
|
|
1824
|
-
{ from: signerAccount, to: marketAddress, amount:
|
|
2571
|
+
const algoPayment = await algokit4.transferAlgos(
|
|
2572
|
+
{ from: signerAccount, to: marketAddress, amount: algokit4.microAlgos(5e3 + optInCosts), skipSending: true },
|
|
1825
2573
|
algodClient
|
|
1826
2574
|
);
|
|
1827
2575
|
atc.addTransaction({ txn: algoPayment.transaction, signer });
|
|
1828
|
-
const usdcTransfer = await
|
|
2576
|
+
const usdcTransfer = await algokit4.transferAsset(
|
|
1829
2577
|
{ from: signerAccount, to: marketAddress, amount, assetId: usdcAssetId, skipSending: true },
|
|
1830
2578
|
algodClient
|
|
1831
2579
|
);
|
|
@@ -1858,24 +2606,24 @@ var mergeShares = async (config, params) => {
|
|
|
1858
2606
|
let optInCosts = 0;
|
|
1859
2607
|
const hasUsdcOptIn = await checkAssetOptIn(algodClient, activeAddress, usdcAssetId);
|
|
1860
2608
|
if (!hasUsdcOptIn) {
|
|
1861
|
-
const optInTxn = await
|
|
2609
|
+
const optInTxn = await algokit4.transferAsset(
|
|
1862
2610
|
{ from: signerAccount, to: activeAddress, assetId: usdcAssetId, amount: 0, skipSending: true },
|
|
1863
2611
|
algodClient
|
|
1864
2612
|
);
|
|
1865
2613
|
atc.addTransaction({ txn: optInTxn.transaction, signer });
|
|
1866
2614
|
optInCosts += 1e3;
|
|
1867
2615
|
}
|
|
1868
|
-
const algoPayment = await
|
|
1869
|
-
{ from: signerAccount, to: marketAddress, amount:
|
|
2616
|
+
const algoPayment = await algokit4.transferAlgos(
|
|
2617
|
+
{ from: signerAccount, to: marketAddress, amount: algokit4.microAlgos(5e3 + optInCosts), skipSending: true },
|
|
1870
2618
|
algodClient
|
|
1871
2619
|
);
|
|
1872
2620
|
atc.addTransaction({ txn: algoPayment.transaction, signer });
|
|
1873
|
-
const yesTransfer = await
|
|
2621
|
+
const yesTransfer = await algokit4.transferAsset(
|
|
1874
2622
|
{ from: signerAccount, to: marketAddress, amount, assetId: yesAssetId, skipSending: true },
|
|
1875
2623
|
algodClient
|
|
1876
2624
|
);
|
|
1877
2625
|
atc.addTransaction({ txn: yesTransfer.transaction, signer });
|
|
1878
|
-
const noTransfer = await
|
|
2626
|
+
const noTransfer = await algokit4.transferAsset(
|
|
1879
2627
|
{ from: signerAccount, to: marketAddress, amount, assetId: noAssetId, skipSending: true },
|
|
1880
2628
|
algodClient
|
|
1881
2629
|
);
|
|
@@ -1912,7 +2660,7 @@ var claim = async (config, params) => {
|
|
|
1912
2660
|
throw new Error("No tokens to claim");
|
|
1913
2661
|
}
|
|
1914
2662
|
const atc = new AtomicTransactionComposer();
|
|
1915
|
-
const tokenTransfer = await
|
|
2663
|
+
const tokenTransfer = await algokit4.transferAsset(
|
|
1916
2664
|
{ from: signerAccount, to: marketAddress, amount: tokenBalance, assetId, skipSending: true },
|
|
1917
2665
|
algodClient
|
|
1918
2666
|
);
|
|
@@ -1921,7 +2669,7 @@ var claim = async (config, params) => {
|
|
|
1921
2669
|
{},
|
|
1922
2670
|
{
|
|
1923
2671
|
assets: [usdcAssetId, assetId],
|
|
1924
|
-
sendParams: { skipSending: true, fee:
|
|
2672
|
+
sendParams: { skipSending: true, fee: algokit4.microAlgos(1e3) }
|
|
1925
2673
|
}
|
|
1926
2674
|
);
|
|
1927
2675
|
atc.addTransaction({ txn: claimTxn.transaction, signer });
|
|
@@ -2259,6 +3007,21 @@ var AlphaClient = class {
|
|
|
2259
3007
|
async proposeMatch(params) {
|
|
2260
3008
|
return proposeMatch(this.config, params);
|
|
2261
3009
|
}
|
|
3010
|
+
/**
|
|
3011
|
+
* Amends (edits) an existing unfilled order in-place.
|
|
3012
|
+
*
|
|
3013
|
+
* Cheaper and faster than cancel + recreate. The escrow contract adjusts
|
|
3014
|
+
* collateral automatically — sends you a refund if the new value is lower,
|
|
3015
|
+
* or requires extra funds if higher.
|
|
3016
|
+
*
|
|
3017
|
+
* Only works on orders with zero quantity filled.
|
|
3018
|
+
*
|
|
3019
|
+
* @param params - Amend parameters (marketAppId, escrowAppId, price, quantity, slippage?)
|
|
3020
|
+
* @returns Whether the amendment succeeded
|
|
3021
|
+
*/
|
|
3022
|
+
async amendOrder(params) {
|
|
3023
|
+
return amendOrder(this.config, params);
|
|
3024
|
+
}
|
|
2262
3025
|
// ============================================
|
|
2263
3026
|
// Positions
|
|
2264
3027
|
// ============================================
|