aiia-vault-sdk 1.1.8 → 1.1.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/dist/SeedRoundFundraiser.d.ts +0 -8
- package/dist/SeedRoundFundraiser.js +1 -1
- package/dist/TradingVault.d.ts +4 -5
- package/dist/TradingVault.js +1 -1
- package/dist/abis/SeedRoundFundraiser.json +2 -2
- package/dist/abis/TradingVault.json +38 -30
- package/dist/contracts/TradingVault.d.ts +36 -30
- package/dist/contracts.json +4 -2
- package/dist/utils.d.ts +6 -0
- package/dist/utils.js +1 -1
- package/dist/utils.test.d.ts +1 -0
- package/dist/utils.test.js +1 -0
- package/package.json +1 -1
@@ -61,14 +61,6 @@ export declare class SeedRoundFundraiserSDK {
|
|
61
61
|
* @throws Will throw if no valid RPC providers are available
|
62
62
|
*/
|
63
63
|
constructor(rpcUrls: string | string[], contractAddress?: string);
|
64
|
-
/**
|
65
|
-
* Gets the network name from the RPC URL
|
66
|
-
*
|
67
|
-
* @param rpcUrl - The RPC URL to parse
|
68
|
-
* @returns The network name (e.g., 'sepolia', 'mainnet', 'base-sepolia')
|
69
|
-
* @private
|
70
|
-
*/
|
71
|
-
private getNetworkNameFromRpc;
|
72
64
|
/**
|
73
65
|
* Imports whitelisted tokens from configuration file
|
74
66
|
*
|
@@ -1 +1 @@
|
|
1
|
-
"use strict";var t=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.SeedRoundFundraiserSDK=void 0;const e=require("ethers"),n=t(require("./abis/SeedRoundFundraiser.json")),o=t(require("./contracts.json")),r=require("./utils"),i=t(require("./whitelist-tokens.json"));exports.SeedRoundFundraiserSDK=class{constructor(t,i){this.name="SeedRoundFundraiser",this.isBootstrapped=!1,this.PRICE_PRECISION=1e18,this.whitelistedTokensArray=[],this.projectToken="",this.projectTokenDecimals=0,this.formatEventArgs=t=>{const{eventName:e,args:n}=t;switch(e){case"TokenWhitelisted":return{...t,args:{...n,token:n.token.toLowerCase(),price:Number(n.price)/this.PRICE_PRECISION}};case"TokenPriceUpdated":return{...t,args:{...n,token:n.token.toLowerCase(),oldPrice:Number(n.oldPrice)/this.PRICE_PRECISION,newPrice:Number(n.newPrice)/this.PRICE_PRECISION}};case"TokenRemovedFromWhitelist":return{...t,args:{...n,token:n.token.toLowerCase()}};case"RoundCreated":case"RoundUpdated":return{...t,args:{...n,roundId:Number(n.roundId),startTime:Number(n.startTime),endTime:Number(n.endTime),targetFund:Number(n.targetFund)/this.PRICE_PRECISION,totalAllocation:Number(n.totalAllocation),maxFundPerAccount:Number(n.maxFundPerAccount)/this.PRICE_PRECISION}};case"RoundEnded":return{...t,args:{...n,roundId:Number(n.roundId),raisedFunds:Number(n.raisedFunds)/this.PRICE_PRECISION,participants:Number(n.participants)}};case"Contribution":return{...t,args:{...n,roundId:Number(n.roundId),contributor:n.contributor.toLowerCase(),token:n.token.toLowerCase(),amount:Number(n.amount),fundAmount:Number(n.fundAmount)/this.PRICE_PRECISION,tokenAllocation:Number(n.tokenAllocation)}};case"TokensClaimed":return{...t,args:{...n,roundId:Number(n.roundId),user:n.user.toLowerCase(),amount:Number(n.amount)}};case"ProjectTokenUpdated":return{...t,args:{...n,oldToken:n.oldToken.toLowerCase(),newToken:n.newToken.toLowerCase()}};case"ClaimingEnabledUpdated":case"RefundEnabledUpdated":return{...t,args:{...n,roundId:Number(n.roundId),enabled:n.enabled}};case"Refunded":return{...t,args:{...n,roundId:Number(n.roundId),user:n.user.toLowerCase(),token:n.token.toLowerCase(),amount:Number(n.amount)}};default:return t}};const s=Array.isArray(t)?t:[t];this.providers=s.map((t=>new e.ethers.JsonRpcProvider(t)));const a=(0,r.getRandomProvider)(this.providers);this.contractAddress=(0,r.resolveContractAddress)(s[0],this.name,o.default,i),this.contract=new e.ethers.Contract(this.contractAddress,n.default.abi,a),this.networkName=this.getNetworkNameFromRpc(s[0]),this.importWhitelistedTokens()}getNetworkNameFromRpc(t){const e=t.toLowerCase();return e.includes("sepolia.base")?"base-sepolia":e.includes("sepolia")?"sepolia":e.includes("mainnet")?"mainnet":e.includes("localhost")||e.includes("127.0.0.1")?"hardhat":"sepolia"}importWhitelistedTokens(){try{i.default[this.networkName]?(this.whitelistedTokensArray=i.default[this.networkName].map((t=>t.toLowerCase())),console.log(`Imported ${this.whitelistedTokensArray.length} whitelisted tokens for ${this.networkName} network`)):console.log(`No whitelisted tokens found for ${this.networkName} network`)}catch(t){console.error("Error importing whitelisted tokens:",t)}}async getWhitelistedTokenInfo(t){const n=t.toLowerCase();if(!this.whitelistedTokensArray.includes(n))return null;const o=await this.getWhitelistedToken(n);if(!o.isWhitelisted)return null;let i="ETH",s=18;n!==e.ethers.ZeroAddress&&([i,s]=await Promise.all([(0,r.getTokenSymbol)(n,this.getRandomProvider()),(0,r.getTokenDecimals)(n,this.getRandomProvider())]));const a=await this.getLatestRoundId();let d=0;if(a>=0){const t=await this.getRound(a);t.exists&&!t.ended&&(d=t.maxFundPerAccount/o.price)}return{address:n,isWhitelisted:o.isWhitelisted,price:o.price,symbol:i,maxContribution:d,maxContributionRaw:Math.floor(d*Math.pow(10,s)),decimals:s}}async getAllWhitelistedTokensInfo(){const t=[];for(const e of this.whitelistedTokensArray){const n=await this.getWhitelistedTokenInfo(e);n&&t.push(n)}return t}getRandomProvider(){return(0,r.getRandomProvider)(this.providers)}getContractWithRandomProvider(){return new e.ethers.Contract(this.contractAddress,n.default.abi,this.getRandomProvider())}async bootstrap(){if(this.isBootstrapped)return;const t=await Promise.all(this.providers.map(((t,e)=>(0,r.checkRpcHealth)(t,e))));if(this.providers=this.providers.filter(((e,n)=>t[n])),0===this.providers.length)throw new Error("No active RPC providers available");this.projectToken=await this.getProjectToken(),this.projectTokenDecimals=await(0,r.getTokenDecimals)(this.projectToken,this.getRandomProvider()),this.isBootstrapped=!0}async signAndSendTransaction(t,e,n={}){return(0,r.signAndSendTransaction)(t,e,(()=>this.getRandomProvider()),n,this.contract)}async buildAddWhitelistedTokenTx(t,e){const n=BigInt(Math.floor(e*this.PRICE_PRECISION));return await this.contract.addWhitelistedToken.populateTransaction(t,n)}async buildUpdateTokenPriceTx(t,e){const n=BigInt(Math.floor(e*this.PRICE_PRECISION));return await this.contract.updateTokenPrice.populateTransaction(t,n)}async buildRemoveWhitelistedTokenTx(t){return await this.contract.removeWhitelistedToken.populateTransaction(t)}async buildCreateRoundTx(t,e,n,o,i){const s=BigInt(Math.floor(n*this.PRICE_PRECISION)),a=BigInt(Math.floor(i*this.PRICE_PRECISION)),d=await(0,r.getTokenDecimals)(await this.getProjectToken(),this.getRandomProvider()),c=BigInt(Math.floor(o*Math.pow(10,d)));return await this.contract.createRound.populateTransaction(t,e,s,c,a)}async buildUpdateRoundTx(t,e,n,o,r,i){const s=BigInt(Math.floor(o*this.PRICE_PRECISION)),a=BigInt(Math.floor(i*this.PRICE_PRECISION));return await this.contract.updateRound.populateTransaction(t,e,n,s,r,a)}async buildEndRoundTx(t){return await this.contract.endRound.populateTransaction(t)}async buildSetClaimingEnabledTx(t,e){return await this.contract.setClaimingEnabled.populateTransaction(t,e)}async buildSetRefundEnabledTx(t,e){return await this.contract.setRefundEnabled.populateTransaction(t,e)}async buildContributeTx(t,n,o){let i=18;n!==e.ethers.ZeroAddress&&(i=await(0,r.getTokenDecimals)(n,this.getRandomProvider()));const s=e.ethers.parseUnits(o.toString(),i),a=await this.contract.contribute.populateTransaction(t,n,n===e.ethers.ZeroAddress?0:s);return n===e.ethers.ZeroAddress&&(a.value=s),a}async buildWithdrawFundsTx(t,e){const n=await(0,r.getTokenDecimals)(t,this.getRandomProvider()),o=BigInt(Math.floor(e*Math.pow(10,n)));return await this.contract.withdrawFunds.populateTransaction(t,o)}async buildClaimTokensByRoundIdTx(t){return await this.contract.claimTokensByRoundId.populateTransaction(t)}async getWhitelistedToken(t){const e=await this.contract.whitelistedTokens(t);return{isWhitelisted:e.isWhitelisted,price:Number(e.price)/this.PRICE_PRECISION}}async getRound(t){const e=await this.contract.rounds(t);return this.projectToken||(this.projectToken=await this.getProjectToken()),this.projectTokenDecimals||(this.projectTokenDecimals=await(0,r.getTokenDecimals)(this.projectToken,this.getRandomProvider())),{startTime:Number(e.startTime),endTime:Number(e.endTime),targetFund:Number(e.targetFund)/this.PRICE_PRECISION,totalAllocation:Number(e.totalAllocation)/10**this.projectTokenDecimals,maxFundPerAccount:Number(e.maxFundPerAccount)/this.PRICE_PRECISION,exists:e.exists,ended:e.ended,claimingEnabled:e.claimingEnabled,refundEnabled:e.refundEnabled}}async getUserContribution(t,n){this.projectToken||(this.projectToken=await this.getProjectToken()),this.projectTokenDecimals||(this.projectTokenDecimals=await(0,r.getTokenDecimals)(this.projectToken,this.getRandomProvider()));const o=await this.contract.userContributions(t,n);let i=18;return o.contributedToken!==e.ethers.ZeroAddress&&"0x0000000000000000000000000000000000000000"!==o.contributedToken&&(i=await(0,r.getTokenDecimals)(o.contributedToken,this.getRandomProvider())),{fundAmount:Number(o.fundAmount)/this.PRICE_PRECISION,tokenAllocation:Number(o.tokenAllocation)/10**this.projectTokenDecimals,claimed:o.claimed,refunded:o.refunded,contributedToken:o.contributedToken,contributedAmount:Number(o.contributedAmount)/10**i}}async getRoundRaisedFunds(t){const e=await this.contract.roundRaisedFunds(t);return Number(e)/this.PRICE_PRECISION}async getRoundParticipants(t){const e=await this.contract.roundParticipants(t);return Number(e)}async getUserParticipatedRound(t){const e=await this.contract.userParticipatedRound(t);return Number(e)}async getProjectToken(){return await this.contract.projectToken()}async getTotalRounds(){const t=await this.contract.totalRounds();return Number(t)}async getTotalRaisedFunds(){const t=await this.contract.totalRaisedFunds();return Number(t)/this.PRICE_PRECISION}async isRoundActive(t){return await this.contract.isRoundActive(t)}async getLatestRoundId(){const t=await this.getTotalRounds();return 0===t?-1:t-1}async getRoundInfo(t){const e=await this.getTotalRounds();if(t<0||t>=e)throw new Error(`Invalid round ID: ${t}`);return{roundId:t,config:await this.getRound(t),raisedFunds:await this.getRoundRaisedFunds(t),participants:await this.getRoundParticipants(t),isActive:await this.isRoundActive(t)}}async getUserTotalContribution(t){const e=await this.contract.getUserTotalContribution(t);return{totalFundAmount:Number(e.totalFundAmount)/this.PRICE_PRECISION,totalTokenAllocation:Number(e.totalTokenAllocation)}}async getTransactionStatus(t,e=10){return await(0,r.getTransactionStatus)(this.getRandomProvider(),t,e)}getContractAddress(){return this.contractAddress}async getAllEvents(t,e){return await this.bootstrap(),(0,r.getAllEvents)(this.contract,(()=>this.getRandomProvider()),(()=>this.getContractWithRandomProvider()),t,e)}async streamEvents(t,e,n,o=1e3,i=5e3){return await this.bootstrap(),(0,r.streamEvents)({getProvider:()=>this.getRandomProvider(),getAllEvents:(t,e)=>this.getAllEvents(t,e),formatEvent:t=>this.formatEventArgs(t),onEvent:e,saveLatestBlock:n,fromBlock:t,batchSize:o,sleepTime:i})}async getUserRoundContribution(t,n){const[o,i]=await Promise.all([this.contract.getUserRoundContribution(t,n),this.contract.rounds(t)]),s={fundAmount:Number(o.fundAmount)/this.PRICE_PRECISION,tokenAllocation:Number(o.tokenAllocation),claimed:o.claimed,refunded:o.refunded,contributedToken:o.contributedToken,contributedAmount:Number(o.contributedAmount)},a=Math.floor(Date.now()/1e3),d=i.exists&&!i.ended&&a>=Number(i.startTime)&&a<=Number(i.endTime),c={contribution:s,roundInfo:{exists:i.exists,isActive:d,claimingEnabled:i.claimingEnabled,refundEnabled:i.refundEnabled}};if(s.fundAmount>0){const t=s.contributedToken;let n="ETH",o=18;return t!==e.ethers.ZeroAddress&&([n,o]=await Promise.all([(0,r.getTokenSymbol)(t,this.getRandomProvider()),(0,r.getTokenDecimals)(t,this.getRandomProvider())])),{...c,tokenInfo:{symbol:n,decimals:o}}}return c}async buildTransferProjectTokenToContract(t){this.projectToken||(this.projectToken=await this.getProjectToken()),this.projectTokenDecimals||(this.projectTokenDecimals=await(0,r.getTokenDecimals)(this.projectToken,this.getRandomProvider()));const n=new e.ethers.Interface(["function transfer(address to, uint256 amount) returns (bool)"]),o=e.ethers.parseUnits(t.toString(),this.projectTokenDecimals);return{to:this.projectToken,data:n.encodeFunctionData("transfer",[this.contractAddress,o])}}};
|
1
|
+
"use strict";var t=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.SeedRoundFundraiserSDK=void 0;const e=require("ethers"),n=t(require("./abis/SeedRoundFundraiser.json")),o=t(require("./contracts.json")),r=require("./utils"),i=t(require("./whitelist-tokens.json"));exports.SeedRoundFundraiserSDK=class{constructor(t,i){this.name="SeedRoundFundraiser",this.isBootstrapped=!1,this.PRICE_PRECISION=1e18,this.whitelistedTokensArray=[],this.projectToken="",this.projectTokenDecimals=0,this.formatEventArgs=t=>{const{eventName:e,args:n}=t;switch(e){case"TokenWhitelisted":return{...t,args:{...n,token:n.token.toLowerCase(),price:Number(n.price)/this.PRICE_PRECISION}};case"TokenPriceUpdated":return{...t,args:{...n,token:n.token.toLowerCase(),oldPrice:Number(n.oldPrice)/this.PRICE_PRECISION,newPrice:Number(n.newPrice)/this.PRICE_PRECISION}};case"TokenRemovedFromWhitelist":return{...t,args:{...n,token:n.token.toLowerCase()}};case"RoundCreated":case"RoundUpdated":return{...t,args:{...n,roundId:Number(n.roundId),startTime:Number(n.startTime),endTime:Number(n.endTime),targetFund:Number(n.targetFund)/this.PRICE_PRECISION,totalAllocation:Number(n.totalAllocation),maxFundPerAccount:Number(n.maxFundPerAccount)/this.PRICE_PRECISION}};case"RoundEnded":return{...t,args:{...n,roundId:Number(n.roundId),raisedFunds:Number(n.raisedFunds)/this.PRICE_PRECISION,participants:Number(n.participants)}};case"Contribution":return{...t,args:{...n,roundId:Number(n.roundId),contributor:n.contributor.toLowerCase(),token:n.token.toLowerCase(),amount:Number(n.amount),fundAmount:Number(n.fundAmount)/this.PRICE_PRECISION,tokenAllocation:Number(n.tokenAllocation)}};case"TokensClaimed":return{...t,args:{...n,roundId:Number(n.roundId),user:n.user.toLowerCase(),amount:Number(n.amount)}};case"ProjectTokenUpdated":return{...t,args:{...n,oldToken:n.oldToken.toLowerCase(),newToken:n.newToken.toLowerCase()}};case"ClaimingEnabledUpdated":case"RefundEnabledUpdated":return{...t,args:{...n,roundId:Number(n.roundId),enabled:n.enabled}};case"Refunded":return{...t,args:{...n,roundId:Number(n.roundId),user:n.user.toLowerCase(),token:n.token.toLowerCase(),amount:Number(n.amount)}};default:return t}};const s=Array.isArray(t)?t:[t];this.providers=s.map((t=>new e.ethers.JsonRpcProvider(t)));const a=(0,r.getRandomProvider)(this.providers);this.contractAddress=(0,r.resolveContractAddress)(s[0],this.name,o.default,i),this.contract=new e.ethers.Contract(this.contractAddress,n.default.abi,a),this.networkName=(0,r.getNetworkFromRpc)(s[0]),this.importWhitelistedTokens()}importWhitelistedTokens(){try{i.default[this.networkName]?(this.whitelistedTokensArray=i.default[this.networkName].map((t=>t.toLowerCase())),console.log(`Imported ${this.whitelistedTokensArray.length} whitelisted tokens for ${this.networkName} network`)):console.log(`No whitelisted tokens found for ${this.networkName} network`)}catch(t){console.error("Error importing whitelisted tokens:",t)}}async getWhitelistedTokenInfo(t){const n=t.toLowerCase();if(!this.whitelistedTokensArray.includes(n))return null;const o=await this.getWhitelistedToken(n);if(!o.isWhitelisted)return null;let i="ETH",s=18;n!==e.ethers.ZeroAddress&&([i,s]=await Promise.all([(0,r.getTokenSymbol)(n,this.getRandomProvider()),(0,r.getTokenDecimals)(n,this.getRandomProvider())]));const a=await this.getLatestRoundId();let d=0;if(a>=0){const t=await this.getRound(a);t.exists&&!t.ended&&(d=t.maxFundPerAccount/o.price)}return{address:n,isWhitelisted:o.isWhitelisted,price:o.price,symbol:i,maxContribution:d,maxContributionRaw:Math.floor(d*Math.pow(10,s)),decimals:s}}async getAllWhitelistedTokensInfo(){const t=[];for(const e of this.whitelistedTokensArray){const n=await this.getWhitelistedTokenInfo(e);n&&t.push(n)}return t}getRandomProvider(){return(0,r.getRandomProvider)(this.providers)}getContractWithRandomProvider(){return new e.ethers.Contract(this.contractAddress,n.default.abi,this.getRandomProvider())}async bootstrap(){if(this.isBootstrapped)return;const t=await Promise.all(this.providers.map(((t,e)=>(0,r.checkRpcHealth)(t,e))));if(this.providers=this.providers.filter(((e,n)=>t[n])),0===this.providers.length)throw new Error("No active RPC providers available");this.projectToken=await this.getProjectToken(),this.projectTokenDecimals=await(0,r.getTokenDecimals)(this.projectToken,this.getRandomProvider()),this.isBootstrapped=!0}async signAndSendTransaction(t,e,n={}){return(0,r.signAndSendTransaction)(t,e,(()=>this.getRandomProvider()),n,this.contract)}async buildAddWhitelistedTokenTx(t,e){const n=BigInt(Math.floor(e*this.PRICE_PRECISION));return await this.contract.addWhitelistedToken.populateTransaction(t,n)}async buildUpdateTokenPriceTx(t,e){const n=BigInt(Math.floor(e*this.PRICE_PRECISION));return await this.contract.updateTokenPrice.populateTransaction(t,n)}async buildRemoveWhitelistedTokenTx(t){return await this.contract.removeWhitelistedToken.populateTransaction(t)}async buildCreateRoundTx(t,e,n,o,i){const s=BigInt(Math.floor(n*this.PRICE_PRECISION)),a=BigInt(Math.floor(i*this.PRICE_PRECISION)),d=await(0,r.getTokenDecimals)(await this.getProjectToken(),this.getRandomProvider()),c=BigInt(Math.floor(o*Math.pow(10,d)));return await this.contract.createRound.populateTransaction(t,e,s,c,a)}async buildUpdateRoundTx(t,e,n,o,r,i){const s=BigInt(Math.floor(o*this.PRICE_PRECISION)),a=BigInt(Math.floor(i*this.PRICE_PRECISION));return await this.contract.updateRound.populateTransaction(t,e,n,s,r,a)}async buildEndRoundTx(t){return await this.contract.endRound.populateTransaction(t)}async buildSetClaimingEnabledTx(t,e){return await this.contract.setClaimingEnabled.populateTransaction(t,e)}async buildSetRefundEnabledTx(t,e){return await this.contract.setRefundEnabled.populateTransaction(t,e)}async buildContributeTx(t,n,o){let i=18;n!==e.ethers.ZeroAddress&&(i=await(0,r.getTokenDecimals)(n,this.getRandomProvider()));const s=e.ethers.parseUnits(o.toString(),i),a=await this.contract.contribute.populateTransaction(t,n,n===e.ethers.ZeroAddress?0:s);return n===e.ethers.ZeroAddress&&(a.value=s),a}async buildWithdrawFundsTx(t,e){const n=await(0,r.getTokenDecimals)(t,this.getRandomProvider()),o=BigInt(Math.floor(e*Math.pow(10,n)));return await this.contract.withdrawFunds.populateTransaction(t,o)}async buildClaimTokensByRoundIdTx(t){return await this.contract.claimTokensByRoundId.populateTransaction(t)}async getWhitelistedToken(t){const e=await this.contract.whitelistedTokens(t);return{isWhitelisted:e.isWhitelisted,price:Number(e.price)/this.PRICE_PRECISION}}async getRound(t){const e=await this.contract.rounds(t);return this.projectToken||(this.projectToken=await this.getProjectToken()),this.projectTokenDecimals||(this.projectTokenDecimals=await(0,r.getTokenDecimals)(this.projectToken,this.getRandomProvider())),{startTime:Number(e.startTime),endTime:Number(e.endTime),targetFund:Number(e.targetFund)/this.PRICE_PRECISION,totalAllocation:Number(e.totalAllocation)/10**this.projectTokenDecimals,maxFundPerAccount:Number(e.maxFundPerAccount)/this.PRICE_PRECISION,exists:e.exists,ended:e.ended,claimingEnabled:e.claimingEnabled,refundEnabled:e.refundEnabled}}async getUserContribution(t,n){this.projectToken||(this.projectToken=await this.getProjectToken()),this.projectTokenDecimals||(this.projectTokenDecimals=await(0,r.getTokenDecimals)(this.projectToken,this.getRandomProvider()));const o=await this.contract.userContributions(t,n);let i=18;return o.contributedToken!==e.ethers.ZeroAddress&&"0x0000000000000000000000000000000000000000"!==o.contributedToken&&(i=await(0,r.getTokenDecimals)(o.contributedToken,this.getRandomProvider())),{fundAmount:Number(o.fundAmount)/this.PRICE_PRECISION,tokenAllocation:Number(o.tokenAllocation)/10**this.projectTokenDecimals,claimed:o.claimed,refunded:o.refunded,contributedToken:o.contributedToken,contributedAmount:Number(o.contributedAmount)/10**i}}async getRoundRaisedFunds(t){const e=await this.contract.roundRaisedFunds(t);return Number(e)/this.PRICE_PRECISION}async getRoundParticipants(t){const e=await this.contract.roundParticipants(t);return Number(e)}async getUserParticipatedRound(t){const e=await this.contract.userParticipatedRound(t);return Number(e)}async getProjectToken(){return await this.contract.projectToken()}async getTotalRounds(){const t=await this.contract.totalRounds();return Number(t)}async getTotalRaisedFunds(){const t=await this.contract.totalRaisedFunds();return Number(t)/this.PRICE_PRECISION}async isRoundActive(t){return await this.contract.isRoundActive(t)}async getLatestRoundId(){const t=await this.getTotalRounds();return 0===t?-1:t-1}async getRoundInfo(t){const e=await this.getTotalRounds();if(t<0||t>=e)throw new Error(`Invalid round ID: ${t}`);return{roundId:t,config:await this.getRound(t),raisedFunds:await this.getRoundRaisedFunds(t),participants:await this.getRoundParticipants(t),isActive:await this.isRoundActive(t)}}async getUserTotalContribution(t){const e=await this.contract.getUserTotalContribution(t);return{totalFundAmount:Number(e.totalFundAmount)/this.PRICE_PRECISION,totalTokenAllocation:Number(e.totalTokenAllocation)}}async getTransactionStatus(t,e=10){return await(0,r.getTransactionStatus)(this.getRandomProvider(),t,e)}getContractAddress(){return this.contractAddress}async getAllEvents(t,e){return await this.bootstrap(),(0,r.getAllEvents)(this.contract,(()=>this.getRandomProvider()),(()=>this.getContractWithRandomProvider()),t,e)}async streamEvents(t,e,n,o=1e3,i=5e3){return await this.bootstrap(),(0,r.streamEvents)({getProvider:()=>this.getRandomProvider(),getAllEvents:(t,e)=>this.getAllEvents(t,e),formatEvent:t=>this.formatEventArgs(t),onEvent:e,saveLatestBlock:n,fromBlock:t,batchSize:o,sleepTime:i})}async getUserRoundContribution(t,n){const[o,i]=await Promise.all([this.contract.getUserRoundContribution(t,n),this.contract.rounds(t)]),s={fundAmount:Number(o.fundAmount)/this.PRICE_PRECISION,tokenAllocation:Number(o.tokenAllocation),claimed:o.claimed,refunded:o.refunded,contributedToken:o.contributedToken,contributedAmount:Number(o.contributedAmount)},a=Math.floor(Date.now()/1e3),d=i.exists&&!i.ended&&a>=Number(i.startTime)&&a<=Number(i.endTime),c={contribution:s,roundInfo:{exists:i.exists,isActive:d,claimingEnabled:i.claimingEnabled,refundEnabled:i.refundEnabled}};if(s.fundAmount>0){const t=s.contributedToken;let n="ETH",o=18;return t!==e.ethers.ZeroAddress&&([n,o]=await Promise.all([(0,r.getTokenSymbol)(t,this.getRandomProvider()),(0,r.getTokenDecimals)(t,this.getRandomProvider())])),{...c,tokenInfo:{symbol:n,decimals:o}}}return c}async buildTransferProjectTokenToContract(t){this.projectToken||(this.projectToken=await this.getProjectToken()),this.projectTokenDecimals||(this.projectTokenDecimals=await(0,r.getTokenDecimals)(this.projectToken,this.getRandomProvider()));const n=new e.ethers.Interface(["function transfer(address to, uint256 amount) returns (bool)"]),o=e.ethers.parseUnits(t.toString(),this.projectTokenDecimals);return{to:this.projectToken,data:n.encodeFunctionData("transfer",[this.contractAddress,o])}}};
|
package/dist/TradingVault.d.ts
CHANGED
@@ -42,16 +42,14 @@ export declare class TradingVaultSDK {
|
|
42
42
|
attempts: number;
|
43
43
|
};
|
44
44
|
}>;
|
45
|
-
buildCreatePositionTx(amount: number): Promise<ethers.ContractTransaction>;
|
46
|
-
buildCreatePositionForUserTx(user: string, amount: number): Promise<ethers.ContractTransaction>;
|
45
|
+
buildCreatePositionTx(amount: number, recipient: string): Promise<ethers.ContractTransaction>;
|
47
46
|
buildReducePositionTx(tokenId: bigint, amount: number): Promise<ethers.ContractTransaction>;
|
48
47
|
buildReducePositionsTx(tokenIds: bigint[], amounts: number[]): Promise<ethers.ContractTransaction>;
|
49
48
|
buildBorrowCurrencyTx(amount: number): Promise<ethers.ContractTransaction>;
|
50
49
|
buildRepayCurrencyTx(amount: number): Promise<ethers.ContractTransaction>;
|
51
50
|
buildSetPriceTx(newPrice: number): Promise<ethers.ContractTransaction>;
|
52
51
|
buildClaimERC20Tx(token: string, amount: number): Promise<ethers.ContractTransaction>;
|
53
|
-
buildCreatePositionTxRaw(amount: bigint): Promise<ethers.ContractTransaction>;
|
54
|
-
buildCreatePositionForUserTxRaw(user: string, amount: bigint): Promise<ethers.ContractTransaction>;
|
52
|
+
buildCreatePositionTxRaw(amount: bigint, recipient: string): Promise<ethers.ContractTransaction>;
|
55
53
|
buildReducePositionTxRaw(tokenId: bigint, amount: bigint): Promise<ethers.ContractTransaction>;
|
56
54
|
buildReducePositionsTxRaw(tokenIds: bigint[], amounts: bigint[]): Promise<ethers.ContractTransaction>;
|
57
55
|
buildBorrowCurrencyTxRaw(amount: bigint): Promise<ethers.ContractTransaction>;
|
@@ -88,7 +86,7 @@ export declare class TradingVaultSDK {
|
|
88
86
|
lossAmount: number;
|
89
87
|
initAmount: number;
|
90
88
|
}>;
|
91
|
-
getPositionRaw(tokenId: bigint): Promise<[bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint] & {
|
89
|
+
getPositionRaw(tokenId: bigint): Promise<[bigint, bigint, bigint, bigint, bigint, bigint, bigint, bigint, string] & {
|
92
90
|
entryPrice: bigint;
|
93
91
|
outPrice: bigint;
|
94
92
|
remainingAmount: bigint;
|
@@ -97,6 +95,7 @@ export declare class TradingVaultSDK {
|
|
97
95
|
closedAt: bigint;
|
98
96
|
rewardedAmount: bigint;
|
99
97
|
lossAmount: bigint;
|
98
|
+
token: string;
|
100
99
|
}>;
|
101
100
|
getRewardConfig(index: number): Promise<[bigint, bigint] & {
|
102
101
|
weight: bigint;
|
package/dist/TradingVault.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
"use strict";var t=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.TradingVaultSDK=void 0;const e=require("ethers"),r=t(require("./abis/TradingVault.json")),a=t(require("./contracts.json")),n=require("./utils");exports.TradingVaultSDK=class{constructor(t,i){this.name="TradingVault",this._currency=null,this._rewardToken=null,this._currencyDecimals=null,this._rewardTokenDecimals=null,this.priceDecimals=6,this.isBootstrapped=!1,this.configs=[],this.BASE_WEIGHT=1e4,this.BASE_PRICE=100,this.formatEventArgs=t=>{const e=this._currencyDecimals,r=this._rewardTokenDecimals,{eventName:a,args:n}=t;switch(a){case"PositionCreated":return{...t,args:{...n,user:n.user.toLowerCase(),amount:Number(n.amount)/Math.pow(10,e),entryPrice:Number(n.entryPrice)/Math.pow(10,this.priceDecimals),tokenId:Number(n.tokenId),openedAt:Number(n.openedAt)}};case"PositionReduced":return{...t,args:{...n,user:n.user.toLowerCase(),reducedAmount:Number(n.reducedAmount)/Math.pow(10,e),remainingAmount:Number(n.remainingAmount)/Math.pow(10,e),totalReward:Number(n.totalReward)/Math.pow(10,r),userReward:Number(n.userReward)/Math.pow(10,r),treasuryReward:Number(n.treasuryReward)/Math.pow(10,r),rewardedAmount:Number(n.rewardedAmount)/Math.pow(10,r),weight:Number(n.weight),tokenId:Number(n.tokenId),lossAmount:Number(n.lossAmount)/Math.pow(10,e),price:Number(n.price)/Math.pow(10,this.priceDecimals),loss:Number(n.loss)/Math.pow(10,e)}};case"CurrencyBorrowed":case"CurrencyRepaid":return{...t,args:{...n,amount:Number(n.amount)/Math.pow(10,e),borrower:n.borrower.toLowerCase()}};case"PriceUpdated":return{...t,args:{...n,oldPrice:Number(n.oldPrice)/Math.pow(10,this.priceDecimals),newPrice:Number(n.newPrice)/Math.pow(10,this.priceDecimals),requiredReward:Number(n.requiredReward)/Math.pow(10,r)}};case"TotalAmountUpdated":return{...t,args:{...n,newTotalAmount:Number(n.newTotalAmount)/Math.pow(10,e)}};case"CurrencyUpdated":return{...t,args:{...n,oldCurrency:n.oldCurrency.toLowerCase(),newCurrency:n.newCurrency.toLowerCase()}};case"RewardTokenUpdated":return{...t,args:{...n,oldRewardToken:n.oldRewardToken.toLowerCase(),newRewardToken:n.newRewardToken.toLowerCase()}};case"ReduceEnabledUpdated":return{...t,args:{...n,enabled:n.enabled}};case"TreasuryUpdated":return{...t,args:{...n,oldTreasury:n.oldTreasury.toLowerCase(),newTreasury:n.newTreasury.toLowerCase()}};case"RewardConfigsUpdated":return{...t,args:{...n}};case"TotalRewardsUpdated":case"TotalRewardsHarvestedUpdated":return{...t,args:{...n,oldAmount:Number(n.oldAmount)/Math.pow(10,r),newAmount:Number(n.newAmount)/Math.pow(10,r)}};default:return t}};const o=Array.isArray(t)?t:[t];this.providers=o.map((t=>new e.ethers.JsonRpcProvider(t)));const s=(0,n.getRandomProvider)(this.providers);this.contractAddress=(0,n.resolveContractAddress)(o[0],this.name,a.default,i),this.contract=new e.ethers.Contract(this.contractAddress,r.default.abi,s)}getRandomProvider(){return(0,n.getRandomProvider)(this.providers)}getContractWithRandomProvider(){return new e.ethers.Contract(this.contractAddress,r.default.abi,this.getRandomProvider())}async bootstrap(){if(this.isBootstrapped)return;const t=await Promise.all(this.providers.map(((t,e)=>(0,n.checkRpcHealth)(t,e))));if(this.providers=this.providers.filter(((e,r)=>t[r])),0===this.providers.length)throw new Error("No active RPC providers available");await Promise.all([this.getCurrencyDecimals(),this.getRewardTokenDecimals(),(async()=>{const t=await this.getRewardConfigsLength(),e=[];for(let r=0;r<t;r++)e.push(this.getRewardConfig(r));const r=await Promise.all(e);this.configs=r.map((t=>({weight:Number(t.weight)/this.BASE_WEIGHT,duration:Number(t.duration)})))})()]),this.isBootstrapped=!0}async signAndSendTransaction(t,e,r={}){return(0,n.signAndSendTransaction)(t,e,(()=>this.getRandomProvider()),r)}async buildCreatePositionTx(t){const e=await this.getCurrencyDecimals(),r=BigInt(Math.floor(t*Math.pow(10,e)));return this.buildCreatePositionTxRaw(r)}async buildCreatePositionForUserTx(t,e){const r=await this.getCurrencyDecimals(),a=BigInt(Math.floor(e*Math.pow(10,r)));return this.buildCreatePositionForUserTxRaw(t,a)}async buildReducePositionTx(t,e){const r=await this.getCurrencyDecimals(),a=BigInt(Math.floor(e*Math.pow(10,r)));return this.buildReducePositionTxRaw(t,a)}async buildReducePositionsTx(t,e){const r=await this.getCurrencyDecimals(),a=e.map((t=>BigInt(Math.floor(t*Math.pow(10,r)))));return this.buildReducePositionsTxRaw(t,a)}async buildBorrowCurrencyTx(t){const e=await this.getCurrencyDecimals(),r=BigInt(Math.floor(t*Math.pow(10,e)));return this.buildBorrowCurrencyTxRaw(r)}async buildRepayCurrencyTx(t){const e=await this.getCurrencyDecimals(),r=BigInt(Math.floor(t*Math.pow(10,e)));return this.buildRepayCurrencyTxRaw(r)}async buildSetPriceTx(t){const e=this.priceDecimals,r=BigInt(Math.floor(t*Math.pow(10,e)));return this.buildSetPriceTxRaw(r)}async buildClaimERC20Tx(t,r){const a=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],this.getRandomProvider()),n=await a.decimals(),i=BigInt(Math.floor(r*Math.pow(10,n)));return this.buildClaimERC20TxRaw(t,i)}async buildCreatePositionTxRaw(t){return await this.contract.createPosition.populateTransaction(t)}async buildCreatePositionForUserTxRaw(t,e){return await this.contract.createPositionForUser.populateTransaction(t,e)}async buildReducePositionTxRaw(t,e){return await this.contract.reducePosition.populateTransaction(t,e)}async buildReducePositionsTxRaw(t,e){return await this.contract.reducePositions.populateTransaction(t,e)}async buildBorrowCurrencyTxRaw(t){return await this.contract.borrowCurrency.populateTransaction(t)}async buildRepayCurrencyTxRaw(t){return await this.contract.repayCurrency.populateTransaction(t)}async buildSetPriceTxRaw(t){return await this.contract.setPrice.populateTransaction(t)}async buildSetCurrencyTxRaw(t){this._currency=null;return await this.contract.setCurrency.populateTransaction(t)}async buildSetRewardTokenTxRaw(t){this._rewardToken=null;return await this.contract.setRewardToken.populateTransaction(t)}async buildSetTreasuryTxRaw(t){return await this.contract.setTreasury.populateTransaction(t)}async buildUpdateRewardConfigsTxRaw(t){return await this.contract.updateRewardConfigs.populateTransaction(t)}async buildSetReduceEnabledTxRaw(t){return await this.contract.setReduceEnabled.populateTransaction(t)}async buildClaimERC20TxRaw(t,e){return await this.contract.claimERC20.populateTransaction(t,e)}async buildApproveERC20Tx(t,r,a){const n=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],this.getRandomProvider()),i=await n.decimals(),o=BigInt(Math.floor(a*Math.pow(10,Number(i))));return this.buildApproveERC20TxRaw(t,r,o)}async buildApproveERC20TxRaw(t,e,r){return await(0,n.buildApproveERC20Tx)(t,e,r,this.getRandomProvider())}async getAllowanceRaw(t,e,r){return await(0,n.getTokenAllowance)(t,e,r,this.getRandomProvider())}async getAllowance(t,e,r){const[a,i]=await Promise.all([this.getAllowanceRaw(t,e,r),(0,n.getTokenDecimals)(t,this.getRandomProvider())]);return Number(a)/Math.pow(10,i)}async buildGrantOperatorRoleTxRaw(t){return await this.contract.grantOperatorRole.populateTransaction(t)}async getPrice(){const t=await this.getPriceRaw(),e=this.priceDecimals;return Number(t)/Math.pow(10,e)}async getPriceRaw(){return await this.contract.price()}async getCurrency(){return this._currency||(this._currency=await this.contract.currency()),this._currency}async getRewardToken(){return this._rewardToken||(this._rewardToken=await this.contract.rewardToken()),this._rewardToken}async getTreasury(){return await this.contract.treasury()}async getTotalAmount(){const t=await this.getTotalAmountRaw(),e=await this.getCurrencyDecimals();return Number(t)/Math.pow(10,e)}async getTotalAmountRaw(){return await this.contract.totalAmount()}async getTotalBorrowed(){const t=await this.getTotalBorrowedRaw(),e=await this.getCurrencyDecimals();return Number(t)/Math.pow(10,e)}async getTotalBorrowedRaw(){return await this.contract.totalBorrowed()}async isReduceEnabled(){return await this.contract.isReduceEnabled()}async getPosition(t){const e=await this.getPositionRaw(t),r=await this.getCurrencyDecimals(),a=await this.getRewardTokenDecimals(),n=this.priceDecimals;return{remainingAmount:Number(e.remainingAmount)/Math.pow(10,r),entryPrice:Number(e.entryPrice)/Math.pow(10,n),outPrice:Number(e.outPrice)/Math.pow(10,n),openedAt:Number(e.openedAt),closedAt:Number(e.closedAt),rewardedAmount:Number(e.rewardedAmount)/Math.pow(10,a),lossAmount:Number(e.lossAmount)/Math.pow(10,r),initAmount:Number(e.initAmount)/Math.pow(10,r)}}async getPositionRaw(t){return await this.contract.positions(t)}async getRewardConfig(t){return await this.contract.rewardConfigs(t)}async getRewardConfigsLength(){return await this.contract.getRewardConfigsLength()}async getCurrencyDecimals(){if(null===this._currencyDecimals){const t=await this.getCurrency(),r=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],this.getRandomProvider());this._currencyDecimals=Number(await r.decimals())}return this._currencyDecimals}async getRewardTokenDecimals(){if(null===this._rewardTokenDecimals){const t=await this.getRewardToken(),r=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],this.getRandomProvider());this._rewardTokenDecimals=Number(await r.decimals())}return this._rewardTokenDecimals}getContractAddress(){return this.contractAddress}getConfigs(){return[...this.configs]}async getAllEvents(t,e){return await this.bootstrap(),(0,n.getAllEvents)(this.contract,(()=>this.getRandomProvider()),(()=>this.getContractWithRandomProvider()),t,e)}async streamEvents(t,e,r,a=1e3,i=5e3){return await this.bootstrap(),(0,n.streamEvents)({getProvider:()=>this.getRandomProvider(),getAllEvents:(t,e)=>this.getAllEvents(t,e),formatEvent:t=>this.formatEventArgs(t),onEvent:e,saveLatestBlock:r,fromBlock:t,batchSize:a,sleepTime:i})}estimateUnrealizedPnl({price:t,entryPrice:e,initAmount:r,remainingAmount:a}){const n=a*(t-e)/this.BASE_PRICE;return{pnl:n,pnlPercentage:n/r*100}}estReducePosition({amount:t,price:e,entryPrice:r,openedAt:a,configs:n=[]}){const i=this.BASE_PRICE;this.BASE_WEIGHT;let o=t,s=0,c=0,u=0,d=0;if(e<r){return o=t-t*(r-e)/100,{amount:o,totalReward:0,userReward:0,treasuryReward:0,weight:0}}if(e>=r){s=t*(e-r)/i;const o=Math.floor(Date.now()/1e3)-a;d=this.getRewardWeight(o,n),c=s*d,u=s-c}return{amount:o,totalReward:s,userReward:c,treasuryReward:u,weight:d}}estReducePositions({positions:t,price:e,configs:r=[]}){return t.map((t=>this.estReducePosition({amount:t.amount,price:e,entryPrice:t.entryPrice,openedAt:t.openedAt,configs:r}))).reduce(((t,e)=>({amount:t.amount+e.amount,totalReward:t.totalReward+e.totalReward,userReward:t.userReward+e.userReward,treasuryReward:t.treasuryReward+e.treasuryReward})),{amount:0,totalReward:0,userReward:0,treasuryReward:0})}getRewardWeight(t,e){return(0,n.getRewardWeight)(t,e)}estimateUnrealizedPnls({price:t,positions:e}){return e.reduce(((e,r)=>{const{pnl:a}=this.estimateUnrealizedPnl({price:t,...r});return{totalInitAmount:e.totalInitAmount+r.initAmount,totalRemainingAmount:e.totalRemainingAmount+r.remainingAmount,totalRewardedAmount:e.totalRewardedAmount+r.rewardedAmount,totalLossAmount:e.totalLossAmount+r.lossAmount,totalPnl:e.totalPnl+a}}),{totalInitAmount:0,totalRemainingAmount:0,totalRewardedAmount:0,totalLossAmount:0,totalPnl:0})}async buildAddReward(t){const e=await this.getRewardTokenDecimals(),r=BigInt(Math.floor(t*Math.pow(10,e)));return this.buildAddRewardTxRaw(r)}async buildAddRewardTxRaw(t){return await this.contract.addReward.populateTransaction(t)}};
|
1
|
+
"use strict";var t=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.TradingVaultSDK=void 0;const e=require("ethers"),r=t(require("./abis/TradingVault.json")),a=t(require("./contracts.json")),n=require("./utils");exports.TradingVaultSDK=class{constructor(t,i){this.name="TradingVault",this._currency=null,this._rewardToken=null,this._currencyDecimals=null,this._rewardTokenDecimals=null,this.priceDecimals=6,this.isBootstrapped=!1,this.configs=[],this.BASE_WEIGHT=1e4,this.BASE_PRICE=100,this.formatEventArgs=t=>{const e=this._currencyDecimals,r=this._rewardTokenDecimals,{eventName:a,args:n}=t;switch(a){case"PositionCreated":return{...t,args:{...n,user:n.user.toLowerCase(),amount:Number(n.amount)/Math.pow(10,e),entryPrice:Number(n.entryPrice)/Math.pow(10,this.priceDecimals),tokenId:Number(n.tokenId),openedAt:Number(n.openedAt)}};case"PositionReduced":return{...t,args:{...n,user:n.user.toLowerCase(),reducedAmount:Number(n.reducedAmount)/Math.pow(10,e),remainingAmount:Number(n.remainingAmount)/Math.pow(10,e),totalReward:Number(n.totalReward)/Math.pow(10,r),userReward:Number(n.userReward)/Math.pow(10,r),treasuryReward:Number(n.treasuryReward)/Math.pow(10,r),rewardedAmount:Number(n.rewardedAmount)/Math.pow(10,r),weight:Number(n.weight),tokenId:Number(n.tokenId),lossAmount:Number(n.lossAmount)/Math.pow(10,e),price:Number(n.price)/Math.pow(10,this.priceDecimals),loss:Number(n.loss)/Math.pow(10,e)}};case"CurrencyBorrowed":case"CurrencyRepaid":return{...t,args:{...n,amount:Number(n.amount)/Math.pow(10,e),borrower:n.borrower.toLowerCase()}};case"PriceUpdated":return{...t,args:{...n,oldPrice:Number(n.oldPrice)/Math.pow(10,this.priceDecimals),newPrice:Number(n.newPrice)/Math.pow(10,this.priceDecimals),requiredReward:Number(n.requiredReward)/Math.pow(10,r)}};case"TotalAmountUpdated":return{...t,args:{...n,newTotalAmount:Number(n.newTotalAmount)/Math.pow(10,e)}};case"CurrencyUpdated":return{...t,args:{...n,oldCurrency:n.oldCurrency.toLowerCase(),newCurrency:n.newCurrency.toLowerCase()}};case"RewardTokenUpdated":return{...t,args:{...n,oldRewardToken:n.oldRewardToken.toLowerCase(),newRewardToken:n.newRewardToken.toLowerCase()}};case"ReduceEnabledUpdated":return{...t,args:{...n,enabled:n.enabled}};case"TreasuryUpdated":return{...t,args:{...n,oldTreasury:n.oldTreasury.toLowerCase(),newTreasury:n.newTreasury.toLowerCase()}};case"RewardConfigsUpdated":return{...t,args:{...n}};case"TotalRewardsUpdated":case"TotalRewardsHarvestedUpdated":return{...t,args:{...n,oldAmount:Number(n.oldAmount)/Math.pow(10,r),newAmount:Number(n.newAmount)/Math.pow(10,r)}};default:return t}};const o=Array.isArray(t)?t:[t];this.providers=o.map((t=>new e.ethers.JsonRpcProvider(t)));const s=(0,n.getRandomProvider)(this.providers);this.contractAddress=(0,n.resolveContractAddress)(o[0],this.name,a.default,i),this.contract=new e.ethers.Contract(this.contractAddress,r.default.abi,s)}getRandomProvider(){return(0,n.getRandomProvider)(this.providers)}getContractWithRandomProvider(){return new e.ethers.Contract(this.contractAddress,r.default.abi,this.getRandomProvider())}async bootstrap(){if(this.isBootstrapped)return;const t=await Promise.all(this.providers.map(((t,e)=>(0,n.checkRpcHealth)(t,e))));if(this.providers=this.providers.filter(((e,r)=>t[r])),0===this.providers.length)throw new Error("No active RPC providers available");await Promise.all([this.getCurrencyDecimals(),this.getRewardTokenDecimals(),(async()=>{const t=await this.getRewardConfigsLength(),e=[];for(let r=0;r<t;r++)e.push(this.getRewardConfig(r));const r=await Promise.all(e);this.configs=r.map((t=>({weight:Number(t.weight)/this.BASE_WEIGHT,duration:Number(t.duration)})))})()]),this.isBootstrapped=!0}async signAndSendTransaction(t,e,r={}){return(0,n.signAndSendTransaction)(t,e,(()=>this.getRandomProvider()),r)}async buildCreatePositionTx(t,e){const r=await this.getCurrencyDecimals(),a=BigInt(Math.floor(t*Math.pow(10,r)));return this.buildCreatePositionTxRaw(a,e)}async buildReducePositionTx(t,e){const r=await this.getCurrencyDecimals(),a=BigInt(Math.floor(e*Math.pow(10,r)));return this.buildReducePositionTxRaw(t,a)}async buildReducePositionsTx(t,e){const r=await this.getCurrencyDecimals(),a=e.map((t=>BigInt(Math.floor(t*Math.pow(10,r)))));return this.buildReducePositionsTxRaw(t,a)}async buildBorrowCurrencyTx(t){const e=await this.getCurrencyDecimals(),r=BigInt(Math.floor(t*Math.pow(10,e)));return this.buildBorrowCurrencyTxRaw(r)}async buildRepayCurrencyTx(t){const e=await this.getCurrencyDecimals(),r=BigInt(Math.floor(t*Math.pow(10,e)));return this.buildRepayCurrencyTxRaw(r)}async buildSetPriceTx(t){const e=this.priceDecimals,r=BigInt(Math.floor(t*Math.pow(10,e)));return this.buildSetPriceTxRaw(r)}async buildClaimERC20Tx(t,r){const a=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],this.getRandomProvider()),n=await a.decimals(),i=BigInt(Math.floor(r*Math.pow(10,n)));return this.buildClaimERC20TxRaw(t,i)}async buildCreatePositionTxRaw(t,e){return await this.contract.createPosition.populateTransaction(t,e)}async buildReducePositionTxRaw(t,e){return await this.contract.reducePosition.populateTransaction(t,e)}async buildReducePositionsTxRaw(t,e){return await this.contract.reducePositions.populateTransaction(t,e)}async buildBorrowCurrencyTxRaw(t){return await this.contract.borrowCurrency.populateTransaction(t)}async buildRepayCurrencyTxRaw(t){return await this.contract.repayCurrency.populateTransaction(t)}async buildSetPriceTxRaw(t){return await this.contract.setPrice.populateTransaction(t)}async buildSetCurrencyTxRaw(t){this._currency=null;return await this.contract.setCurrency.populateTransaction(t)}async buildSetRewardTokenTxRaw(t){this._rewardToken=null;return await this.contract.setRewardToken.populateTransaction(t)}async buildSetTreasuryTxRaw(t){return await this.contract.setTreasury.populateTransaction(t)}async buildUpdateRewardConfigsTxRaw(t){return await this.contract.updateRewardConfigs.populateTransaction(t)}async buildSetReduceEnabledTxRaw(t){return await this.contract.setReduceEnabled.populateTransaction(t)}async buildClaimERC20TxRaw(t,e){return await this.contract.claimERC20.populateTransaction(t,e)}async buildApproveERC20Tx(t,r,a){const n=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],this.getRandomProvider()),i=await n.decimals(),o=BigInt(Math.floor(a*Math.pow(10,Number(i))));return this.buildApproveERC20TxRaw(t,r,o)}async buildApproveERC20TxRaw(t,e,r){return await(0,n.buildApproveERC20Tx)(t,e,r,this.getRandomProvider())}async getAllowanceRaw(t,e,r){return await(0,n.getTokenAllowance)(t,e,r,this.getRandomProvider())}async getAllowance(t,e,r){const[a,i]=await Promise.all([this.getAllowanceRaw(t,e,r),(0,n.getTokenDecimals)(t,this.getRandomProvider())]);return Number(a)/Math.pow(10,i)}async buildGrantOperatorRoleTxRaw(t){return await this.contract.grantOperatorRole.populateTransaction(t)}async getPrice(){const t=await this.getPriceRaw(),e=this.priceDecimals;return Number(t)/Math.pow(10,e)}async getPriceRaw(){return await this.contract.price()}async getCurrency(){return this._currency||(this._currency=await this.contract.currency()),this._currency}async getRewardToken(){return this._rewardToken||(this._rewardToken=await this.contract.rewardToken()),this._rewardToken}async getTreasury(){return await this.contract.treasury()}async getTotalAmount(){const t=await this.getTotalAmountRaw(),e=await this.getCurrencyDecimals();return Number(t)/Math.pow(10,e)}async getTotalAmountRaw(){return await this.contract.totalAmount()}async getTotalBorrowed(){const t=await this.getTotalBorrowedRaw(),e=await this.getCurrencyDecimals();return Number(t)/Math.pow(10,e)}async getTotalBorrowedRaw(){return await this.contract.totalBorrowed()}async isReduceEnabled(){return await this.contract.isReduceEnabled()}async getPosition(t){const e=await this.getPositionRaw(t),r=await this.getCurrencyDecimals(),a=await this.getRewardTokenDecimals(),n=this.priceDecimals;return{remainingAmount:Number(e.remainingAmount)/Math.pow(10,r),entryPrice:Number(e.entryPrice)/Math.pow(10,n),outPrice:Number(e.outPrice)/Math.pow(10,n),openedAt:Number(e.openedAt),closedAt:Number(e.closedAt),rewardedAmount:Number(e.rewardedAmount)/Math.pow(10,a),lossAmount:Number(e.lossAmount)/Math.pow(10,r),initAmount:Number(e.initAmount)/Math.pow(10,r)}}async getPositionRaw(t){return await this.contract.positions(t)}async getRewardConfig(t){return await this.contract.rewardConfigs(t)}async getRewardConfigsLength(){return await this.contract.getRewardConfigsLength()}async getCurrencyDecimals(){if(null===this._currencyDecimals){const t=await this.getCurrency(),r=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],this.getRandomProvider());this._currencyDecimals=Number(await r.decimals())}return this._currencyDecimals}async getRewardTokenDecimals(){if(null===this._rewardTokenDecimals){const t=await this.getRewardToken(),r=new e.ethers.Contract(t,["function decimals() view returns (uint8)"],this.getRandomProvider());this._rewardTokenDecimals=Number(await r.decimals())}return this._rewardTokenDecimals}getContractAddress(){return this.contractAddress}getConfigs(){return[...this.configs]}async getAllEvents(t,e){return await this.bootstrap(),(0,n.getAllEvents)(this.contract,(()=>this.getRandomProvider()),(()=>this.getContractWithRandomProvider()),t,e)}async streamEvents(t,e,r,a=1e3,i=5e3){return await this.bootstrap(),(0,n.streamEvents)({getProvider:()=>this.getRandomProvider(),getAllEvents:(t,e)=>this.getAllEvents(t,e),formatEvent:t=>this.formatEventArgs(t),onEvent:e,saveLatestBlock:r,fromBlock:t,batchSize:a,sleepTime:i})}estimateUnrealizedPnl({price:t,entryPrice:e,initAmount:r,remainingAmount:a}){const n=a*(t-e)/this.BASE_PRICE;return{pnl:n,pnlPercentage:n/r*100}}estReducePosition({amount:t,price:e,entryPrice:r,openedAt:a,configs:n=[]}){const i=this.BASE_PRICE;this.BASE_WEIGHT;let o=t,s=0,c=0,u=0,d=0;if(e<r){return o=t-t*(r-e)/100,{amount:o,totalReward:0,userReward:0,treasuryReward:0,weight:0}}if(e>=r){s=t*(e-r)/i;const o=Math.floor(Date.now()/1e3)-a;d=this.getRewardWeight(o,n),c=s*d,u=s-c}return{amount:o,totalReward:s,userReward:c,treasuryReward:u,weight:d}}estReducePositions({positions:t,price:e,configs:r=[]}){return t.map((t=>this.estReducePosition({amount:t.amount,price:e,entryPrice:t.entryPrice,openedAt:t.openedAt,configs:r}))).reduce(((t,e)=>({amount:t.amount+e.amount,totalReward:t.totalReward+e.totalReward,userReward:t.userReward+e.userReward,treasuryReward:t.treasuryReward+e.treasuryReward})),{amount:0,totalReward:0,userReward:0,treasuryReward:0})}getRewardWeight(t,e){return(0,n.getRewardWeight)(t,e)}estimateUnrealizedPnls({price:t,positions:e}){return e.reduce(((e,r)=>{const{pnl:a}=this.estimateUnrealizedPnl({price:t,...r});return{totalInitAmount:e.totalInitAmount+r.initAmount,totalRemainingAmount:e.totalRemainingAmount+r.remainingAmount,totalRewardedAmount:e.totalRewardedAmount+r.rewardedAmount,totalLossAmount:e.totalLossAmount+r.lossAmount,totalPnl:e.totalPnl+a}}),{totalInitAmount:0,totalRemainingAmount:0,totalRewardedAmount:0,totalLossAmount:0,totalPnl:0})}async buildAddReward(t){const e=await this.getRewardTokenDecimals(),r=BigInt(Math.floor(t*Math.pow(10,e)));return this.buildAddRewardTxRaw(r)}async buildAddRewardTxRaw(t){return await this.contract.addReward.populateTransaction(t)}};
|
@@ -1542,8 +1542,8 @@
|
|
1542
1542
|
"type": "receive"
|
1543
1543
|
}
|
1544
1544
|
],
|
1545
|
-
"bytecode": "0x608060405234801561001057600080fd5b5061001f61002460201b60201c565b61018e565b600061003461012860201b60201c565b90508060000160089054906101000a900460ff161561007f576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff80168160000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16146101255767ffffffffffffffff8160000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d267ffffffffffffffff60405161011c9190610173565b60405180910390a15b50565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b600067ffffffffffffffff82169050919050565b61016d81610150565b82525050565b60006020820190506101886000830184610164565b92915050565b614c2c8061019d6000396000f3fe6080604052600436106102765760003560e01c806397ac4a251161014f578063d4bcdfa1116100c1578063ed54890d1161007a578063ed54890d14610995578063efe9c9e2146109d7578063f0a3a97c14610a00578063f0e1bb3e14610a2b578063f2fde38b14610a68578063f5b541a614610a9157610277565b8063d4bcdfa114610861578063d4ee651b1461088a578063d547741f146108b3578063d871b0e3146108dc578063daf9c2101461091a578063eb4c9e9b1461095857610277565b8063a6be83dd11610113578063a6be83dd14610769578063a734f06e14610792578063c1075329146107bd578063c213df78146107e6578063c4428a891461080f578063c4d66de81461083857610277565b806397ac4a25146106705780639bb92c4e146106ad5780639da64ac2146106d6578063a09686c414610713578063a217fddf1461073e57610277565b80636fed6940116101e85780638a568299116101ac5780638a568299146105435780638c65c81f1461056e5780638d52e555146105b45780638da5cb5b146105dd57806391d148541461060857806395082d251461064557610277565b80636fed694014610481578063715018a6146104be5780637ad226dc146104d55780637cf30c60146104fe5780638952ac1e1461052757610277565b80632f2ff15d1161023a5780632f2ff15d1461038757806336568abe146103b057806342683c67146103d95780634b60ce77146104045780635a1e6ca11461042f5780635af6df4c1461045857610277565b806301ffc9a7146102795780631c88705d146102b6578063248a9ca3146102df57806327ac0c581461031c57806328f3e6581461034557610277565b5b005b34801561028557600080fd5b506102a0600480360381019061029b919061421c565b610abc565b6040516102ad9190614264565b60405180910390f35b3480156102c257600080fd5b506102dd60048036038101906102d891906142dd565b610ace565b005b3480156102eb57600080fd5b5061030660048036038101906103019190614340565b610c1e565b604051610313919061437c565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e91906142dd565b610c4c565b005b34801561035157600080fd5b5061036c600480360381019061036791906143cd565b610c88565b60405161037e9695949392919061442b565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a9919061448c565b610d54565b005b3480156103bc57600080fd5b506103d760048036038101906103d2919061448c565b610d76565b005b3480156103e557600080fd5b506103ee610df1565b6040516103fb91906144cc565b60405180910390f35b34801561041057600080fd5b50610419610df7565b60405161042691906144e7565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190614502565b610e1d565b005b34801561046457600080fd5b5061047f600480360381019061047a919061452f565b610f8e565b005b34801561048d57600080fd5b506104a860048036038101906104a39190614502565b61128b565b6040516104b591906144cc565b60405180910390f35b3480156104ca57600080fd5b506104d36112a3565b005b3480156104e157600080fd5b506104fc60048036038101906104f791906143cd565b6112b7565b005b34801561050a57600080fd5b50610525600480360381019061052091906145d6565b6118ec565b005b610541600480360381019061053c9190614616565b6119db565b005b34801561054f57600080fd5b50610558612210565b60405161056591906144cc565b60405180910390f35b34801561057a57600080fd5b5061059560048036038101906105909190614502565b612216565b6040516105ab9a99989796959493929190614669565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d691906145d6565b6122ab565b005b3480156105e957600080fd5b506105f261239a565b6040516105ff91906144e7565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a919061448c565b6123d2565b60405161063c9190614264565b60405180910390f35b34801561065157600080fd5b5061065a61244b565b60405161066791906144cc565b60405180910390f35b34801561067c57600080fd5b5061069760048036038101906106929190614502565b612457565b6040516106a49190614264565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf91906145d6565b61254d565b005b3480156106e257600080fd5b506106fd60048036038101906106f891906142dd565b61263c565b60405161070a91906144cc565b60405180910390f35b34801561071f57600080fd5b506107286126a9565b60405161073591906144cc565b60405180910390f35b34801561074a57600080fd5b506107536126b3565b604051610760919061437c565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b9190614705565b6126ba565b005b34801561079e57600080fd5b506107a76129e4565b6040516107b491906144e7565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190614792565b6129e9565b005b3480156107f257600080fd5b5061080d600480360381019061080891906142dd565b612cdd565b005b34801561081b57600080fd5b5061083660048036038101906108319190614502565b612d19565b005b34801561084457600080fd5b5061085f600480360381019061085a91906142dd565b612d26565b005b34801561086d57600080fd5b5061088860048036038101906108839190614792565b612f9d565b005b34801561089657600080fd5b506108b160048036038101906108ac9190614792565b613177565b005b3480156108bf57600080fd5b506108da60048036038101906108d5919061448c565b613342565b005b3480156108e857600080fd5b5061090360048036038101906108fe91906142dd565b613364565b6040516109119291906147d2565b60405180910390f35b34801561092657600080fd5b50610941600480360381019061093c91906142dd565b613400565b60405161094f9291906147fb565b60405180910390f35b34801561096457600080fd5b5061097f600480360381019061097a91906142dd565b613431565b60405161098c91906144cc565b60405180910390f35b3480156109a157600080fd5b506109bc60048036038101906109b791906143cd565b613449565b6040516109ce9695949392919061442b565b60405180910390f35b3480156109e357600080fd5b506109fe60048036038101906109f991906142dd565b6134cc565b005b348015610a0c57600080fd5b50610a15613623565b604051610a22919061437c565b60405180910390f35b348015610a3757600080fd5b50610a526004803603810190610a4d9190614502565b613647565b604051610a5f91906144cc565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a91906142dd565b61365f565b005b348015610a9d57600080fd5b50610aa66136e5565b604051610ab3919061437c565b60405180910390f35b6000610ac782613709565b9050919050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610af881613783565b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16610b7d576040517ff84835a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fdd2e6d9f52cbe8f695939d018b7d4a216dc613a669876163ac548b916489d91760405160405180910390a25050565b600080610c29613797565b905080600001600084815260200190815260200160002060010154915050919050565b6000801b610c5981613783565b610c837f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929836137bf565b505050565b6000806000806000806000600260008a815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015481600101548260020160009054906101000a900460ff168360020160019054906101000a900460ff168460020160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560030154965096509650965096509650509295509295509295565b610d5d82610c1e565b610d6681613783565b610d7083836137bf565b50505050565b610d7e6138c0565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dec82826138c8565b505050565b60085481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610e4781613783565b6001600083815260200190815260200160002060050160009054906101000a900460ff16610ea1576040517f266f368500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600083815260200190815260200160002060050160019054906101000a900460ff1615610efc576040517f0f5eeea600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180600084815260200190815260200160002060050160016101000a81548160ff021916908315150217905550817fc5285db7d8a9c3a0ce0e8982ff9a84fe8df355101d9545735558c69efb4aad5760036000858152602001908152602001600020546004600086815260200190815260200160002054604051610f829291906147d2565b60405180910390a25050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610fb881613783565b42861015610ff2576040517fb290253c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85851161102b576040517f38af65f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403611065576040517fe2494de700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000830361109f576040517f0baf743200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008214806110ad57508382115b156110e4576040517f90e3cae900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060075490506040518061014001604052808881526020018781526020018681526020018581526020018481526020016001151581526020016000151581526020016000151581526020016000151581526020016001151581525060016000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff02191690831515021790555060e08201518160050160026101000a81548160ff0219169083151502179055506101008201518160050160036101000a81548160ff0219169083151502179055506101208201518160050160046101000a81548160ff0219169083151502179055509050506007600081548092919061123d90614853565b9190505550807f21fb045299ceafb7a136c74ee07b22d481ee9bf37a85b2d8f20c59f83ada4133888888888860405161127a95949392919061489b565b60405180910390a250505050505050565b60046020528060005260406000206000915090505481565b6112ab6139ca565b6112b56000613a51565b565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296112e181613783565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611347576040517f702b3d9000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600084815260200190815260200160002060050160009054906101000a900460ff166113a1576040517f266f368500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600084815260200190815260200160002060050160039054906101000a900460ff166113fb576040517f089c998700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001540361148d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060020160009054906101000a900460ff16156114d6576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060020160019054906101000a900460ff161561151f576040517fa85e6f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008160020160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600082600301549050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115c457478111156115bf576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167e565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115ff91906144e7565b602060405180830381865afa15801561161c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116409190614903565b90508082111561167c576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60018360020160016101000a81548160ff02191690831515021790555082600001546003600088815260200190815260200160002060008282546116c29190614930565b925050819055508260000154600860008282546116df9190614930565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117c35760008573ffffffffffffffffffffffffffffffffffffffff168260405161174090614995565b60006040518083038185875af1925050503d806000811461177d576040519150601f19603f3d011682016040523d82523d6000602084013e611782565b606091505b50509050806117bd576040517f6d963f8800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5061187e565b60008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87846040518363ffffffff1660e01b81526004016118009291906149aa565b6020604051808303816000875af115801561181f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184391906149e8565b90508061187c576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16877f1c26abe6289671e3a9d493647349673af828abb9dbadff1e81762387f7cd99a3846040516118dc91906144cc565b60405180910390a4505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92961191681613783565b6001600084815260200190815260200160002060050160009054906101000a900460ff16611970576040517f266f368500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600085815260200190815260200160002060050160036101000a81548160ff021916908315150217905550827f653b56ea3ea7dfba44234dbc807bac97a2a0adafb6d22427d818250375f1e911836040516119ce9190614264565b60405180910390a2505050565b6119e483612457565b611a1a576040517f3df07da500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16611a9f576040517ff84835a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b165760003403611b0e576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b349050611b54565b60008203611b50576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8190505b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008114158015611bb55750600185611bb19190614a15565b8114155b15611c15576001600086815260200190815260200160002060050160049054906101000a900460ff16611c14576040517f827a86b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b60008060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000670de0b6b3a76400008285611c729190614a49565b611c7c9190614aba565b905060006002600089815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000828260000154611ce49190614a15565b9050600160008a815260200190815260200160002060040154811115611d36576040517f1cd861cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083600360008c815260200190815260200160002054611d579190614a15565b9050600160008b815260200190815260200160002060020154811115611da9576040517f397bb34300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614611e9a5760008973ffffffffffffffffffffffffffffffffffffffff166323b872dd33308b6040518463ffffffff1660e01b8152600401611e1c93929190614aeb565b6020604051808303816000875af1158015611e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5f91906149e8565b905080611e98576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b6000600160008c815260200190815260200160002060020154600160008d81526020019081526020016000206003015486611ed59190614a49565b611edf9190614aba565b90506000846000015403611fb757600460008c81526020019081526020016000206000815480929190611f1190614853565b919050555060018b611f239190614a15565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550898460020160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550878460030181905550612061565b8973ffffffffffffffffffffffffffffffffffffffff168460020160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361202e57878460030160008282546120229190614a15565b92505081905550612060565b6040517ff84835a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b848460000160008282546120759190614a15565b92505081905550808460010160008282546120909190614a15565b9250508190555084600360008d815260200190815260200160002060008282546120ba9190614a15565b9250508190555084600860008282546120d39190614a15565b92505081905550600160008c815260200190815260200160002060020154600360008d815260200190815260200160002054106121995760018060008d815260200190815260200160002060050160016101000a81548160ff0219169083151502179055508a7fc5285db7d8a9c3a0ce0e8982ff9a84fe8df355101d9545735558c69efb4aad57600360008e815260200190815260200160002054600460008f8152602001908152602001600020546040516121909291906147d2565b60405180910390a25b8973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168c7fb479ec976a9860505652c0d9f5dc15bc5fbca1a55c3da9cabe662f1b6f8090d28b89866040516121fb93929190614b22565b60405180910390a45050505050505050505050565b60075481565b60016020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff16908060050160019054906101000a900460ff16908060050160029054906101000a900460ff16908060050160039054906101000a900460ff16908060050160049054906101000a900460ff1690508a565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296122d581613783565b6001600084815260200190815260200160002060050160009054906101000a900460ff1661232f576040517f266f368500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600085815260200190815260200160002060050160046101000a81548160ff021916908315150217905550827f1c1c03453d1eefaa85a62e371adba496bc16fa6320bf5416b0af1249081ca84c8360405161238d9190614264565b60405180910390a2505050565b6000806123a5613b28565b90508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b6000806123dd613797565b905080600001600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691505092915050565b670de0b6b3a764000081565b60006001600083815260200190815260200160002060050160009054906101000a900460ff1661248a5760009050612548565b6001600083815260200190815260200160002060050160019054906101000a900460ff16156124bc5760009050612548565b60016000838152602001908152602001600020600001544210156124e35760009050612548565b600160008381526020019081526020016000206001015442111561250a5760009050612548565b60016000838152602001908152602001600020600201546003600084815260200190815260200160002054106125435760009050612548565b600190505b919050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92961257781613783565b6001600084815260200190815260200160002060050160009054906101000a900460ff166125d1576040517f266f368500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600085815260200190815260200160002060050160026101000a81548160ff021916908315150217905550827f74c19978ee48fa394fffde7cccc94793539daf917f2a8fd2d5e851409de3f7a08360405161262f9190614264565b60405180910390a2505050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081036126935760009150506126a4565b6001816126a09190614930565b9150505b919050565b6000600754905090565b6000801b81565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296126e481613783565b6001600088815260200190815260200160002060050160009054906101000a900460ff1661273e576040517f266f368500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600088815260200190815260200160002060050160019054906101000a900460ff1615612799576040517f0f5eeea600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008881526020019081526020016000206000015442106127e8576040517f4eb5402b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b42861015612822576040517fb290253c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85851161285b576040517f38af65f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403612895576040517fe2494de700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083036128cf576040517f0baf743200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008214806128dd57508382115b15612914576040517f90e3cae900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b856001600089815260200190815260200160002060000181905550846001600089815260200190815260200160002060010181905550836001600089815260200190815260200160002060020181905550826001600089815260200190815260200160002060030181905550816001600089815260200190815260200160002060040181905550867fe35865500052be0ea409d44d56e7f66a0e0728bab40a71f941ccd691b915959687878787876040516129d395949392919061489b565b60405180910390a250505050505050565b600081565b7f3496e2e73c4d42b75d702e60d9e48102720b8691234415963a5a857b86425d07612a1381613783565b60008203612a4d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b645747821115612abb576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1683604051612ae190614995565b60006040518083038185875af1925050503d8060008114612b1e576040519150601f19603f3d011682016040523d82523d6000602084013e612b23565b606091505b5050905080612b5e576040517f6d963f8800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50612cd8565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b9f91906144e7565b602060405180830381865afa158015612bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be09190614903565b905080831115612c1c576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33866040518363ffffffff1660e01b8152600401612c599291906149aa565b6020604051808303816000875af1158015612c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9c91906149e8565b905080612cd5576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505b505050565b6000801b612cea81613783565b612d147f3496e2e73c4d42b75d702e60d9e48102720b8691234415963a5a857b86425d07836137bf565b505050565b612d238133613b50565b50565b6000612d30613fd8565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff16148015612d7e5750825b9050600060018367ffffffffffffffff16148015612db3575060003073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015612dc1575080155b15612df8576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315612e485760018560000160086101000a81548160ff0219169083151502179055505b612e5133614000565b612e59614014565b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612ebf576040517f1eb00b0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612f0d6000801b336137bf565b50612f387f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929336137bf565b508315612f955760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051612f8c9190614bb2565b60405180910390a15b505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929612fc781613783565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130305750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15613067576040517f1eb00b0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082036130a1576040517ff083859200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280600115158152602001838152506000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101559050508273ffffffffffffffffffffffffffffffffffffffff167fe184914670d9e097e90729e2a9159866b30b1203952f0586bedca1d6fcf130a88360405161316a91906144cc565b60405180910390a2505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296131a181613783565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16613226576040517ff84835a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008203613260576040517ff083859200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508373ffffffffffffffffffffffffffffffffffffffff167f62e2c9c75b287778c0b58f1c1d83fa8f9978a33848e0b423735fd44f48ebe3c182856040516133349291906147d2565b60405180910390a250505050565b61334b82610c1e565b61335481613783565b61335e83836138c8565b50505050565b60008060005b6007548110156133fa5760006002600083815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000154846133d89190614a15565b93508060010154836133ea9190614a15565b925050808060010191505061336a565b50915091565b60006020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154905082565b60056020528060005260406000206000915090505481565b6002602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16908060020160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154905086565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296134f681613783565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361355c576040517f1eb00b0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f38b700f64059658d3f95b87d8db51f669197c89da3076d26d42bb8fb06159fa960405160405180910390a3505050565b7f3496e2e73c4d42b75d702e60d9e48102720b8691234415963a5a857b86425d0781565b60036020528060005260406000206000915090505481565b6136676139ca565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036136d95760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016136d091906144e7565b60405180910390fd5b6136e281613a51565b50565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061377c575061377b8261401e565b5b9050919050565b6137948161378f6138c0565b614088565b50565b60007f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800905090565b6000806137ca613797565b90506137d684846123d2565b6138b457600181600001600086815260200190815260200160002060000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506138506138c0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506138ba565b60009150505b92915050565b600033905090565b6000806138d3613797565b90506138df84846123d2565b156139be57600081600001600086815260200190815260200160002060000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061395a6138c0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019150506139c4565b60009150505b92915050565b6139d26138c0565b73ffffffffffffffffffffffffffffffffffffffff166139f061239a565b73ffffffffffffffffffffffffffffffffffffffff1614613a4f57613a136138c0565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401613a4691906144e7565b60405180910390fd5b565b6000613a5b613b28565b905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b6001600083815260200190815260200160002060050160009054906101000a900460ff16613baa576040517f266f368500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600083815260200190815260200160002060050160019054906101000a900460ff16158015613bf1575060016000838152602001908152602001600020600101544211155b15613c28576040517f3df07da500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600083815260200190815260200160002060050160029054906101000a900460ff16613c82576040517fe2c858ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015403613d14576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060020160009054906101000a900460ff1615613d5d576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060020160019054906101000a900460ff1615613da6576040517fa85e6f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816001015490506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613e0c91906144e7565b602060405180830381865afa158015613e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e4d9190614903565b905080821115613e89576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018360020160006101000a81548160ff0219169083151502179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86856040518363ffffffff1660e01b8152600401613f059291906149aa565b6020604051808303816000875af1158015613f24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4891906149e8565b905080613f81576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16867f880f2ef2613b092f1a0a819f294155c98667eb294b7e6bf7a3810278142c1a1c85604051613fc891906144cc565b60405180910390a3505050505050565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6140086140d9565b61401181614119565b50565b61401c6140d9565b565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61409282826123d2565b6140d55780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016140cc929190614bcd565b60405180910390fd5b5050565b6140e161419f565b614117576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6141216140d9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036141935760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161418a91906144e7565b60405180910390fd5b61419c81613a51565b50565b60006141a9613fd8565b60000160089054906101000a900460ff16905090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6141f9816141c4565b811461420457600080fd5b50565b600081359050614216816141f0565b92915050565b600060208284031215614232576142316141bf565b5b600061424084828501614207565b91505092915050565b60008115159050919050565b61425e81614249565b82525050565b60006020820190506142796000830184614255565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142aa8261427f565b9050919050565b6142ba8161429f565b81146142c557600080fd5b50565b6000813590506142d7816142b1565b92915050565b6000602082840312156142f3576142f26141bf565b5b6000614301848285016142c8565b91505092915050565b6000819050919050565b61431d8161430a565b811461432857600080fd5b50565b60008135905061433a81614314565b92915050565b600060208284031215614356576143556141bf565b5b60006143648482850161432b565b91505092915050565b6143768161430a565b82525050565b6000602082019050614391600083018461436d565b92915050565b6000819050919050565b6143aa81614397565b81146143b557600080fd5b50565b6000813590506143c7816143a1565b92915050565b600080604083850312156143e4576143e36141bf565b5b60006143f2858286016143b8565b9250506020614403858286016142c8565b9150509250929050565b61441681614397565b82525050565b6144258161429f565b82525050565b600060c082019050614440600083018961440d565b61444d602083018861440d565b61445a6040830187614255565b6144676060830186614255565b614474608083018561441c565b61448160a083018461440d565b979650505050505050565b600080604083850312156144a3576144a26141bf565b5b60006144b18582860161432b565b92505060206144c2858286016142c8565b9150509250929050565b60006020820190506144e1600083018461440d565b92915050565b60006020820190506144fc600083018461441c565b92915050565b600060208284031215614518576145176141bf565b5b6000614526848285016143b8565b91505092915050565b600080600080600060a0868803121561454b5761454a6141bf565b5b6000614559888289016143b8565b955050602061456a888289016143b8565b945050604061457b888289016143b8565b935050606061458c888289016143b8565b925050608061459d888289016143b8565b9150509295509295909350565b6145b381614249565b81146145be57600080fd5b50565b6000813590506145d0816145aa565b92915050565b600080604083850312156145ed576145ec6141bf565b5b60006145fb858286016143b8565b925050602061460c858286016145c1565b9150509250929050565b60008060006060848603121561462f5761462e6141bf565b5b600061463d868287016143b8565b935050602061464e868287016142c8565b925050604061465f868287016143b8565b9150509250925092565b60006101408201905061467f600083018d61440d565b61468c602083018c61440d565b614699604083018b61440d565b6146a6606083018a61440d565b6146b3608083018961440d565b6146c060a0830188614255565b6146cd60c0830187614255565b6146da60e0830186614255565b6146e8610100830185614255565b6146f6610120830184614255565b9b9a5050505050505050505050565b60008060008060008060c08789031215614722576147216141bf565b5b600061473089828a016143b8565b965050602061474189828a016143b8565b955050604061475289828a016143b8565b945050606061476389828a016143b8565b935050608061477489828a016143b8565b92505060a061478589828a016143b8565b9150509295509295509295565b600080604083850312156147a9576147a86141bf565b5b60006147b7858286016142c8565b92505060206147c8858286016143b8565b9150509250929050565b60006040820190506147e7600083018561440d565b6147f4602083018461440d565b9392505050565b60006040820190506148106000830185614255565b61481d602083018461440d565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061485e82614397565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148905761488f614824565b5b600182019050919050565b600060a0820190506148b0600083018861440d565b6148bd602083018761440d565b6148ca604083018661440d565b6148d7606083018561440d565b6148e4608083018461440d565b9695505050505050565b6000815190506148fd816143a1565b92915050565b600060208284031215614919576149186141bf565b5b6000614927848285016148ee565b91505092915050565b600061493b82614397565b915061494683614397565b925082820390508181111561495e5761495d614824565b5b92915050565b600081905092915050565b50565b600061497f600083614964565b915061498a8261496f565b600082019050919050565b60006149a082614972565b9150819050919050565b60006040820190506149bf600083018561441c565b6149cc602083018461440d565b9392505050565b6000815190506149e2816145aa565b92915050565b6000602082840312156149fe576149fd6141bf565b5b6000614a0c848285016149d3565b91505092915050565b6000614a2082614397565b9150614a2b83614397565b9250828201905080821115614a4357614a42614824565b5b92915050565b6000614a5482614397565b9150614a5f83614397565b9250828202614a6d81614397565b91508282048414831517614a8457614a83614824565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ac582614397565b9150614ad083614397565b925082614ae057614adf614a8b565b5b828204905092915050565b6000606082019050614b00600083018661441c565b614b0d602083018561441c565b614b1a604083018461440d565b949350505050565b6000606082019050614b37600083018661440d565b614b44602083018561440d565b614b51604083018461440d565b949350505050565b6000819050919050565b600067ffffffffffffffff82169050919050565b6000819050919050565b6000614b9c614b97614b9284614b59565b614b77565b614b63565b9050919050565b614bac81614b81565b82525050565b6000602082019050614bc76000830184614ba3565b92915050565b6000604082019050614be2600083018561441c565b614bef602083018461436d565b939250505056fea2646970667358221220b62a2df386c339c73773cfd5bbae2ef8b1fe4e98c7b355111b802fd05e87f97e64736f6c634300081c0033",
|
1546
|
-
"deployedBytecode": "0x6080604052600436106102765760003560e01c806397ac4a251161014f578063d4bcdfa1116100c1578063ed54890d1161007a578063ed54890d14610995578063efe9c9e2146109d7578063f0a3a97c14610a00578063f0e1bb3e14610a2b578063f2fde38b14610a68578063f5b541a614610a9157610277565b8063d4bcdfa114610861578063d4ee651b1461088a578063d547741f146108b3578063d871b0e3146108dc578063daf9c2101461091a578063eb4c9e9b1461095857610277565b8063a6be83dd11610113578063a6be83dd14610769578063a734f06e14610792578063c1075329146107bd578063c213df78146107e6578063c4428a891461080f578063c4d66de81461083857610277565b806397ac4a25146106705780639bb92c4e146106ad5780639da64ac2146106d6578063a09686c414610713578063a217fddf1461073e57610277565b80636fed6940116101e85780638a568299116101ac5780638a568299146105435780638c65c81f1461056e5780638d52e555146105b45780638da5cb5b146105dd57806391d148541461060857806395082d251461064557610277565b80636fed694014610481578063715018a6146104be5780637ad226dc146104d55780637cf30c60146104fe5780638952ac1e1461052757610277565b80632f2ff15d1161023a5780632f2ff15d1461038757806336568abe146103b057806342683c67146103d95780634b60ce77146104045780635a1e6ca11461042f5780635af6df4c1461045857610277565b806301ffc9a7146102795780631c88705d146102b6578063248a9ca3146102df57806327ac0c581461031c57806328f3e6581461034557610277565b5b005b34801561028557600080fd5b506102a0600480360381019061029b919061421c565b610abc565b6040516102ad9190614264565b60405180910390f35b3480156102c257600080fd5b506102dd60048036038101906102d891906142dd565b610ace565b005b3480156102eb57600080fd5b5061030660048036038101906103019190614340565b610c1e565b604051610313919061437c565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e91906142dd565b610c4c565b005b34801561035157600080fd5b5061036c600480360381019061036791906143cd565b610c88565b60405161037e9695949392919061442b565b60405180910390f35b34801561039357600080fd5b506103ae60048036038101906103a9919061448c565b610d54565b005b3480156103bc57600080fd5b506103d760048036038101906103d2919061448c565b610d76565b005b3480156103e557600080fd5b506103ee610df1565b6040516103fb91906144cc565b60405180910390f35b34801561041057600080fd5b50610419610df7565b60405161042691906144e7565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190614502565b610e1d565b005b34801561046457600080fd5b5061047f600480360381019061047a919061452f565b610f8e565b005b34801561048d57600080fd5b506104a860048036038101906104a39190614502565b61128b565b6040516104b591906144cc565b60405180910390f35b3480156104ca57600080fd5b506104d36112a3565b005b3480156104e157600080fd5b506104fc60048036038101906104f791906143cd565b6112b7565b005b34801561050a57600080fd5b50610525600480360381019061052091906145d6565b6118ec565b005b610541600480360381019061053c9190614616565b6119db565b005b34801561054f57600080fd5b50610558612210565b60405161056591906144cc565b60405180910390f35b34801561057a57600080fd5b5061059560048036038101906105909190614502565b612216565b6040516105ab9a99989796959493929190614669565b60405180910390f35b3480156105c057600080fd5b506105db60048036038101906105d691906145d6565b6122ab565b005b3480156105e957600080fd5b506105f261239a565b6040516105ff91906144e7565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a919061448c565b6123d2565b60405161063c9190614264565b60405180910390f35b34801561065157600080fd5b5061065a61244b565b60405161066791906144cc565b60405180910390f35b34801561067c57600080fd5b5061069760048036038101906106929190614502565b612457565b6040516106a49190614264565b60405180910390f35b3480156106b957600080fd5b506106d460048036038101906106cf91906145d6565b61254d565b005b3480156106e257600080fd5b506106fd60048036038101906106f891906142dd565b61263c565b60405161070a91906144cc565b60405180910390f35b34801561071f57600080fd5b506107286126a9565b60405161073591906144cc565b60405180910390f35b34801561074a57600080fd5b506107536126b3565b604051610760919061437c565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b9190614705565b6126ba565b005b34801561079e57600080fd5b506107a76129e4565b6040516107b491906144e7565b60405180910390f35b3480156107c957600080fd5b506107e460048036038101906107df9190614792565b6129e9565b005b3480156107f257600080fd5b5061080d600480360381019061080891906142dd565b612cdd565b005b34801561081b57600080fd5b5061083660048036038101906108319190614502565b612d19565b005b34801561084457600080fd5b5061085f600480360381019061085a91906142dd565b612d26565b005b34801561086d57600080fd5b5061088860048036038101906108839190614792565b612f9d565b005b34801561089657600080fd5b506108b160048036038101906108ac9190614792565b613177565b005b3480156108bf57600080fd5b506108da60048036038101906108d5919061448c565b613342565b005b3480156108e857600080fd5b5061090360048036038101906108fe91906142dd565b613364565b6040516109119291906147d2565b60405180910390f35b34801561092657600080fd5b50610941600480360381019061093c91906142dd565b613400565b60405161094f9291906147fb565b60405180910390f35b34801561096457600080fd5b5061097f600480360381019061097a91906142dd565b613431565b60405161098c91906144cc565b60405180910390f35b3480156109a157600080fd5b506109bc60048036038101906109b791906143cd565b613449565b6040516109ce9695949392919061442b565b60405180910390f35b3480156109e357600080fd5b506109fe60048036038101906109f991906142dd565b6134cc565b005b348015610a0c57600080fd5b50610a15613623565b604051610a22919061437c565b60405180910390f35b348015610a3757600080fd5b50610a526004803603810190610a4d9190614502565b613647565b604051610a5f91906144cc565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a91906142dd565b61365f565b005b348015610a9d57600080fd5b50610aa66136e5565b604051610ab3919061437c565b60405180910390f35b6000610ac782613709565b9050919050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610af881613783565b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16610b7d576040517ff84835a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fdd2e6d9f52cbe8f695939d018b7d4a216dc613a669876163ac548b916489d91760405160405180910390a25050565b600080610c29613797565b905080600001600084815260200190815260200160002060010154915050919050565b6000801b610c5981613783565b610c837f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929836137bf565b505050565b6000806000806000806000600260008a815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015481600101548260020160009054906101000a900460ff168360020160019054906101000a900460ff168460020160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560030154965096509650965096509650509295509295509295565b610d5d82610c1e565b610d6681613783565b610d7083836137bf565b50505050565b610d7e6138c0565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dec82826138c8565b505050565b60085481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610e4781613783565b6001600083815260200190815260200160002060050160009054906101000a900460ff16610ea1576040517f266f368500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600083815260200190815260200160002060050160019054906101000a900460ff1615610efc576040517f0f5eeea600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180600084815260200190815260200160002060050160016101000a81548160ff021916908315150217905550817fc5285db7d8a9c3a0ce0e8982ff9a84fe8df355101d9545735558c69efb4aad5760036000858152602001908152602001600020546004600086815260200190815260200160002054604051610f829291906147d2565b60405180910390a25050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610fb881613783565b42861015610ff2576040517fb290253c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85851161102b576040517f38af65f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403611065576040517fe2494de700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000830361109f576040517f0baf743200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008214806110ad57508382115b156110e4576040517f90e3cae900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060075490506040518061014001604052808881526020018781526020018681526020018581526020018481526020016001151581526020016000151581526020016000151581526020016000151581526020016001151581525060016000838152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a08201518160050160006101000a81548160ff02191690831515021790555060c08201518160050160016101000a81548160ff02191690831515021790555060e08201518160050160026101000a81548160ff0219169083151502179055506101008201518160050160036101000a81548160ff0219169083151502179055506101208201518160050160046101000a81548160ff0219169083151502179055509050506007600081548092919061123d90614853565b9190505550807f21fb045299ceafb7a136c74ee07b22d481ee9bf37a85b2d8f20c59f83ada4133888888888860405161127a95949392919061489b565b60405180910390a250505050505050565b60046020528060005260406000206000915090505481565b6112ab6139ca565b6112b56000613a51565b565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296112e181613783565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611347576040517f702b3d9000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600084815260200190815260200160002060050160009054906101000a900460ff166113a1576040517f266f368500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600084815260200190815260200160002060050160039054906101000a900460ff166113fb576040517f089c998700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002600085815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600081600001540361148d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060020160009054906101000a900460ff16156114d6576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060020160019054906101000a900460ff161561151f576040517fa85e6f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008160020160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600082600301549050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036115c457478111156115bf576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61167e565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115ff91906144e7565b602060405180830381865afa15801561161c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116409190614903565b90508082111561167c576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60018360020160016101000a81548160ff02191690831515021790555082600001546003600088815260200190815260200160002060008282546116c29190614930565b925050819055508260000154600860008282546116df9190614930565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117c35760008573ffffffffffffffffffffffffffffffffffffffff168260405161174090614995565b60006040518083038185875af1925050503d806000811461177d576040519150601f19603f3d011682016040523d82523d6000602084013e611782565b606091505b50509050806117bd576040517f6d963f8800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5061187e565b60008273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87846040518363ffffffff1660e01b81526004016118009291906149aa565b6020604051808303816000875af115801561181f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184391906149e8565b90508061187c576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b8173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16877f1c26abe6289671e3a9d493647349673af828abb9dbadff1e81762387f7cd99a3846040516118dc91906144cc565b60405180910390a4505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92961191681613783565b6001600084815260200190815260200160002060050160009054906101000a900460ff16611970576040517f266f368500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600085815260200190815260200160002060050160036101000a81548160ff021916908315150217905550827f653b56ea3ea7dfba44234dbc807bac97a2a0adafb6d22427d818250375f1e911836040516119ce9190614264565b60405180910390a2505050565b6119e483612457565b611a1a576040517f3df07da500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16611a9f576040517ff84835a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b165760003403611b0e576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b349050611b54565b60008203611b50576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8190505b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008114158015611bb55750600185611bb19190614a15565b8114155b15611c15576001600086815260200190815260200160002060050160049054906101000a900460ff16611c14576040517f827a86b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b60008060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000670de0b6b3a76400008285611c729190614a49565b611c7c9190614aba565b905060006002600089815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000828260000154611ce49190614a15565b9050600160008a815260200190815260200160002060040154811115611d36576040517f1cd861cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083600360008c815260200190815260200160002054611d579190614a15565b9050600160008b815260200190815260200160002060020154811115611da9576040517f397bb34300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614611e9a5760008973ffffffffffffffffffffffffffffffffffffffff166323b872dd33308b6040518463ffffffff1660e01b8152600401611e1c93929190614aeb565b6020604051808303816000875af1158015611e3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5f91906149e8565b905080611e98576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b6000600160008c815260200190815260200160002060020154600160008d81526020019081526020016000206003015486611ed59190614a49565b611edf9190614aba565b90506000846000015403611fb757600460008c81526020019081526020016000206000815480929190611f1190614853565b919050555060018b611f239190614a15565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550898460020160026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550878460030181905550612061565b8973ffffffffffffffffffffffffffffffffffffffff168460020160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361202e57878460030160008282546120229190614a15565b92505081905550612060565b6040517ff84835a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b848460000160008282546120759190614a15565b92505081905550808460010160008282546120909190614a15565b9250508190555084600360008d815260200190815260200160002060008282546120ba9190614a15565b9250508190555084600860008282546120d39190614a15565b92505081905550600160008c815260200190815260200160002060020154600360008d815260200190815260200160002054106121995760018060008d815260200190815260200160002060050160016101000a81548160ff0219169083151502179055508a7fc5285db7d8a9c3a0ce0e8982ff9a84fe8df355101d9545735558c69efb4aad57600360008e815260200190815260200160002054600460008f8152602001908152602001600020546040516121909291906147d2565b60405180910390a25b8973ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168c7fb479ec976a9860505652c0d9f5dc15bc5fbca1a55c3da9cabe662f1b6f8090d28b89866040516121fb93929190614b22565b60405180910390a45050505050505050505050565b60075481565b60016020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050160009054906101000a900460ff16908060050160019054906101000a900460ff16908060050160029054906101000a900460ff16908060050160039054906101000a900460ff16908060050160049054906101000a900460ff1690508a565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296122d581613783565b6001600084815260200190815260200160002060050160009054906101000a900460ff1661232f576040517f266f368500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600085815260200190815260200160002060050160046101000a81548160ff021916908315150217905550827f1c1c03453d1eefaa85a62e371adba496bc16fa6320bf5416b0af1249081ca84c8360405161238d9190614264565b60405180910390a2505050565b6000806123a5613b28565b90508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691505090565b6000806123dd613797565b905080600001600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1691505092915050565b670de0b6b3a764000081565b60006001600083815260200190815260200160002060050160009054906101000a900460ff1661248a5760009050612548565b6001600083815260200190815260200160002060050160019054906101000a900460ff16156124bc5760009050612548565b60016000838152602001908152602001600020600001544210156124e35760009050612548565b600160008381526020019081526020016000206001015442111561250a5760009050612548565b60016000838152602001908152602001600020600201546003600084815260200190815260200160002054106125435760009050612548565b600190505b919050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92961257781613783565b6001600084815260200190815260200160002060050160009054906101000a900460ff166125d1576040517f266f368500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816001600085815260200190815260200160002060050160026101000a81548160ff021916908315150217905550827f74c19978ee48fa394fffde7cccc94793539daf917f2a8fd2d5e851409de3f7a08360405161262f9190614264565b60405180910390a2505050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600081036126935760009150506126a4565b6001816126a09190614930565b9150505b919050565b6000600754905090565b6000801b81565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296126e481613783565b6001600088815260200190815260200160002060050160009054906101000a900460ff1661273e576040517f266f368500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600088815260200190815260200160002060050160019054906101000a900460ff1615612799576040517f0f5eeea600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160008881526020019081526020016000206000015442106127e8576040517f4eb5402b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b42861015612822576040517fb290253c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85851161285b576040517f38af65f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008403612895576040517fe2494de700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083036128cf576040517f0baf743200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008214806128dd57508382115b15612914576040517f90e3cae900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b856001600089815260200190815260200160002060000181905550846001600089815260200190815260200160002060010181905550836001600089815260200190815260200160002060020181905550826001600089815260200190815260200160002060030181905550816001600089815260200190815260200160002060040181905550867fe35865500052be0ea409d44d56e7f66a0e0728bab40a71f941ccd691b915959687878787876040516129d395949392919061489b565b60405180910390a250505050505050565b600081565b7f3496e2e73c4d42b75d702e60d9e48102720b8691234415963a5a857b86425d07612a1381613783565b60008203612a4d576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b645747821115612abb576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1683604051612ae190614995565b60006040518083038185875af1925050503d8060008114612b1e576040519150601f19603f3d011682016040523d82523d6000602084013e612b23565b606091505b5050905080612b5e576040517f6d963f8800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50612cd8565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612b9f91906144e7565b602060405180830381865afa158015612bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612be09190614903565b905080831115612c1c576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33866040518363ffffffff1660e01b8152600401612c599291906149aa565b6020604051808303816000875af1158015612c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9c91906149e8565b905080612cd5576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505b505050565b6000801b612cea81613783565b612d147f3496e2e73c4d42b75d702e60d9e48102720b8691234415963a5a857b86425d07836137bf565b505050565b612d238133613b50565b50565b6000612d30613fd8565b905060008160000160089054906101000a900460ff1615905060008260000160009054906101000a900467ffffffffffffffff1690506000808267ffffffffffffffff16148015612d7e5750825b9050600060018367ffffffffffffffff16148015612db3575060003073ffffffffffffffffffffffffffffffffffffffff163b145b905081158015612dc1575080155b15612df8576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018560000160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055508315612e485760018560000160086101000a81548160ff0219169083151502179055505b612e5133614000565b612e59614014565b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603612ebf576040517f1eb00b0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b85600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612f0d6000801b336137bf565b50612f387f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929336137bf565b508315612f955760008560000160086101000a81548160ff0219169083151502179055507fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d26001604051612f8c9190614bb2565b60405180910390a15b505050505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929612fc781613783565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130305750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15613067576040517f1eb00b0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082036130a1576040517ff083859200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040518060400160405280600115158152602001838152506000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff021916908315150217905550602082015181600101559050508273ffffffffffffffffffffffffffffffffffffffff167fe184914670d9e097e90729e2a9159866b30b1203952f0586bedca1d6fcf130a88360405161316a91906144cc565b60405180910390a2505050565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296131a181613783565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16613226576040517ff84835a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008203613260576040517ff083859200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508373ffffffffffffffffffffffffffffffffffffffff167f62e2c9c75b287778c0b58f1c1d83fa8f9978a33848e0b423735fd44f48ebe3c182856040516133349291906147d2565b60405180910390a250505050565b61334b82610c1e565b61335481613783565b61335e83836138c8565b50505050565b60008060005b6007548110156133fa5760006002600083815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060000154846133d89190614a15565b93508060010154836133ea9190614a15565b925050808060010191505061336a565b50915091565b60006020528060005260406000206000915090508060000160009054906101000a900460ff16908060010154905082565b60056020528060005260406000206000915090505481565b6002602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020160009054906101000a900460ff16908060020160019054906101000a900460ff16908060020160029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060030154905086565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9296134f681613783565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361355c576040517f1eb00b0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f38b700f64059658d3f95b87d8db51f669197c89da3076d26d42bb8fb06159fa960405160405180910390a3505050565b7f3496e2e73c4d42b75d702e60d9e48102720b8691234415963a5a857b86425d0781565b60036020528060005260406000206000915090505481565b6136676139ca565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036136d95760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016136d091906144e7565b60405180910390fd5b6136e281613a51565b50565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061377c575061377b8261401e565b5b9050919050565b6137948161378f6138c0565b614088565b50565b60007f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800905090565b6000806137ca613797565b90506137d684846123d2565b6138b457600181600001600086815260200190815260200160002060000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506138506138c0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506138ba565b60009150505b92915050565b600033905090565b6000806138d3613797565b90506138df84846123d2565b156139be57600081600001600086815260200190815260200160002060000160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061395a6138c0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019150506139c4565b60009150505b92915050565b6139d26138c0565b73ffffffffffffffffffffffffffffffffffffffff166139f061239a565b73ffffffffffffffffffffffffffffffffffffffff1614613a4f57613a136138c0565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401613a4691906144e7565b60405180910390fd5b565b6000613a5b613b28565b905060008160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60007f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300905090565b6001600083815260200190815260200160002060050160009054906101000a900460ff16613baa576040517f266f368500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600083815260200190815260200160002060050160019054906101000a900460ff16158015613bf1575060016000838152602001908152602001600020600101544211155b15613c28576040517f3df07da500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600083815260200190815260200160002060050160029054906101000a900460ff16613c82576040517fe2c858ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006002600084815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015403613d14576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060020160009054906101000a900460ff1615613d5d576040517f646cf55800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060020160019054906101000a900460ff1615613da6576040517fa85e6f1a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000816001015490506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613e0c91906144e7565b602060405180830381865afa158015613e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e4d9190614903565b905080821115613e89576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018360020160006101000a81548160ff0219169083151502179055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86856040518363ffffffff1660e01b8152600401613f059291906149aa565b6020604051808303816000875af1158015613f24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4891906149e8565b905080613f81576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16867f880f2ef2613b092f1a0a819f294155c98667eb294b7e6bf7a3810278142c1a1c85604051613fc891906144cc565b60405180910390a3505050505050565b60007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00905090565b6140086140d9565b61401181614119565b50565b61401c6140d9565b565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61409282826123d2565b6140d55780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016140cc929190614bcd565b60405180910390fd5b5050565b6140e161419f565b614117576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6141216140d9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036141935760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161418a91906144e7565b60405180910390fd5b61419c81613a51565b50565b60006141a9613fd8565b60000160089054906101000a900460ff16905090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6141f9816141c4565b811461420457600080fd5b50565b600081359050614216816141f0565b92915050565b600060208284031215614232576142316141bf565b5b600061424084828501614207565b91505092915050565b60008115159050919050565b61425e81614249565b82525050565b60006020820190506142796000830184614255565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142aa8261427f565b9050919050565b6142ba8161429f565b81146142c557600080fd5b50565b6000813590506142d7816142b1565b92915050565b6000602082840312156142f3576142f26141bf565b5b6000614301848285016142c8565b91505092915050565b6000819050919050565b61431d8161430a565b811461432857600080fd5b50565b60008135905061433a81614314565b92915050565b600060208284031215614356576143556141bf565b5b60006143648482850161432b565b91505092915050565b6143768161430a565b82525050565b6000602082019050614391600083018461436d565b92915050565b6000819050919050565b6143aa81614397565b81146143b557600080fd5b50565b6000813590506143c7816143a1565b92915050565b600080604083850312156143e4576143e36141bf565b5b60006143f2858286016143b8565b9250506020614403858286016142c8565b9150509250929050565b61441681614397565b82525050565b6144258161429f565b82525050565b600060c082019050614440600083018961440d565b61444d602083018861440d565b61445a6040830187614255565b6144676060830186614255565b614474608083018561441c565b61448160a083018461440d565b979650505050505050565b600080604083850312156144a3576144a26141bf565b5b60006144b18582860161432b565b92505060206144c2858286016142c8565b9150509250929050565b60006020820190506144e1600083018461440d565b92915050565b60006020820190506144fc600083018461441c565b92915050565b600060208284031215614518576145176141bf565b5b6000614526848285016143b8565b91505092915050565b600080600080600060a0868803121561454b5761454a6141bf565b5b6000614559888289016143b8565b955050602061456a888289016143b8565b945050604061457b888289016143b8565b935050606061458c888289016143b8565b925050608061459d888289016143b8565b9150509295509295909350565b6145b381614249565b81146145be57600080fd5b50565b6000813590506145d0816145aa565b92915050565b600080604083850312156145ed576145ec6141bf565b5b60006145fb858286016143b8565b925050602061460c858286016145c1565b9150509250929050565b60008060006060848603121561462f5761462e6141bf565b5b600061463d868287016143b8565b935050602061464e868287016142c8565b925050604061465f868287016143b8565b9150509250925092565b60006101408201905061467f600083018d61440d565b61468c602083018c61440d565b614699604083018b61440d565b6146a6606083018a61440d565b6146b3608083018961440d565b6146c060a0830188614255565b6146cd60c0830187614255565b6146da60e0830186614255565b6146e8610100830185614255565b6146f6610120830184614255565b9b9a5050505050505050505050565b60008060008060008060c08789031215614722576147216141bf565b5b600061473089828a016143b8565b965050602061474189828a016143b8565b955050604061475289828a016143b8565b945050606061476389828a016143b8565b935050608061477489828a016143b8565b92505060a061478589828a016143b8565b9150509295509295509295565b600080604083850312156147a9576147a86141bf565b5b60006147b7858286016142c8565b92505060206147c8858286016143b8565b9150509250929050565b60006040820190506147e7600083018561440d565b6147f4602083018461440d565b9392505050565b60006040820190506148106000830185614255565b61481d602083018461440d565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061485e82614397565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148905761488f614824565b5b600182019050919050565b600060a0820190506148b0600083018861440d565b6148bd602083018761440d565b6148ca604083018661440d565b6148d7606083018561440d565b6148e4608083018461440d565b9695505050505050565b6000815190506148fd816143a1565b92915050565b600060208284031215614919576149186141bf565b5b6000614927848285016148ee565b91505092915050565b600061493b82614397565b915061494683614397565b925082820390508181111561495e5761495d614824565b5b92915050565b600081905092915050565b50565b600061497f600083614964565b915061498a8261496f565b600082019050919050565b60006149a082614972565b9150819050919050565b60006040820190506149bf600083018561441c565b6149cc602083018461440d565b9392505050565b6000815190506149e2816145aa565b92915050565b6000602082840312156149fe576149fd6141bf565b5b6000614a0c848285016149d3565b91505092915050565b6000614a2082614397565b9150614a2b83614397565b9250828201905080821115614a4357614a42614824565b5b92915050565b6000614a5482614397565b9150614a5f83614397565b9250828202614a6d81614397565b91508282048414831517614a8457614a83614824565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ac582614397565b9150614ad083614397565b925082614ae057614adf614a8b565b5b828204905092915050565b6000606082019050614b00600083018661441c565b614b0d602083018561441c565b614b1a604083018461440d565b949350505050565b6000606082019050614b37600083018661440d565b614b44602083018561440d565b614b51604083018461440d565b949350505050565b6000819050919050565b600067ffffffffffffffff82169050919050565b6000819050919050565b6000614b9c614b97614b9284614b59565b614b77565b614b63565b9050919050565b614bac81614b81565b82525050565b6000602082019050614bc76000830184614ba3565b92915050565b6000604082019050614be2600083018561441c565b614bef602083018461436d565b939250505056fea2646970667358221220b62a2df386c339c73773cfd5bbae2ef8b1fe4e98c7b355111b802fd05e87f97e64736f6c634300081c0033",
|
1545
|
+
"bytecode": "0x6080806040523460d2577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b60405161250990816100d88239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880604d565b63f92ee8a960e01b60005260046000fd5b600080fdfe6080806040526004361015610011575b005b60003560e01c90816301ffc9a714611ce5575080631c88705d14611c67578063248a9ca314611c4957806327ac0c5814611c2057806328f3e6581461035e5780632f2ff15d14611bef57806336568abe14611ba957806342683c6714611b8b5780634b60ce7714611b625780635a1e6ca114611aa65780635af6df4c146118cc5780636fed6940146118a0578063715018a6146118365780637ad226dc146115c15780637cf30c601461153e5780638952ac1e1461112e5780638a56829914610e5f5780638c65c81f1461108f5780638d52e5551461100b5780638da5cb5b14610fd557806391d1485414610f7b57806395082d2514610f5857806397ac4a2514610f305780639bb92c4e14610ea85780639da64ac214610e7d578063a09686c414610e5f578063a217fddf14610caa578063a6be83dd14610cc6578063a734f06e14610caa578063c107532914610b12578063c213df7814610ae9578063c4428a8914610861578063c4d66de8146106c9578063d4bcdfa1146105e3578063d4ee651b1461052c578063d547741f146104f6578063d871b0e314610471578063daf9c21014610429578063eb4c9e9b146103ef578063ed54890d1461035e578063efe9c9e2146102d9578063f0a3a97c1461029e578063f0e1bb3e14610272578063f2fde38b146102495763f5b541a61461020957005b346102445760003660031901126102445760206040517f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9298152f35b600080fd5b346102445760203660031901126102445761000f610265611d38565b61026d6123ef565b611f21565b346102445760203660031901126102445760043560005260036020526020604060002054604051908152f35b346102445760003660031901126102445760206040517f3496e2e73c4d42b75d702e60d9e48102720b8691234415963a5a857b86425d078152f35b34610244576020366003190112610244576102f2611d38565b6102fa611f97565b6001600160a01b0316801561034d57600680546001600160a01b0319811683179091556001600160a01b03167f38b700f64059658d3f95b87d8db51f669197c89da3076d26d42bb8fb06159fa9600080a3005b630f58058360e11b60005260046000fd5b34610244576040366003190112610244576040610379611d4e565b6004356000908152600260208181528483206001600160a01b0394851684528152939091208054600182015492820154600390920154604080519283529582019390935260ff808316151595820195909552600882901c9094161515606085015260101c909116608083015260a082015260c090f35b34610244576020366003190112610244576001600160a01b03610410611d38565b1660005260056020526020604060002054604051908152f35b34610244576020366003190112610244576001600160a01b0361044a611d38565b166000526000602052604080600020600160ff825416910154825191151582526020820152f35b346102445760203660031901126102445761048a611d38565b600754600091829182916001600160a01b03165b8185106104b5576040848482519182526020820152f35b90916104ec600191866000526002602052826104e36040806000206000908882526020522097885490611e3a565b96015490611e3a565b940193919061049e565b346102445760403660031901126102445761000f600435610515611d4e565b9061052761052282611d83565b61205c565b61234f565b3461024457604036600319011261024457610545611d38565b60243590610551611f97565b60018060a01b03169081600052600060205260ff60406000205416156105d25780156105c157600082815260208181526040918290206001018054908490558251908152908101929092527f62e2c9c75b287778c0b58f1c1d83fa8f9978a33848e0b423735fd44f48ebe3c191a2005b637841c2c960e11b60005260046000fd5b6307c241ad60e51b60005260046000fd5b34610244576040366003190112610244576105fc611d38565b60243590610608611f97565b6001600160a01b0316908115801590816106c1575b5061034d5780156105c15760405190604082019082821067ffffffffffffffff8311176106ab577fe184914670d9e097e90729e2a9159866b30b1203952f0586bedca1d6fcf130a892602092604052600181526001838201838152866000526000855261069e604060002093511515849060ff801983541691151516179055565b51910155604051908152a2005b634e487b7160e01b600052604160045260246000fd5b90508361061d565b34610244576020366003190112610244576106e2611d38565b6000805160206124b4833981519152549060ff8260401c16159167ffffffffffffffff811680159081610859575b600114908161084f575b159081610846575b506108355767ffffffffffffffff1981166001176000805160206124b48339815191525582610808575b50610755612425565b61075d612425565b61076633611f21565b61076e612425565b6001600160a01b0316801561034d576bffffffffffffffffffffffff60a01b600654161760065561079e3361221e565b506107a8336120a6565b506107af57005b68ff0000000000000000196000805160206124b483398151915254166000805160206124b4833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b68ffffffffffffffffff191668010000000000000001176000805160206124b4833981519152558261074c565b63f92ee8a960e01b60005260046000fd5b90501584610722565b303b15915061071a565b849150610710565b346102445760203660031901126102445760043580600052600160205260ff6005604060002001541615610ad85780600052600160205260ff60056040600020015460081c161580610abd575b610aac5780600052600160205260ff60056040600020015460101c1615610a9b5760008181526002602090815260408083203384529091529020805490919015610a8a576002820180549260ff8416610a795760ff8460081c16610a6857600101546006546040516370a0823160e01b815230600482015291949190602090829060249082906001600160a01b03165afa908115610a1957600091610a36575b508411610a255760ff1916600117905560065460405163a9059cbb60e01b8152336004820152602481018490529060209082906001600160a01b0316816000816044810103925af1908115610a19576000916109ea575b50156109d9576040519182527f880f2ef2613b092f1a0a819f294155c98667eb294b7e6bf7a3810278142c1a1c60203393a3005b6312171d8360e31b60005260046000fd5b610a0c915060203d602011610a12575b610a048183611da4565b810190611de2565b836109a5565b503d6109fa565b6040513d6000823e3d90fd5b631e9acf1760e31b60005260046000fd5b90506020813d602011610a60575b81610a5160209383611da4565b8101031261024457518561094e565b3d9150610a44565b63542f378d60e11b60005260046000fd5b630c8d9eab60e31b60005260046000fd5b631f2a200560e01b60005260046000fd5b6371642c7760e11b60005260046000fd5b633df07da560e01b60005260046000fd5b508060005260016020526001604060002001544211156108ae565b63266f368560e01b60005260046000fd5b346102445760203660031901126102445761000f610b05611d38565b610b0d612009565b612162565b3461024457604036600319011261024457610b2b611d38565b3360009081527f1e8c4920ddc559c39a77379e501bd8d5349fc1b24d14b05de3e54d9cec19adb76020526040902054602435919060ff1615610c71578115610a8a576001600160a01b031680610bad5750478111610a2557600080808093335af1610b94611dfa565b5015610b9c57005b630db2c7f160e31b60005260046000fd5b6040516370a0823160e01b8152306004820152602081602481855afa908115610a1957600091610c3f575b508211610a255760405163a9059cbb60e01b81523360048201526024810192909252602090829060449082906000905af1908115610a1957600091610c20575b50156109d957005b610c39915060203d602011610a1257610a048183611da4565b81610c18565b90506020813d602011610c69575b81610c5a60209383611da4565b81010312610244575183610bd8565b3d9150610c4d565b63e2517d3f60e01b600052336004527f3496e2e73c4d42b75d702e60d9e48102720b8691234415963a5a857b86425d0760245260446000fd5b3461024457600036600319011261024457602060405160008152f35b346102445760c03660031901126102445760043560843560443560243560643560a435610cf1611f97565b85600052600160205260ff6005604060002001541615610ad85785600052600160205260ff60056040600020015460081c16610e4e57856000526001602052604060002054421015610e3d57428310610e2c5782841115610e1b578115610e0a578415610df95780158015610df0575b610ddf5760008681526001602081815260409283902086815591820187905560028201859055600382018890556004909101839055815194855284019490945292820152606081019290925260808201527fe35865500052be0ea409d44d56e7f66a0e0728bab40a71f941ccd691b9159596908060a081015b0390a2005b6390e3cae960e01b60005260046000fd5b50818111610d61565b6305d7ba1960e11b60005260046000fd5b63e2494de760e01b60005260046000fd5b6338af65f760e01b60005260046000fd5b632ca4094f60e21b60005260046000fd5b634eb5402b60e01b60005260046000fd5b6307af775360e11b60005260046000fd5b34610244576000366003190112610244576020600754604051908152f35b34610244576020366003190112610244576020610ea0610e9b611d38565b611ef4565b604051908152f35b3461024457610eb636611d64565b610ebe611f97565b81600052600160205260ff6005604060002001541615610ad8576000828152600160209081526040909120600501805462ff0000191683151560101b62ff0000161790557f74c19978ee48fa394fffde7cccc94793539daf917f2a8fd2d5e851409de3f7a0915b6040519015158152a2005b34610244576020366003190112610244576020610f4e600435611e5a565b6040519015158152f35b34610244576000366003190112610244576020604051670de0b6b3a76400008152f35b3461024457604036600319011261024457610f94611d4e565b60043560005260008051602061249483398151915260205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b3461024457600036600319011261024457600080516020612474833981519152546040516001600160a01b039091168152602090f35b346102445761101936611d64565b611021611f97565b81600052600160205260ff6005604060002001541615610ad8576000828152600160209081526040909120600501805464ff000000001916831515831b64ff00000000161790557f1c1c03453d1eefaa85a62e371adba496bc16fa6320bf5416b0af1249081ca84c91610f25565b34610244576020366003190112610244576004356000526001602052610140604060002060ff815491600181015490600281015460038201549060056004840154930154936040519687526020870152604086015260608501526080840152818116151560a0840152818160081c16151560c0840152818160101c16151560e0840152818160181c16151561010084015260201c161515610120820152f35b606036600319011261024457600435611145611d4e565b6044359161115281611e5a565b15610aac5760018060a01b0382169283600052600060205260ff60406000205416156105d257831590811561153257503415610a8a5734925b336000526005602052604060002054801515908161151d575b506114f0575b846000526000602052670de0b6b3a76400006111ce60016040600020015486611e47565b049083600052600260205260408060002060009060018060a01b033316825260205220926111fd838554611e3a565b856000526001602052600460406000200154106114df5784600052600360205261122c83604060002054611e3a565b856000526001602052600260406000200154106114ce571561145f575b83600052600160205261126460036040600020015483611e47565b8460005260016020526002604060002001549081156114495704928054156000146114165784600052600460205260406000206112a18154611dc6565b90556001850191828611611400576001923360005260056020526040600020556002820190815490620100008560b01b039060101b1690620100008560b01b0319161790558560038201555b6112f8838254611e3a565b815501611306838254611e3a565b90558260005260036020526040600020611321828254611e3a565b905561132f81600854611e3a565b6008558260005260036020526040600020548360005260016020526002604060002001541115611392575b604051938452602084015260408301527fb479ec976a9860505652c0d9f5dc15bc5fbca1a55c3da9cabe662f1b6f8090d260603393a4005b826000526001602052600560406000200161010061ff0019825416179055826000526003602052827fc5285db7d8a9c3a0ce0e8982ff9a84fe8df355101d9545735558c69efb4aad5760408060002054836000526004602052816000205482519182526020820152a261135a565b634e487b7160e01b600052601160045260246000fd5b600281015490915060101c6001600160a01b031686036105d25780600360019201611442878254611e3a565b90556112ed565b634e487b7160e01b600052601260045260246000fd5b6040516323b872dd60e01b81523360048201523060248201526044810186905260208160648160008b5af1908115610a19576000916114af575b50611249576312171d8360e31b60005260046000fd5b6114c8915060203d602011610a1257610a048183611da4565b87611499565b63397bb34360e01b60005260046000fd5b631cd861cd60e01b60005260046000fd5b82600052600160205260ff60056040600020015460201c166111aa5763413d435b60e11b60005260046000fd5b600185019150818511611400571415866111a4565b8015610a8a579261118b565b346102445761154c36611d64565b611554611f97565b81600052600160205260ff6005604060002001541615610ad8576000828152600160209081526040909120600501805463ff000000191683151560181b63ff000000161790557f653b56ea3ea7dfba44234dbc807bac97a2a0adafb6d22427d818250375f1e91191610f25565b34610244576040366003190112610244576004356115dd611d4e565b906115e6611f97565b6001600160a01b0382169081156118255780600052600160205260ff6005604060002001541615610ad85780600052600160205260ff60056040600020015460181c161561181457806000526002602052604080600020600090848252602052208054938415610a8a57600282019081549560ff8716610a795760ff8760081c16610a68576003840154601088901c6001600160a01b031697909488159283156117a257478711610a255786956101006116c7945b61ff0019161790558760005260036020526116bc6040600020918254611dd5565b905554600854611dd5565b6008551561171457600080809381935af16116e0611dfa565b5015610b9c5760207f1c26abe6289671e3a9d493647349673af828abb9dbadff1e81762387f7cd99a3915b604051908152a4005b60405163a9059cbb60e01b81526001600160a01b0391909116600482015260248101919091526020816044816000895af1908115610a1957600091611783575b50156109d95760207f1c26abe6289671e3a9d493647349673af828abb9dbadff1e81762387f7cd99a39161170b565b61179c915060203d602011610a1257610a048183611da4565b85611754565b6040516370a0823160e01b81523060048201526020816024818e5afa908115610a19576000916117e2575b508711610a255786956101006116c79461169b565b90506020813d60201161180c575b816117fd60209383611da4565b8101031261024457518b6117cd565b3d91506117f0565b63089c998760e01b60005260046000fd5b630702b3d960e41b60005260046000fd5b346102445760003660031901126102445761184f6123ef565b60008051602061247483398151915280546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102445760203660031901126102445760043560005260046020526020604060002054604051908152f35b346102445760a0366003190112610244576084356044356024356004356064356118f4611f97565b428210610e2c5781831115610e1b578315610e0a578015610df95784158015611a9d575b610ddf57600754946040519161014083019583871067ffffffffffffffff8811176106ab57611a64610dda947f21fb045299ceafb7a136c74ee07b22d481ee9bf37a85b2d8f20c59f83ada4133986040528681526001611a478b611a2c602085018c815260408601888152611a04600560608901988c8a528d6080820190815260a082019a8a8c5260c08301956000875260e08401976000895261010085019a60008c5261012086019d8e5260005260016020526040600020945185555160018501555160028401555160038301555160048201550197511515889060ff801983541691151516179055565b518654915162ffff001990921690151560081b61ff00161790151560101b62ff000016178555565b51835463ff000000191690151560181b63ff00000016178355565b51815464ff00000000191690151560201b64ff0000000016179055565b611a6f600754611dc6565b600755604051958695869192608093969594919660a084019784526020840152604083015260608201520152565b50838511611918565b3461024457602036600319011261024457600435611ac2611f97565b80600052600160205260ff6005604060002001541615610ad85780600052600160205260ff60056040600020015460081c16610e4e57806000526001602052600560406000200161010061ff00198254161790558060005260036020527fc5285db7d8a9c3a0ce0e8982ff9a84fe8df355101d9545735558c69efb4aad5760408060002054836000526004602052816000205482519182526020820152a2005b34610244576000366003190112610244576006546040516001600160a01b039091168152602090f35b34610244576000366003190112610244576020600854604051908152f35b3461024457604036600319011261024457611bc2611d4e565b336001600160a01b03821603611bde5761000f9060043561234f565b63334bd91960e11b60005260046000fd5b346102445760403660031901126102445761000f600435611c0e611d4e565b90611c1b61052282611d83565b6122b8565b346102445760203660031901126102445761000f611c3c611d38565b611c44612009565b6120a6565b34610244576020366003190112610244576020610ea0600435611d83565b3461024457602036600319011261024457611c80611d38565b611c88611f97565b6001600160a01b031660008181526020819052604090205460ff16156105d257806000526000602052604060002060ff1981541690557fdd2e6d9f52cbe8f695939d018b7d4a216dc613a669876163ac548b916489d917600080a2005b34610244576020366003190112610244576004359063ffffffff60e01b821680920361024457602091637965db0b60e01b8114908115611d27575b5015158152f35b6301ffc9a760e01b14905083611d20565b600435906001600160a01b038216820361024457565b602435906001600160a01b038216820361024457565b6040906003190112610244576004359060243580151581036102445790565b60005260008051602061249483398151915260205260016040600020015490565b90601f8019910116810190811067ffffffffffffffff8211176106ab57604052565b60001981146114005760010190565b9190820391821161140057565b90816020910312610244575180151581036102445790565b3d15611e35573d9067ffffffffffffffff82116106ab5760405191611e29601f8201601f191660200184611da4565b82523d6000602084013e565b606090565b9190820180921161140057565b8181029291811591840414171561140057565b80600052600160205260ff6005604060002001541615611eee5780600052600160205260ff60056040600020015460081c16611eee578060005260016020526040600020544210611eee578060005260016020526001604060002001544211611eee578060005260036020526040600020549060005260016020526002604060002001541115611ee957600190565b600090565b50600090565b6001600160a01b03166000908152600560205260409020548015611eee5760001981019081116114005790565b6001600160a01b03168015611f815760008051602061247483398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b3360009081527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb456602052604090205460ff1615611fd057565b63e2517d3f60e01b600052336004527f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92960245260446000fd5b3360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff161561204257565b63e2517d3f60e01b60005233600452600060245260446000fd5b60008181526000805160206124948339815191526020908152604080832033845290915290205460ff161561208e5750565b63e2517d3f60e01b6000523360045260245260446000fd5b6001600160a01b03811660009081527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb456602052604090205460ff16611eee576001600160a01b031660008181527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb45660205260408120805460ff191660011790553391907f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929906000805160206124548339815191529080a4600190565b6001600160a01b03811660009081527f1e8c4920ddc559c39a77379e501bd8d5349fc1b24d14b05de3e54d9cec19adb7602052604090205460ff16611eee576001600160a01b031660008181527f1e8c4920ddc559c39a77379e501bd8d5349fc1b24d14b05de3e54d9cec19adb760205260408120805460ff191660011790553391907f3496e2e73c4d42b75d702e60d9e48102720b8691234415963a5a857b86425d07906000805160206124548339815191529080a4600190565b6001600160a01b03811660009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16611eee576001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391906000805160206124548339815191528180a4600190565b6000818152600080516020612494833981519152602090815260408083206001600160a01b038616845290915290205460ff16612348576000818152600080516020612494833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291906000805160206124548339815191529080a4600190565b5050600090565b6000818152600080516020612494833981519152602090815260408083206001600160a01b038616845290915290205460ff1615612348576000818152600080516020612494833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b600080516020612474833981519152546001600160a01b0316330361241057565b63118cdaa760e01b6000523360045260246000fd5b60ff6000805160206124b48339815191525460401c161561244257565b631afcd79f60e31b60005260046000fdfe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212208ca5cb10f57094e2c9800545dd8ef8062a5acffd4f43c90527c1ec5e052d71f864736f6c634300081c0033",
|
1546
|
+
"deployedBytecode": "0x6080806040526004361015610011575b005b60003560e01c90816301ffc9a714611ce5575080631c88705d14611c67578063248a9ca314611c4957806327ac0c5814611c2057806328f3e6581461035e5780632f2ff15d14611bef57806336568abe14611ba957806342683c6714611b8b5780634b60ce7714611b625780635a1e6ca114611aa65780635af6df4c146118cc5780636fed6940146118a0578063715018a6146118365780637ad226dc146115c15780637cf30c601461153e5780638952ac1e1461112e5780638a56829914610e5f5780638c65c81f1461108f5780638d52e5551461100b5780638da5cb5b14610fd557806391d1485414610f7b57806395082d2514610f5857806397ac4a2514610f305780639bb92c4e14610ea85780639da64ac214610e7d578063a09686c414610e5f578063a217fddf14610caa578063a6be83dd14610cc6578063a734f06e14610caa578063c107532914610b12578063c213df7814610ae9578063c4428a8914610861578063c4d66de8146106c9578063d4bcdfa1146105e3578063d4ee651b1461052c578063d547741f146104f6578063d871b0e314610471578063daf9c21014610429578063eb4c9e9b146103ef578063ed54890d1461035e578063efe9c9e2146102d9578063f0a3a97c1461029e578063f0e1bb3e14610272578063f2fde38b146102495763f5b541a61461020957005b346102445760003660031901126102445760206040517f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b9298152f35b600080fd5b346102445760203660031901126102445761000f610265611d38565b61026d6123ef565b611f21565b346102445760203660031901126102445760043560005260036020526020604060002054604051908152f35b346102445760003660031901126102445760206040517f3496e2e73c4d42b75d702e60d9e48102720b8691234415963a5a857b86425d078152f35b34610244576020366003190112610244576102f2611d38565b6102fa611f97565b6001600160a01b0316801561034d57600680546001600160a01b0319811683179091556001600160a01b03167f38b700f64059658d3f95b87d8db51f669197c89da3076d26d42bb8fb06159fa9600080a3005b630f58058360e11b60005260046000fd5b34610244576040366003190112610244576040610379611d4e565b6004356000908152600260208181528483206001600160a01b0394851684528152939091208054600182015492820154600390920154604080519283529582019390935260ff808316151595820195909552600882901c9094161515606085015260101c909116608083015260a082015260c090f35b34610244576020366003190112610244576001600160a01b03610410611d38565b1660005260056020526020604060002054604051908152f35b34610244576020366003190112610244576001600160a01b0361044a611d38565b166000526000602052604080600020600160ff825416910154825191151582526020820152f35b346102445760203660031901126102445761048a611d38565b600754600091829182916001600160a01b03165b8185106104b5576040848482519182526020820152f35b90916104ec600191866000526002602052826104e36040806000206000908882526020522097885490611e3a565b96015490611e3a565b940193919061049e565b346102445760403660031901126102445761000f600435610515611d4e565b9061052761052282611d83565b61205c565b61234f565b3461024457604036600319011261024457610545611d38565b60243590610551611f97565b60018060a01b03169081600052600060205260ff60406000205416156105d25780156105c157600082815260208181526040918290206001018054908490558251908152908101929092527f62e2c9c75b287778c0b58f1c1d83fa8f9978a33848e0b423735fd44f48ebe3c191a2005b637841c2c960e11b60005260046000fd5b6307c241ad60e51b60005260046000fd5b34610244576040366003190112610244576105fc611d38565b60243590610608611f97565b6001600160a01b0316908115801590816106c1575b5061034d5780156105c15760405190604082019082821067ffffffffffffffff8311176106ab577fe184914670d9e097e90729e2a9159866b30b1203952f0586bedca1d6fcf130a892602092604052600181526001838201838152866000526000855261069e604060002093511515849060ff801983541691151516179055565b51910155604051908152a2005b634e487b7160e01b600052604160045260246000fd5b90508361061d565b34610244576020366003190112610244576106e2611d38565b6000805160206124b4833981519152549060ff8260401c16159167ffffffffffffffff811680159081610859575b600114908161084f575b159081610846575b506108355767ffffffffffffffff1981166001176000805160206124b48339815191525582610808575b50610755612425565b61075d612425565b61076633611f21565b61076e612425565b6001600160a01b0316801561034d576bffffffffffffffffffffffff60a01b600654161760065561079e3361221e565b506107a8336120a6565b506107af57005b68ff0000000000000000196000805160206124b483398151915254166000805160206124b4833981519152557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b68ffffffffffffffffff191668010000000000000001176000805160206124b4833981519152558261074c565b63f92ee8a960e01b60005260046000fd5b90501584610722565b303b15915061071a565b849150610710565b346102445760203660031901126102445760043580600052600160205260ff6005604060002001541615610ad85780600052600160205260ff60056040600020015460081c161580610abd575b610aac5780600052600160205260ff60056040600020015460101c1615610a9b5760008181526002602090815260408083203384529091529020805490919015610a8a576002820180549260ff8416610a795760ff8460081c16610a6857600101546006546040516370a0823160e01b815230600482015291949190602090829060249082906001600160a01b03165afa908115610a1957600091610a36575b508411610a255760ff1916600117905560065460405163a9059cbb60e01b8152336004820152602481018490529060209082906001600160a01b0316816000816044810103925af1908115610a19576000916109ea575b50156109d9576040519182527f880f2ef2613b092f1a0a819f294155c98667eb294b7e6bf7a3810278142c1a1c60203393a3005b6312171d8360e31b60005260046000fd5b610a0c915060203d602011610a12575b610a048183611da4565b810190611de2565b836109a5565b503d6109fa565b6040513d6000823e3d90fd5b631e9acf1760e31b60005260046000fd5b90506020813d602011610a60575b81610a5160209383611da4565b8101031261024457518561094e565b3d9150610a44565b63542f378d60e11b60005260046000fd5b630c8d9eab60e31b60005260046000fd5b631f2a200560e01b60005260046000fd5b6371642c7760e11b60005260046000fd5b633df07da560e01b60005260046000fd5b508060005260016020526001604060002001544211156108ae565b63266f368560e01b60005260046000fd5b346102445760203660031901126102445761000f610b05611d38565b610b0d612009565b612162565b3461024457604036600319011261024457610b2b611d38565b3360009081527f1e8c4920ddc559c39a77379e501bd8d5349fc1b24d14b05de3e54d9cec19adb76020526040902054602435919060ff1615610c71578115610a8a576001600160a01b031680610bad5750478111610a2557600080808093335af1610b94611dfa565b5015610b9c57005b630db2c7f160e31b60005260046000fd5b6040516370a0823160e01b8152306004820152602081602481855afa908115610a1957600091610c3f575b508211610a255760405163a9059cbb60e01b81523360048201526024810192909252602090829060449082906000905af1908115610a1957600091610c20575b50156109d957005b610c39915060203d602011610a1257610a048183611da4565b81610c18565b90506020813d602011610c69575b81610c5a60209383611da4565b81010312610244575183610bd8565b3d9150610c4d565b63e2517d3f60e01b600052336004527f3496e2e73c4d42b75d702e60d9e48102720b8691234415963a5a857b86425d0760245260446000fd5b3461024457600036600319011261024457602060405160008152f35b346102445760c03660031901126102445760043560843560443560243560643560a435610cf1611f97565b85600052600160205260ff6005604060002001541615610ad85785600052600160205260ff60056040600020015460081c16610e4e57856000526001602052604060002054421015610e3d57428310610e2c5782841115610e1b578115610e0a578415610df95780158015610df0575b610ddf5760008681526001602081815260409283902086815591820187905560028201859055600382018890556004909101839055815194855284019490945292820152606081019290925260808201527fe35865500052be0ea409d44d56e7f66a0e0728bab40a71f941ccd691b9159596908060a081015b0390a2005b6390e3cae960e01b60005260046000fd5b50818111610d61565b6305d7ba1960e11b60005260046000fd5b63e2494de760e01b60005260046000fd5b6338af65f760e01b60005260046000fd5b632ca4094f60e21b60005260046000fd5b634eb5402b60e01b60005260046000fd5b6307af775360e11b60005260046000fd5b34610244576000366003190112610244576020600754604051908152f35b34610244576020366003190112610244576020610ea0610e9b611d38565b611ef4565b604051908152f35b3461024457610eb636611d64565b610ebe611f97565b81600052600160205260ff6005604060002001541615610ad8576000828152600160209081526040909120600501805462ff0000191683151560101b62ff0000161790557f74c19978ee48fa394fffde7cccc94793539daf917f2a8fd2d5e851409de3f7a0915b6040519015158152a2005b34610244576020366003190112610244576020610f4e600435611e5a565b6040519015158152f35b34610244576000366003190112610244576020604051670de0b6b3a76400008152f35b3461024457604036600319011261024457610f94611d4e565b60043560005260008051602061249483398151915260205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b3461024457600036600319011261024457600080516020612474833981519152546040516001600160a01b039091168152602090f35b346102445761101936611d64565b611021611f97565b81600052600160205260ff6005604060002001541615610ad8576000828152600160209081526040909120600501805464ff000000001916831515831b64ff00000000161790557f1c1c03453d1eefaa85a62e371adba496bc16fa6320bf5416b0af1249081ca84c91610f25565b34610244576020366003190112610244576004356000526001602052610140604060002060ff815491600181015490600281015460038201549060056004840154930154936040519687526020870152604086015260608501526080840152818116151560a0840152818160081c16151560c0840152818160101c16151560e0840152818160181c16151561010084015260201c161515610120820152f35b606036600319011261024457600435611145611d4e565b6044359161115281611e5a565b15610aac5760018060a01b0382169283600052600060205260ff60406000205416156105d257831590811561153257503415610a8a5734925b336000526005602052604060002054801515908161151d575b506114f0575b846000526000602052670de0b6b3a76400006111ce60016040600020015486611e47565b049083600052600260205260408060002060009060018060a01b033316825260205220926111fd838554611e3a565b856000526001602052600460406000200154106114df5784600052600360205261122c83604060002054611e3a565b856000526001602052600260406000200154106114ce571561145f575b83600052600160205261126460036040600020015483611e47565b8460005260016020526002604060002001549081156114495704928054156000146114165784600052600460205260406000206112a18154611dc6565b90556001850191828611611400576001923360005260056020526040600020556002820190815490620100008560b01b039060101b1690620100008560b01b0319161790558560038201555b6112f8838254611e3a565b815501611306838254611e3a565b90558260005260036020526040600020611321828254611e3a565b905561132f81600854611e3a565b6008558260005260036020526040600020548360005260016020526002604060002001541115611392575b604051938452602084015260408301527fb479ec976a9860505652c0d9f5dc15bc5fbca1a55c3da9cabe662f1b6f8090d260603393a4005b826000526001602052600560406000200161010061ff0019825416179055826000526003602052827fc5285db7d8a9c3a0ce0e8982ff9a84fe8df355101d9545735558c69efb4aad5760408060002054836000526004602052816000205482519182526020820152a261135a565b634e487b7160e01b600052601160045260246000fd5b600281015490915060101c6001600160a01b031686036105d25780600360019201611442878254611e3a565b90556112ed565b634e487b7160e01b600052601260045260246000fd5b6040516323b872dd60e01b81523360048201523060248201526044810186905260208160648160008b5af1908115610a19576000916114af575b50611249576312171d8360e31b60005260046000fd5b6114c8915060203d602011610a1257610a048183611da4565b87611499565b63397bb34360e01b60005260046000fd5b631cd861cd60e01b60005260046000fd5b82600052600160205260ff60056040600020015460201c166111aa5763413d435b60e11b60005260046000fd5b600185019150818511611400571415866111a4565b8015610a8a579261118b565b346102445761154c36611d64565b611554611f97565b81600052600160205260ff6005604060002001541615610ad8576000828152600160209081526040909120600501805463ff000000191683151560181b63ff000000161790557f653b56ea3ea7dfba44234dbc807bac97a2a0adafb6d22427d818250375f1e91191610f25565b34610244576040366003190112610244576004356115dd611d4e565b906115e6611f97565b6001600160a01b0382169081156118255780600052600160205260ff6005604060002001541615610ad85780600052600160205260ff60056040600020015460181c161561181457806000526002602052604080600020600090848252602052208054938415610a8a57600282019081549560ff8716610a795760ff8760081c16610a68576003840154601088901c6001600160a01b031697909488159283156117a257478711610a255786956101006116c7945b61ff0019161790558760005260036020526116bc6040600020918254611dd5565b905554600854611dd5565b6008551561171457600080809381935af16116e0611dfa565b5015610b9c5760207f1c26abe6289671e3a9d493647349673af828abb9dbadff1e81762387f7cd99a3915b604051908152a4005b60405163a9059cbb60e01b81526001600160a01b0391909116600482015260248101919091526020816044816000895af1908115610a1957600091611783575b50156109d95760207f1c26abe6289671e3a9d493647349673af828abb9dbadff1e81762387f7cd99a39161170b565b61179c915060203d602011610a1257610a048183611da4565b85611754565b6040516370a0823160e01b81523060048201526020816024818e5afa908115610a19576000916117e2575b508711610a255786956101006116c79461169b565b90506020813d60201161180c575b816117fd60209383611da4565b8101031261024457518b6117cd565b3d91506117f0565b63089c998760e01b60005260046000fd5b630702b3d960e41b60005260046000fd5b346102445760003660031901126102445761184f6123ef565b60008051602061247483398151915280546001600160a01b031981169091556000906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102445760203660031901126102445760043560005260046020526020604060002054604051908152f35b346102445760a0366003190112610244576084356044356024356004356064356118f4611f97565b428210610e2c5781831115610e1b578315610e0a578015610df95784158015611a9d575b610ddf57600754946040519161014083019583871067ffffffffffffffff8811176106ab57611a64610dda947f21fb045299ceafb7a136c74ee07b22d481ee9bf37a85b2d8f20c59f83ada4133986040528681526001611a478b611a2c602085018c815260408601888152611a04600560608901988c8a528d6080820190815260a082019a8a8c5260c08301956000875260e08401976000895261010085019a60008c5261012086019d8e5260005260016020526040600020945185555160018501555160028401555160038301555160048201550197511515889060ff801983541691151516179055565b518654915162ffff001990921690151560081b61ff00161790151560101b62ff000016178555565b51835463ff000000191690151560181b63ff00000016178355565b51815464ff00000000191690151560201b64ff0000000016179055565b611a6f600754611dc6565b600755604051958695869192608093969594919660a084019784526020840152604083015260608201520152565b50838511611918565b3461024457602036600319011261024457600435611ac2611f97565b80600052600160205260ff6005604060002001541615610ad85780600052600160205260ff60056040600020015460081c16610e4e57806000526001602052600560406000200161010061ff00198254161790558060005260036020527fc5285db7d8a9c3a0ce0e8982ff9a84fe8df355101d9545735558c69efb4aad5760408060002054836000526004602052816000205482519182526020820152a2005b34610244576000366003190112610244576006546040516001600160a01b039091168152602090f35b34610244576000366003190112610244576020600854604051908152f35b3461024457604036600319011261024457611bc2611d4e565b336001600160a01b03821603611bde5761000f9060043561234f565b63334bd91960e11b60005260046000fd5b346102445760403660031901126102445761000f600435611c0e611d4e565b90611c1b61052282611d83565b6122b8565b346102445760203660031901126102445761000f611c3c611d38565b611c44612009565b6120a6565b34610244576020366003190112610244576020610ea0600435611d83565b3461024457602036600319011261024457611c80611d38565b611c88611f97565b6001600160a01b031660008181526020819052604090205460ff16156105d257806000526000602052604060002060ff1981541690557fdd2e6d9f52cbe8f695939d018b7d4a216dc613a669876163ac548b916489d917600080a2005b34610244576020366003190112610244576004359063ffffffff60e01b821680920361024457602091637965db0b60e01b8114908115611d27575b5015158152f35b6301ffc9a760e01b14905083611d20565b600435906001600160a01b038216820361024457565b602435906001600160a01b038216820361024457565b6040906003190112610244576004359060243580151581036102445790565b60005260008051602061249483398151915260205260016040600020015490565b90601f8019910116810190811067ffffffffffffffff8211176106ab57604052565b60001981146114005760010190565b9190820391821161140057565b90816020910312610244575180151581036102445790565b3d15611e35573d9067ffffffffffffffff82116106ab5760405191611e29601f8201601f191660200184611da4565b82523d6000602084013e565b606090565b9190820180921161140057565b8181029291811591840414171561140057565b80600052600160205260ff6005604060002001541615611eee5780600052600160205260ff60056040600020015460081c16611eee578060005260016020526040600020544210611eee578060005260016020526001604060002001544211611eee578060005260036020526040600020549060005260016020526002604060002001541115611ee957600190565b600090565b50600090565b6001600160a01b03166000908152600560205260409020548015611eee5760001981019081116114005790565b6001600160a01b03168015611f815760008051602061247483398151915280546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b631e4fbdf760e01b600052600060045260246000fd5b3360009081527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb456602052604090205460ff1615611fd057565b63e2517d3f60e01b600052336004527f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92960245260446000fd5b3360009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff161561204257565b63e2517d3f60e01b60005233600452600060245260446000fd5b60008181526000805160206124948339815191526020908152604080832033845290915290205460ff161561208e5750565b63e2517d3f60e01b6000523360045260245260446000fd5b6001600160a01b03811660009081527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb456602052604090205460ff16611eee576001600160a01b031660008181527f448256db8f8fb95ee3eaaf89c1051414494e85cebb6057fcf996cc3d0ccfb45660205260408120805460ff191660011790553391907f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929906000805160206124548339815191529080a4600190565b6001600160a01b03811660009081527f1e8c4920ddc559c39a77379e501bd8d5349fc1b24d14b05de3e54d9cec19adb7602052604090205460ff16611eee576001600160a01b031660008181527f1e8c4920ddc559c39a77379e501bd8d5349fc1b24d14b05de3e54d9cec19adb760205260408120805460ff191660011790553391907f3496e2e73c4d42b75d702e60d9e48102720b8691234415963a5a857b86425d07906000805160206124548339815191529080a4600190565b6001600160a01b03811660009081527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d602052604090205460ff16611eee576001600160a01b031660008181527fb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d60205260408120805460ff191660011790553391906000805160206124548339815191528180a4600190565b6000818152600080516020612494833981519152602090815260408083206001600160a01b038616845290915290205460ff16612348576000818152600080516020612494833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291906000805160206124548339815191529080a4600190565b5050600090565b6000818152600080516020612494833981519152602090815260408083206001600160a01b038616845290915290205460ff1615612348576000818152600080516020612494833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b600080516020612474833981519152546001600160a01b0316330361241057565b63118cdaa760e01b6000523360045260246000fd5b60ff6000805160206124b48339815191525460401c161561244257565b631afcd79f60e31b60005260046000fdfe2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212208ca5cb10f57094e2c9800545dd8ef8062a5acffd4f43c90527c1ec5e052d71f864736f6c634300081c0033",
|
1547
1547
|
"linkReferences": {},
|
1548
1548
|
"deployedLinkReferences": {}
|
1549
1549
|
}
|