@tatumio/tatum-v1
Version:
Tatum API client allows browsers and Node.js clients to interact with Tatum API.
367 lines • 44.4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const blockchain_1 = require("../../blockchain");
const marketplace_1 = require("../../contracts/marketplace");
const model_1 = require("../../model");
const transaction_1 = require("../../transaction");
const nft_1 = require("../nft");
const auction_1 = require("./auction");
const sleep = async (time = 7000) => new Promise(r => setTimeout(r, time));
describe('Auction tests', () => {
jest.setTimeout(99999);
describe('Auction CELO transactions', () => {
const tokenId = `${Date.now()}`;
it('should deploy auction', async () => {
const body = new model_1.DeployNftAuction();
body.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236';
body.feeRecipient = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA';
body.auctionFee = 150;
body.feeCurrency = model_1.Currency.CUSD;
body.chain = model_1.Currency.CELO;
const test = await auction_1.deployAuction(true, body, 'https://alfajores-forno.celo-testnet.org');
console.log(test);
expect(test).toBeDefined();
});
it('should not deploy auction - wrong validation', async () => {
const body = new model_1.DeployNftAuction();
body.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236';
body.feeRecipient = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA';
body.auctionFee = 150.1;
body.feeCurrency = model_1.Currency.CUSD;
body.chain = model_1.Currency.CELO;
await auction_1.deployAuction(true, body, 'https://alfajores-forno.celo-testnet.org');
});
it('should not create auction - wrong validation', async () => {
const body = new model_1.CreateAuction();
body.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236';
body.amount = '0.2';
body.nftAddress = '0x1214BEada6b25bc98f7494C7BDBf22C095FDCaBD';
body.contractAddress = '0x1214BEada6b25bc98f7494C7BDBf22C095FDCaBD';
body.endedAt = 123456789;
body.tokenId = tokenId;
body.id = tokenId;
body.isErc721 = false;
body.seller = '0x48d4bA7B2698A4b89635b9a2E391152350DB740f';
body.feeCurrency = model_1.Currency.CUSD;
body.chain = model_1.Currency.CELO;
await auction_1.sendAuctionCreate(true, body, 'https://alfajores-forno.celo-testnet.org');
});
it('should create auction native asset', async () => {
const mint = new model_1.CeloMintErc721();
mint.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236';
mint.to = '0x48d4bA7B2698A4b89635b9a2E391152350DB740f';
mint.contractAddress = '0x1214BEada6b25bc98f7494C7BDBf22C095FDCaBD';
mint.tokenId = tokenId;
mint.url = 'https://google.com';
mint.feeCurrency = model_1.Currency.CUSD;
mint.chain = model_1.Currency.CELO;
console.log(await nft_1.mintNFTWithUri(true, mint, 'https://alfajores-forno.celo-testnet.org'));
await sleep();
console.log(await auction_1.sendAuctionApproveNftTransfer(true, {
fromPrivateKey: '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236',
chain: model_1.Currency.CELO, contractAddress: '0x1214BEada6b25bc98f7494C7BDBf22C095FDCaBD',
isErc721: true, spender: '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038', tokenId
}, 'https://alfajores-forno.celo-testnet.org'));
await sleep();
const endedAt = (await blockchain_1.celoGetCurrentBlock()) + 9;
const body = new model_1.CreateAuction();
body.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236';
body.contractAddress = '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038';
body.nftAddress = '0x1214BEada6b25bc98f7494C7BDBf22C095FDCaBD';
body.endedAt = endedAt;
body.tokenId = tokenId;
body.id = tokenId;
body.isErc721 = true;
body.seller = '0x48d4bA7B2698A4b89635b9a2E391152350DB740f';
body.feeCurrency = model_1.Currency.CUSD;
body.chain = model_1.Currency.CELO;
console.log(await auction_1.sendAuctionCreate(true, body, 'https://alfajores-forno.celo-testnet.org'));
await sleep();
const bid = new model_1.InvokeAuctionOperation();
bid.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb';
bid.contractAddress = '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038';
bid.id = tokenId;
bid.bidValue = '0.001015';
bid.feeCurrency = model_1.Currency.CELO;
bid.chain = model_1.Currency.CELO;
console.log(await auction_1.sendAuctionBid(true, bid, 'https://alfajores-forno.celo-testnet.org'));
await sleep(35000);
const settle = new model_1.InvokeAuctionOperation();
settle.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236';
settle.contractAddress = '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038';
settle.id = tokenId;
settle.feeCurrency = model_1.Currency.CUSD;
settle.chain = model_1.Currency.CELO;
console.log(await auction_1.sendAuctionSettle(true, settle, 'https://alfajores-forno.celo-testnet.org'));
});
it('should create auction erc20 asset', async () => {
const mint = new model_1.CeloMintErc721();
mint.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236';
mint.to = '0x48d4bA7B2698A4b89635b9a2E391152350DB740f';
mint.contractAddress = '0xdf82c2f74aa7b629bda65b1cfd258248c9c2b7d3';
mint.tokenId = tokenId;
mint.url = 'https://google.com';
mint.feeCurrency = model_1.Currency.CUSD;
mint.chain = model_1.Currency.CELO;
console.log(await nft_1.mintNFTWithUri(true, mint, 'https://alfajores-forno.celo-testnet.org'));
await sleep();
console.log(await auction_1.sendAuctionApproveNftTransfer(true, {
fromPrivateKey: '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236',
chain: model_1.Currency.CELO, contractAddress: '0xdf82c2f74aa7b629bda65b1cfd258248c9c2b7d3',
isErc721: true, spender: '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038', tokenId
}, 'https://alfajores-forno.celo-testnet.org'));
await sleep();
const endedAt = (await blockchain_1.celoGetCurrentBlock()) + 7;
const body = new model_1.CreateAuction();
body.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236';
body.contractAddress = '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038';
body.nftAddress = '0xdf82c2f74aa7b629bda65b1cfd258248c9c2b7d3';
body.tokenId = tokenId;
body.id = `${tokenId}1`;
body.endedAt = endedAt;
body.isErc721 = true;
body.seller = '0x48d4bA7B2698A4b89635b9a2E391152350DB740f';
body.erc20Address = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA';
body.feeCurrency = model_1.Currency.CUSD;
body.chain = model_1.Currency.CELO;
console.log(await auction_1.sendAuctionCreate(true, body, 'https://alfajores-forno.celo-testnet.org'));
const approve = new model_1.ApproveErc20();
approve.contractAddress = '0x874069Fa1Eb16D44d622F2e0Ca25eeA172369bC1';
approve.spender = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA';
approve.chain = model_1.Currency.CELO;
approve.feeCurrency = model_1.Currency.CELO;
approve.amount = '0.001015';
approve.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb';
approve.fee = { gasPrice: '5', gasLimit: '300000' };
console.log(await auction_1.sendAuctionApproveErc20Transfer(true, approve, 'https://alfajores-forno.celo-testnet.org'));
await sleep();
const bid = new model_1.InvokeAuctionOperation();
bid.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb';
bid.contractAddress = '0x8cb76aEd9C5e336ef961265c6079C14e9cD3D2eA';
bid.id = `${tokenId}1`;
bid.bidValue = '0.001015';
bid.feeCurrency = model_1.Currency.CELO;
bid.chain = model_1.Currency.CELO;
bid.fee = { gasPrice: '5', gasLimit: '300000' };
console.log(await auction_1.sendAuctionBid(true, bid, 'https://alfajores-forno.celo-testnet.org'));
await sleep(20000);
const settle = new model_1.InvokeAuctionOperation();
settle.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236';
settle.contractAddress = '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038';
settle.id = tokenId;
settle.feeCurrency = model_1.Currency.CUSD;
settle.chain = model_1.Currency.CELO;
console.log(await auction_1.sendAuctionSettle(true, settle, 'https://alfajores-forno.celo-testnet.org'));
});
it('should get auction', async () => {
const r = new model_1.SmartContractReadMethodInvocation();
r.contractAddress = '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038';
r.methodName = 'get';
r.methodABI = marketplace_1.auction.abi.find((a) => a.name === r.methodName);
r.params = [tokenId];
console.log(await transaction_1.sendCeloSmartContractReadMethodInvocationTransaction(true, r, 'https://alfajores-forno.celo-testnet.org'));
});
it('should get auction fee', async () => {
const r = new model_1.SmartContractReadMethodInvocation();
r.contractAddress = '0x991dfc0db4cbe2480296eec5bcc6b3215a9b7038';
r.methodName = 'getAuctionFee';
r.methodABI = marketplace_1.auction.abi.find((a) => a.name === r.methodName);
r.params = [];
console.log(await transaction_1.sendCeloSmartContractReadMethodInvocationTransaction(true, r, 'https://alfajores-forno.celo-testnet.org'));
});
});
describe('Auction BSC transactions', () => {
const tokenId = `${Date.now()}`;
it('should deploy auction', async () => {
const body = new model_1.DeployNftAuction();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.feeRecipient = '0x811dfbff13adfbc3cf653dcc373c03616d3471c9';
body.auctionFee = 150;
body.chain = model_1.Currency.BSC;
const test = await auction_1.deployAuction(true, body, 'https://data-seed-prebsc-2-s1.binance.org:8545');
console.log(test);
expect(test).toBeDefined();
});
it('should create auction native asset', async () => {
const mint = new model_1.MintErc721();
mint.fromPrivateKey = '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab';
mint.to = '0x80d8bac9a6901698b3749fe336bbd1385c1f98f2';
mint.contractAddress = '0xada3e67deae341f16b44f67687866d2560d79ec8';
mint.tokenId = tokenId;
mint.url = 'https://google.com';
mint.chain = model_1.Currency.BSC;
console.log(await nft_1.mintNFTWithUri(true, mint, 'https://data-seed-prebsc-2-s1.binance.org:8545'));
await sleep();
console.log(await auction_1.sendAuctionApproveNftTransfer(true, {
fromPrivateKey: '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab',
chain: model_1.Currency.BSC, contractAddress: '0xada3e67deae341f16b44f67687866d2560d79ec8',
isErc721: true, spender: '0x568bf1e6849e250f4705347a9cff717b5dcfc4ad', tokenId
}, 'https://data-seed-prebsc-2-s1.binance.org:8545'));
await sleep();
const body = new model_1.CreateAuction();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.contractAddress = '0x568bf1e6849e250f4705347a9cff717b5dcfc4ad';
body.nftAddress = '0xada3e67deae341f16b44f67687866d2560d79ec8';
body.tokenId = tokenId;
body.endedAt = (await blockchain_1.bscGetCurrentBlock()) + 9;
body.id = tokenId;
body.isErc721 = true;
body.seller = '0x80d8bac9a6901698b3749fe336bbd1385c1f98f2';
body.chain = model_1.Currency.BSC;
console.log(await auction_1.sendAuctionCreate(true, body, 'https://data-seed-prebsc-2-s1.binance.org:8545'));
await sleep(10000);
const bid = new model_1.InvokeAuctionOperation();
bid.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb';
bid.contractAddress = '0x568bf1e6849e250f4705347a9cff717b5dcfc4ad';
bid.id = tokenId;
bid.bidValue = '0.001015';
bid.chain = model_1.Currency.BSC;
console.log(await auction_1.sendAuctionBid(true, bid, 'https://data-seed-prebsc-2-s1.binance.org:8545'));
await sleep(15000);
const settle = new model_1.InvokeAuctionOperation();
settle.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
settle.contractAddress = '0x568bf1e6849e250f4705347a9cff717b5dcfc4ad';
settle.id = tokenId;
settle.chain = model_1.Currency.BSC;
console.log(await auction_1.sendAuctionSettle(true, settle, 'https://data-seed-prebsc-2-s1.binance.org:8545'));
});
it('should get auction', async () => {
const r = new model_1.SmartContractReadMethodInvocation();
r.contractAddress = '0x568bf1e6849e250f4705347a9cff717b5dcfc4ad';
r.methodName = 'getAuction';
r.methodABI = marketplace_1.auction.abi.find((a) => a.name === r.methodName);
r.params = ['1630313952428'];
console.log(await transaction_1.sendBscSmartContractMethodInvocationTransaction(r, 'https://data-seed-prebsc-2-s1.binance.org:8545'));
});
it('should get auction fee', async () => {
const r = new model_1.SmartContractReadMethodInvocation();
r.contractAddress = '0x568bf1e6849e250f4705347a9cff717b5dcfc4ad';
r.methodName = 'getAuctionFee';
r.methodABI = marketplace_1.auction.abi.find((a) => a.name === r.methodName);
r.params = [];
console.log(await transaction_1.sendBscSmartContractReadMethodInvocationTransaction(r, 'https://data-seed-prebsc-2-s1.binance.org:8545'));
});
});
describe('Auction MATIC transactions', () => {
const tokenId = `${Date.now()}`;
it('should deploy auction', async () => {
const body = new model_1.DeployNftAuction();
body.fromPrivateKey = '0x37b091fc4ce46a56da643f021254612551dbe0944679a6e09cb5724d3085c9ab';
body.feeRecipient = '0x811dfbff13adfbc3cf653dcc373c03616d3471c9';
body.auctionFee = 150;
body.chain = model_1.Currency.MATIC;
const test = await auction_1.deployAuction(true, body, 'https://rpc-mumbai.maticvigil.com');
console.log(test);
expect(test).toBeDefined();
});
it('should create auction native asset', async () => {
const mint = new model_1.MintErc721();
mint.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
mint.to = '0x811dfbff13adfbc3cf653dcc373c03616d3471c9';
mint.contractAddress = '0x5d7d868ed584b04b922905a481f274206a42dd8a';
mint.tokenId = tokenId;
mint.url = 'https://google.com';
mint.chain = model_1.Currency.MATIC;
console.log(await nft_1.mintNFTWithUri(true, mint, 'https://rpc-mumbai.maticvigil.com'));
await sleep();
console.log(await auction_1.sendAuctionApproveNftTransfer(true, {
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.MATIC, contractAddress: '0x5d7d868ed584b04b922905a481f274206a42dd8a',
isErc721: true, spender: '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073', tokenId
}, 'https://rpc-mumbai.maticvigil.com'));
await sleep();
const body = new model_1.CreateAuction();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.contractAddress = '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073';
body.nftAddress = '0x5d7d868ed584b04b922905a481f274206a42dd8a';
body.tokenId = tokenId;
body.endedAt = (await blockchain_1.polygonGetCurrentBlock()) + 12;
body.id = tokenId;
body.isErc721 = true;
body.seller = '0x811dfbff13adfbc3cf653dcc373c03616d3471c9';
body.chain = model_1.Currency.MATIC;
console.log(await auction_1.sendAuctionCreate(true, body, 'https://rpc-mumbai.maticvigil.com'));
await sleep(2000);
const bid = new model_1.InvokeAuctionOperation();
bid.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb';
bid.contractAddress = '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073';
bid.id = tokenId;
bid.bidValue = '0.001015';
bid.chain = model_1.Currency.MATIC;
console.log(await auction_1.sendAuctionBid(true, bid, 'https://rpc-mumbai.maticvigil.com'));
await sleep(20000);
const settle = new model_1.InvokeAuctionOperation();
settle.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236';
settle.contractAddress = '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073';
settle.id = tokenId;
settle.chain = model_1.Currency.MATIC;
console.log(await auction_1.sendAuctionSettle(true, settle, 'https://rpc-mumbai.maticvigil.com'));
});
it('should create auction ERC20 asset', async () => {
const approve = new model_1.ApproveErc20();
approve.contractAddress = '0x326c977e6efc84e512bb9c30f76e30c160ed06fb';
approve.spender = '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073';
approve.chain = model_1.Currency.MATIC;
approve.amount = '0.001015';
approve.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb';
console.log(await auction_1.sendAuctionApproveErc20Transfer(true, approve, 'https://rpc-mumbai.maticvigil.com'));
const mint = new model_1.MintErc721();
mint.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
mint.to = '0x811dfbff13adfbc3cf653dcc373c03616d3471c9';
mint.contractAddress = '0x5d7d868ed584b04b922905a481f274206a42dd8a';
mint.tokenId = tokenId;
mint.url = 'https://google.com';
mint.chain = model_1.Currency.MATIC;
console.log(await nft_1.mintNFTWithUri(true, mint, 'https://rpc-mumbai.maticvigil.com'));
await sleep();
console.log(await auction_1.sendAuctionApproveNftTransfer(true, {
fromPrivateKey: '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29',
chain: model_1.Currency.MATIC, contractAddress: '0x5d7d868ed584b04b922905a481f274206a42dd8a',
isErc721: true, spender: '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073', tokenId
}, 'https://rpc-mumbai.maticvigil.com'));
await sleep();
const body = new model_1.CreateAuction();
body.fromPrivateKey = '0x1a4344e55c562db08700dd32e52e62e7c40b1ef5e27c6ddd969de9891a899b29';
body.contractAddress = '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073';
body.nftAddress = '0x5d7d868ed584b04b922905a481f274206a42dd8a';
body.tokenId = tokenId;
body.endedAt = (await blockchain_1.polygonGetCurrentBlock()) + 10;
body.id = tokenId;
body.isErc721 = true;
body.erc20Address = '0x326c977e6efc84e512bb9c30f76e30c160ed06fb';
body.seller = '0x811dfbff13adfbc3cf653dcc373c03616d3471c9';
body.chain = model_1.Currency.MATIC;
console.log(await auction_1.sendAuctionCreate(true, body, 'https://rpc-mumbai.maticvigil.com'));
await sleep(2000);
const bid = new model_1.InvokeAuctionOperation();
bid.fromPrivateKey = '0x4874827a55d87f2309c55b835af509e3427aa4d52321eeb49a2b93b5c0f8edfb';
bid.contractAddress = '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073';
bid.id = tokenId;
bid.bidValue = '0.001015';
bid.chain = model_1.Currency.MATIC;
bid.fee = {
gasLimit: '300000',
gasPrice: '5'
};
console.log(await auction_1.sendAuctionBid(true, bid, 'https://rpc-mumbai.maticvigil.com'));
await sleep(20000);
const settle = new model_1.InvokeAuctionOperation();
settle.fromPrivateKey = '0xa488a82b8b57c3ece4307525741fd8256781906c5fad948b85f1d63000948236';
settle.contractAddress = '0x7a2cc5a4788a15d5705b1d31e0ff5cfc4465d073';
settle.id = tokenId;
settle.chain = model_1.Currency.MATIC;
console.log(await auction_1.sendAuctionSettle(true, settle, 'https://rpc-mumbai.maticvigil.com'));
});
});
describe('Exists', () => {
it('true', async () => {
const result = await auction_1.existsAuction(true, model_1.Currency.CELO, '1', '0x9788B3e257ACDA8E772f111D8A70984390181b23', 'https://alfajores-forno.celo-testnet.org');
expect(result).toEqual(true);
});
it('false', async () => {
const result = await auction_1.existsAuction(true, model_1.Currency.CELO, '19595', '0x9788B3e257ACDA8E772f111D8A70984390181b23', 'https://alfajores-forno.celo-testnet.org');
expect(result).toEqual(false);
});
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVjdGlvbi5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25mdC9tYXJrZXRwbGFjZS9hdWN0aW9uLnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpREFBaUc7QUFDakcsNkRBQW9EO0FBQ3BELHVDQUEySztBQUMzSyxtREFJMkI7QUFDM0IsZ0NBQXNDO0FBQ3RDLHVDQUMwSjtBQUUxSixNQUFNLEtBQUssR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFFM0UsUUFBUSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtJQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7UUFFeEMsTUFBTSxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUVoQyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSx3QkFBZ0IsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsb0VBQW9FLENBQUM7WUFDM0YsSUFBSSxDQUFDLFlBQVksR0FBRyw0Q0FBNEMsQ0FBQztZQUNqRSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxHQUFHLGdCQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsZ0JBQVEsQ0FBQyxJQUFJLENBQUM7WUFDM0IsTUFBTSxJQUFJLEdBQUcsTUFBTSx1QkFBYSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsMENBQTBDLENBQUMsQ0FBQztZQUN6RixP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