@allbridge/bridge-core-sdk 3.27.0-alpha.15 → 3.27.0-alpha.17

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/cjs/index.js CHANGED
@@ -1,7 +1,7 @@
1
- "use strict";var ag=Object.create;var ga=Object.defineProperty;var rg=Object.getOwnPropertyDescriptor;var og=Object.getOwnPropertyNames;var sg=Object.getPrototypeOf,dg=Object.prototype.hasOwnProperty;var Gn=(a,n)=>()=>(a&&(n=a(a=0)),n);var Lr=(a,n)=>()=>(n||a((n={exports:{}}).exports,n),n.exports),cg=(a,n)=>{for(var i in n)ga(a,i,{get:n[i],enumerable:!0})},Bs=(a,n,i,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of og(n))!dg.call(a,o)&&o!==i&&ga(a,o,{get:()=>n[o],enumerable:!(r=rg(n,o))||r.enumerable});return a};var ce=(a,n,i)=>(i=a!=null?ag(sg(a)):{},Bs(n||!a||!a.__esModule?ga(i,"default",{value:a,enumerable:!0}):i,a)),gg=a=>Bs(ga({},"__esModule",{value:!0}),a);function ka(a){try{return(0,ja.fromBase58)(a).length===Xg}catch{return!1}}function Ee(a){return Pg(a)&&Lg(a)===Li}function On(a){return Ee(a)}function Mg(a){return a.includes("::")?go(a):a}function go(a){let[n,i]=a.split("::"),r=a.slice(n.length+i.length+4),o=r.includes("<")?r.slice(0,r.indexOf("<")):r,s=r.includes("<")?(0,ja.splitGenericParameters)(r.slice(r.indexOf("<")+1,r.lastIndexOf(">"))).map(d=>Mg(d.trim())):[];return{address:j(n),module:i,name:o,typeParams:s}}function ji(a){let{address:n,module:i,name:r,typeParams:o}=typeof a=="string"?go(a):a,s=o?.length>0?`<${o.map(d=>typeof d=="string"?d:ji(d)).join(",")}>`:"";return`${n}::${i}::${r}${s}`}function j(a,n=!1){let i=a.toLowerCase();return!n&&i.startsWith("0x")&&(i=i.slice(2)),`0x${i.padStart(Li*2,"0")}`}function Je(a,n=!1){return j(a,n)}function Pg(a){return/^(0x|0X)?[a-fA-F0-9]+$/.test(a)&&a.length%2===0}function Lg(a){return/^(0x|0X)/.test(a)?(a.length-2)/2:a.length/2}var ja,Xg,Li,ze=Gn(()=>{ja=require("@mysten/bcs"),Xg=32;Li=32});var Yd,jg,kg,kt,Ao=Gn(()=>{Yd=require("@mysten/bcs");ze();jg=/^vector<(.+)>$/,kg=/^([^:]+)::([^:]+)::([^<]+)(<(.+)>)?/,kt=class a{static parseFromStr(n,i=!1){if(n==="address")return{address:null};if(n==="bool")return{bool:null};if(n==="u8")return{u8:null};if(n==="u16")return{u16:null};if(n==="u32")return{u32:null};if(n==="u64")return{u64:null};if(n==="u128")return{u128:null};if(n==="u256")return{u256:null};if(n==="signer")return{signer:null};let r=n.match(jg);if(r)return{vector:a.parseFromStr(r[1],i)};let o=n.match(kg);if(o)return{struct:{address:i?j(o[1]):o[1],module:o[2],name:o[3],typeParams:o[5]===void 0?[]:a.parseStructTypeArgs(o[5],i)}};throw new Error(`Encountered unexpected token when parsing type args for ${n}`)}static parseStructTypeArgs(n,i=!1){return(0,Yd.splitGenericParameters)(n).map(r=>a.parseFromStr(r,i))}static tagToString(n){if("bool"in n)return"bool";if("u8"in n)return"u8";if("u16"in n)return"u16";if("u32"in n)return"u32";if("u64"in n)return"u64";if("u128"in n)return"u128";if("u256"in n)return"u256";if("address"in n)return"address";if("signer"in n)return"signer";if("vector"in n)return`vector<${a.tagToString(n.vector)}>`;if("struct"in n){let i=n.struct,r=i.typeParams.map(a.tagToString).join(", ");return`${i.address}::${i.module}::${i.name}${r?`<${r}>`:""}`}throw new Error("Invalid TypeTag")}}});function Hg(a){return b.bcs.u64({name:"unsafe_u64",...a}).transform({input:n=>n,output:n=>Number(n)})}function Jg(a){return b.bcs.enum("Option",{None:null,Some:a})}function No(a){return b.bcs.struct(`IntentMessage<${a.name}>`,{intent:Fo,value:a})}var b,ae,_e,xe,lo,uo,po,mo,Ha,pt,bo,yo,Co,Io,ho,vo,Ro,fo,Yo,Bo,Wo,To,Fo,wo,Go,Zo,So,Bd,zg,Vo,Wd,Td,Xo=Gn(()=>{b=require("@mysten/bcs");ze();Ao();ae=b.bcs.bytes(Li).transform({validate:a=>{let n=typeof a=="string"?a:(0,b.toHex)(a);if(!n||!Ee(j(n)))throw new Error(`Invalid Sui address ${n}`)},input:a=>typeof a=="string"?(0,b.fromHex)(j(a)):a,output:a=>j((0,b.toHex)(a))}),_e=b.bcs.vector(b.bcs.u8()).transform({name:"ObjectDigest",input:a=>(0,b.fromBase58)(a),output:a=>(0,b.toBase58)(new Uint8Array(a)),validate:a=>{if((0,b.fromBase58)(a).length!==32)throw new Error("ObjectDigest must be 32 bytes")}}),xe=b.bcs.struct("SuiObjectRef",{objectId:ae,version:b.bcs.u64(),digest:_e}),lo=b.bcs.struct("SharedObjectRef",{objectId:ae,initialSharedVersion:b.bcs.u64(),mutable:b.bcs.bool()}),uo=b.bcs.enum("ObjectArg",{ImmOrOwnedObject:xe,SharedObject:lo,Receiving:xe}),po=b.bcs.enum("CallArg",{Pure:b.bcs.struct("Pure",{bytes:b.bcs.vector(b.bcs.u8()).transform({input:a=>typeof a=="string"?(0,b.fromBase64)(a):a,output:a=>(0,b.toBase64)(new Uint8Array(a))})}),Object:uo}),mo=b.bcs.enum("TypeTag",{bool:null,u8:null,u64:null,u128:null,address:null,signer:null,vector:b.bcs.lazy(()=>mo),struct:b.bcs.lazy(()=>vo),u16:null,u32:null,u256:null}),Ha=mo.transform({input:a=>typeof a=="string"?kt.parseFromStr(a,!0):a,output:a=>kt.tagToString(a)}),pt=b.bcs.enum("Argument",{GasCoin:null,Input:b.bcs.u16(),Result:b.bcs.u16(),NestedResult:b.bcs.tuple([b.bcs.u16(),b.bcs.u16()])}),bo=b.bcs.struct("ProgrammableMoveCall",{package:ae,module:b.bcs.string(),function:b.bcs.string(),typeArguments:b.bcs.vector(Ha),arguments:b.bcs.vector(pt)}),yo=b.bcs.enum("Command",{MoveCall:bo,TransferObjects:b.bcs.struct("TransferObjects",{objects:b.bcs.vector(pt),address:pt}),SplitCoins:b.bcs.struct("SplitCoins",{coin:pt,amounts:b.bcs.vector(pt)}),MergeCoins:b.bcs.struct("MergeCoins",{destination:pt,sources:b.bcs.vector(pt)}),Publish:b.bcs.struct("Publish",{modules:b.bcs.vector(b.bcs.vector(b.bcs.u8()).transform({input:a=>typeof a=="string"?(0,b.fromBase64)(a):a,output:a=>(0,b.toBase64)(new Uint8Array(a))})),dependencies:b.bcs.vector(ae)}),MakeMoveVec:b.bcs.struct("MakeMoveVec",{type:Jg(Ha).transform({input:a=>a===null?{None:!0}:{Some:a},output:a=>a.Some??null}),elements:b.bcs.vector(pt)}),Upgrade:b.bcs.struct("Upgrade",{modules:b.bcs.vector(b.bcs.vector(b.bcs.u8()).transform({input:a=>typeof a=="string"?(0,b.fromBase64)(a):a,output:a=>(0,b.toBase64)(new Uint8Array(a))})),dependencies:b.bcs.vector(ae),package:ae,ticket:pt})}),Co=b.bcs.struct("ProgrammableTransaction",{inputs:b.bcs.vector(po),commands:b.bcs.vector(yo)}),Io=b.bcs.enum("TransactionKind",{ProgrammableTransaction:Co,ChangeEpoch:null,Genesis:null,ConsensusCommitPrologue:null}),ho=b.bcs.enum("TransactionExpiration",{None:null,Epoch:Hg()}),vo=b.bcs.struct("StructTag",{address:ae,module:b.bcs.string(),name:b.bcs.string(),typeParams:b.bcs.vector(mo)}),Ro=b.bcs.struct("GasData",{payment:b.bcs.vector(xe),owner:ae,price:b.bcs.u64(),budget:b.bcs.u64()}),fo=b.bcs.struct("TransactionDataV1",{kind:Io,sender:ae,gasData:Ro,expiration:ho}),Yo=b.bcs.enum("TransactionData",{V1:fo}),Bo=b.bcs.enum("IntentScope",{TransactionData:null,TransactionEffects:null,CheckpointSummary:null,PersonalMessage:null}),Wo=b.bcs.enum("IntentVersion",{V0:null}),To=b.bcs.enum("AppId",{Sui:null}),Fo=b.bcs.struct("Intent",{scope:Bo,version:Wo,appId:To});wo=b.bcs.enum("CompressedSignature",{ED25519:b.bcs.fixedArray(64,b.bcs.u8()),Secp256k1:b.bcs.fixedArray(64,b.bcs.u8()),Secp256r1:b.bcs.fixedArray(64,b.bcs.u8()),ZkLogin:b.bcs.vector(b.bcs.u8())}),Go=b.bcs.enum("PublicKey",{ED25519:b.bcs.fixedArray(32,b.bcs.u8()),Secp256k1:b.bcs.fixedArray(33,b.bcs.u8()),Secp256r1:b.bcs.fixedArray(33,b.bcs.u8()),ZkLogin:b.bcs.vector(b.bcs.u8())}),Zo=b.bcs.struct("MultiSigPkMap",{pubKey:Go,weight:b.bcs.u8()}),So=b.bcs.struct("MultiSigPublicKey",{pk_map:b.bcs.vector(Zo),threshold:b.bcs.u16()}),Bd=b.bcs.struct("MultiSig",{sigs:b.bcs.vector(wo),bitmap:b.bcs.u16(),multisig_pk:So}),zg=b.bcs.vector(b.bcs.u8()).transform({input:a=>typeof a=="string"?(0,b.fromBase64)(a):a,output:a=>(0,b.toBase64)(new Uint8Array(a))}),Vo=b.bcs.struct("SenderSignedTransaction",{intentMessage:No(Yo),txSignatures:b.bcs.vector(zg)}),Wd=b.bcs.vector(Vo,{name:"SenderSignedData"}),Td=b.bcs.struct("PasskeyAuthenticator",{authenticatorData:b.bcs.vector(b.bcs.u8()),clientDataJson:b.bcs.string(),userSignature:b.bcs.vector(b.bcs.u8())})});var I,xg,Og,Fd,Ug,Kg,Qg,Nd,wd,Un,Dg,Mo,Eg,_g,$g,qg,eA,tA,Gd,Zd=Gn(()=>{I=require("@mysten/bcs");Xo();xg=I.bcs.enum("PackageUpgradeError",{UnableToFetchPackage:I.bcs.struct("UnableToFetchPackage",{packageId:ae}),NotAPackage:I.bcs.struct("NotAPackage",{objectId:ae}),IncompatibleUpgrade:null,DigestDoesNotMatch:I.bcs.struct("DigestDoesNotMatch",{digest:I.bcs.vector(I.bcs.u8())}),UnknownUpgradePolicy:I.bcs.struct("UnknownUpgradePolicy",{policy:I.bcs.u8()}),PackageIDDoesNotMatch:I.bcs.struct("PackageIDDoesNotMatch",{packageId:ae,ticketId:ae})}),Og=I.bcs.struct("ModuleId",{address:ae,name:I.bcs.string()}),Fd=I.bcs.struct("MoveLocation",{module:Og,function:I.bcs.u16(),instruction:I.bcs.u16(),functionName:I.bcs.option(I.bcs.string())}),Ug=I.bcs.enum("CommandArgumentError",{TypeMismatch:null,InvalidBCSBytes:null,InvalidUsageOfPureArg:null,InvalidArgumentToPrivateEntryFunction:null,IndexOutOfBounds:I.bcs.struct("IndexOutOfBounds",{idx:I.bcs.u16()}),SecondaryIndexOutOfBounds:I.bcs.struct("SecondaryIndexOutOfBounds",{resultIdx:I.bcs.u16(),secondaryIdx:I.bcs.u16()}),InvalidResultArity:I.bcs.struct("InvalidResultArity",{resultIdx:I.bcs.u16()}),InvalidGasCoinUsage:null,InvalidValueUsage:null,InvalidObjectByValue:null,InvalidObjectByMutRef:null,SharedObjectOperationNotAllowed:null}),Kg=I.bcs.enum("TypeArgumentError",{TypeNotFound:null,ConstraintNotSatisfied:null}),Qg=I.bcs.enum("ExecutionFailureStatus",{InsufficientGas:null,InvalidGasObject:null,InvariantViolation:null,FeatureNotYetSupported:null,MoveObjectTooBig:I.bcs.struct("MoveObjectTooBig",{objectSize:I.bcs.u64(),maxObjectSize:I.bcs.u64()}),MovePackageTooBig:I.bcs.struct("MovePackageTooBig",{objectSize:I.bcs.u64(),maxObjectSize:I.bcs.u64()}),CircularObjectOwnership:I.bcs.struct("CircularObjectOwnership",{object:ae}),InsufficientCoinBalance:null,CoinBalanceOverflow:null,PublishErrorNonZeroAddress:null,SuiMoveVerificationError:null,MovePrimitiveRuntimeError:I.bcs.option(Fd),MoveAbort:I.bcs.tuple([Fd,I.bcs.u64()]),VMVerificationOrDeserializationError:null,VMInvariantViolation:null,FunctionNotFound:null,ArityMismatch:null,TypeArityMismatch:null,NonEntryFunctionInvoked:null,CommandArgumentError:I.bcs.struct("CommandArgumentError",{argIdx:I.bcs.u16(),kind:Ug}),TypeArgumentError:I.bcs.struct("TypeArgumentError",{argumentIdx:I.bcs.u16(),kind:Kg}),UnusedValueWithoutDrop:I.bcs.struct("UnusedValueWithoutDrop",{resultIdx:I.bcs.u16(),secondaryIdx:I.bcs.u16()}),InvalidPublicFunctionReturnType:I.bcs.struct("InvalidPublicFunctionReturnType",{idx:I.bcs.u16()}),InvalidTransferObject:null,EffectsTooLarge:I.bcs.struct("EffectsTooLarge",{currentSize:I.bcs.u64(),maxSize:I.bcs.u64()}),PublishUpgradeMissingDependency:null,PublishUpgradeDependencyDowngrade:null,PackageUpgradeError:I.bcs.struct("PackageUpgradeError",{upgradeError:xg}),WrittenObjectsTooLarge:I.bcs.struct("WrittenObjectsTooLarge",{currentSize:I.bcs.u64(),maxSize:I.bcs.u64()}),CertificateDenied:null,SuiMoveVerificationTimedout:null,SharedObjectOperationNotAllowed:null,InputObjectDeleted:null,ExecutionCancelledDueToSharedObjectCongestion:I.bcs.struct("ExecutionCancelledDueToSharedObjectCongestion",{congestedObjects:I.bcs.vector(ae)}),AddressDeniedForCoin:I.bcs.struct("AddressDeniedForCoin",{address:ae,coinType:I.bcs.string()}),CoinTypeGlobalPause:I.bcs.struct("CoinTypeGlobalPause",{coinType:I.bcs.string()}),ExecutionCancelledDueToRandomnessUnavailable:null}),Nd=I.bcs.enum("ExecutionStatus",{Success:null,Failed:I.bcs.struct("ExecutionFailed",{error:Qg,command:I.bcs.option(I.bcs.u64())})}),wd=I.bcs.struct("GasCostSummary",{computationCost:I.bcs.u64(),storageCost:I.bcs.u64(),storageRebate:I.bcs.u64(),nonRefundableStorageFee:I.bcs.u64()}),Un=I.bcs.enum("Owner",{AddressOwner:ae,ObjectOwner:ae,Shared:I.bcs.struct("Shared",{initialSharedVersion:I.bcs.u64()}),Immutable:null}),Dg=I.bcs.struct("TransactionEffectsV1",{status:Nd,executedEpoch:I.bcs.u64(),gasUsed:wd,modifiedAtVersions:I.bcs.vector(I.bcs.tuple([ae,I.bcs.u64()])),sharedObjects:I.bcs.vector(xe),transactionDigest:_e,created:I.bcs.vector(I.bcs.tuple([xe,Un])),mutated:I.bcs.vector(I.bcs.tuple([xe,Un])),unwrapped:I.bcs.vector(I.bcs.tuple([xe,Un])),deleted:I.bcs.vector(xe),unwrappedThenDeleted:I.bcs.vector(xe),wrapped:I.bcs.vector(xe),gasObject:I.bcs.tuple([xe,Un]),eventsDigest:I.bcs.option(_e),dependencies:I.bcs.vector(_e)}),Mo=I.bcs.tuple([I.bcs.u64(),_e]),Eg=I.bcs.enum("ObjectIn",{NotExist:null,Exist:I.bcs.tuple([Mo,Un])}),_g=I.bcs.enum("ObjectOut",{NotExist:null,ObjectWrite:I.bcs.tuple([_e,Un]),PackageWrite:Mo}),$g=I.bcs.enum("IDOperation",{None:null,Created:null,Deleted:null}),qg=I.bcs.struct("EffectsObjectChange",{inputState:Eg,outputState:_g,idOperation:$g}),eA=I.bcs.enum("UnchangedSharedKind",{ReadOnlyRoot:Mo,MutateDeleted:I.bcs.u64(),ReadDeleted:I.bcs.u64(),Cancelled:I.bcs.u64(),PerEpochConfig:null}),tA=I.bcs.struct("TransactionEffectsV2",{status:Nd,executedEpoch:I.bcs.u64(),gasUsed:wd,transactionDigest:_e,gasObjectIndex:I.bcs.option(I.bcs.u32()),eventsDigest:I.bcs.option(_e),dependencies:I.bcs.vector(_e),lamportVersion:I.bcs.u64(),changedObjects:I.bcs.vector(I.bcs.tuple([ae,qg])),unchangedSharedObjects:I.bcs.vector(I.bcs.tuple([ae,eA])),auxDataDigest:I.bcs.option(_e)}),Gd=I.bcs.enum("TransactionEffects",{V1:Dg,V2:tA})});var mt,nA,v,Re=Gn(()=>{mt=require("@mysten/bcs");Xo();Zd();Ao();nA=require("@mysten/bcs"),v={...mt.bcs,U8:mt.bcs.u8(),U16:mt.bcs.u16(),U32:mt.bcs.u32(),U64:mt.bcs.u64(),U128:mt.bcs.u128(),U256:mt.bcs.u256(),ULEB128:mt.bcs.uleb128(),Bool:mt.bcs.bool(),String:mt.bcs.string(),Address:ae,AppId:To,Argument:pt,CallArg:po,CompressedSignature:wo,GasData:Ro,Intent:Fo,IntentMessage:No,IntentScope:Bo,IntentVersion:Wo,MultiSig:Bd,MultiSigPkMap:Zo,MultiSigPublicKey:So,ObjectArg:uo,ObjectDigest:_e,ProgrammableMoveCall:bo,ProgrammableTransaction:Co,PublicKey:Go,SenderSignedData:Wd,SenderSignedTransaction:Vo,SharedObjectRef:lo,StructTag:vo,SuiObjectRef:xe,Command:yo,TransactionData:Yo,TransactionDataV1:fo,TransactionExpiration:ho,TransactionKind:Io,TypeTag:Ha,TransactionEffects:Gd,PasskeyAuthenticator:Td}});function sl(a,n=["<",">"]){let[i,r]=n,o=[],s="",d=0;for(let c=0;c<a.length;c++){let g=a[c];if(g===i&&d++,g===r&&d--,d===0&&g===","){o.push(s.trim()),s="";continue}s+=g}return o.push(s.trim()),o}function Ge(a){if(typeof a!="string")throw new Error(`Illegal type passed as a name of the type: ${a}`);let[n,i]=["<",">"],r=a.indexOf(n),o=Array.from(a).reverse().indexOf(i);if(r===-1&&o===-1)return{typeName:a,typeArgs:[]};if(r===-1||o===-1)throw new Error(`Unclosed generic in name '${a}'`);let s=a.slice(0,r),d=sl(a.slice(r+1,a.length-o-1),[n,i]);return{typeName:s,typeArgs:d}}function ac(a){return!a||typeof a!="object"||Array.isArray(a)?!1:"GasCoin"in a||"Input"in a||"Result"in a||"NestedResult"in a}function P(a,n){return ac(n)?n:a.object(n)}function it(a,n,i){if(ac(n))return P(a,n);function r(A){let{typeName:l,typeArgs:u}=Ge(A);switch(l){case"bool":return v.Bool;case"u8":return v.U8;case"u16":return v.U16;case"u32":return v.U32;case"u64":return v.U64;case"u128":return v.U128;case"u256":return v.U256;case"address":return v.Address;case"0x1::string::String":case"0x1::ascii::String":return v.String;case"0x2::object::ID":return v.Address;case"0x1::option::Option":return v.option(r(u[0]));case"vector":return v.vector(r(u[0]));default:throw new Error(`invalid primitive type ${A}`)}}function o(A){for(let l of A){if(typeof l>"u"||l===null)return!0;if(Array.isArray(l))return o(l)}return!1}function s(A){for(let l of A){if(!Array.isArray(l)){if(l===null)continue;switch(typeof l){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return s(l)}return!0}function d(A){for(let l of A){if(!Array.isArray(l))switch(typeof l){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return d(l)}return!1}let{typeName:c,typeArgs:g}=Ge(i);switch(c){case"0x1::option::Option":if(n===null)return a.pure.option("bool",null);if(s([n]))return a.pure(r(i).serialize(n));if(d([n]))throw new Error("mixing primitive and TransactionArgument values is not supported");return a.moveCall({target:"0x1::option::some",typeArguments:[g[0]],arguments:[it(a,n,g[0])]});case"vector":if(!Array.isArray(n))throw new Error("expected an array for vector type");if(n.length===0)return a.pure(v.vector(v.Bool).serialize([]));if(o(n))throw new Error("the provided array contains undefined or null values");if(s(n))return a.pure(r(i).serialize(n));if(d(n))throw new Error("mixing primitive and TransactionArgument values is not supported");return a.makeMoveVec({type:g[0],elements:n});default:return a.pure(r(i).serialize(n))}}function dl(a){let n=a.split("0x").join("");for(let i=0;i<n.length;i++)if(n[i]!=="0")return`0x${n.substring(i)}`;return"0x0"}function S(a){let{typeName:n,typeArgs:i}=Ge(a);switch(n){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return n;case"vector":return`vector<${S(i[0])}>`;default:{let r=n.split("::");r[0]=dl(r[0]);let o=r.join("::");return i.length>0?`${o}<${i.map(s=>S(s)).join(",")}>`:o}}}function $(a,...n){return n.length>0?`${a}<${n.join(", ")}>`:a}var fe=Gn(()=>{"use strict";Re()});var cn=Lr((SC,rc)=>{"use strict";fe();var qo=class a{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return S(a.$PACKAGE_ID)}get PUBLISHED_AT(){return S(a.$PUBLISHED_AT)}get PKG_V1(){return S(a.$PKG_V[1])}setPackageId(n){a.$PACKAGE_ID=n}setPublishedAt(n){a.$PUBLISHED_AT=n}setPkgV(n,i){a.$PKG_V[n]=i}setAddress(n,i){a.$PACKAGE_ID=n,a.$PUBLISHED_AT=n,a.$PKG_V[1]=i||n}},cl=new qo;rc.exports=cl});var is=Lr((PC,lc)=>{"use strict";fe();var ns=class a{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return S(a.$PACKAGE_ID)}get PUBLISHED_AT(){return S(a.$PUBLISHED_AT)}get PKG_V1(){return S(a.$PKG_V[1])}setPackageId(n){a.$PACKAGE_ID=n}setPublishedAt(n){a.$PUBLISHED_AT=n}setPkgV(n,i){a.$PKG_V[n]=i}setAddress(n,i){a.$PACKAGE_ID=n,a.$PUBLISHED_AT=n,a.$PKG_V[1]=i||n}},gl=new ns;lc.exports=gl});var os=Lr((HC,pc)=>{"use strict";fe();var rs=class a{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return S(a.$PACKAGE_ID)}get PUBLISHED_AT(){return S(a.$PUBLISHED_AT)}get PKG_V1(){return S(a.$PKG_V[1])}setPackageId(n){a.$PACKAGE_ID=n}setPublishedAt(n){a.$PUBLISHED_AT=n}setPkgV(n,i){a.$PKG_V[n]=i}setAddress(n,i){a.$PACKAGE_ID=n,a.$PUBLISHED_AT=n,a.$PKG_V[1]=i||n}},Al=new rs;pc.exports=Al});var Ol={};cg(Ol,{AddressStatus:()=>Aa,AllbridgeCoreSdk:()=>Ys,AmountFormat:()=>Bi,AmountNotEnoughError:()=>ln,ArgumentInvalidDecimalsError:()=>mi,CCTPDoesNotSupportedError:()=>We,ChainSymbol:()=>je,ChainType:()=>D,ErrorCode:()=>Ws,ExtraGasMaxLimitExceededError:()=>pi,FeePaymentMethod:()=>gt,InsufficientPoolLiquidityError:()=>Wt,InvalidAmountError:()=>dt,InvalidGasFeePaymentOptionError:()=>Zn,InvalidMessengerOptionError:()=>ui,InvalidTxError:()=>un,JupiterError:()=>he,Messenger:()=>Qe,MethodNotSupportedError:()=>H,NodeRpcUrlNotInitializedError:()=>bi,OFTDoesNotSupportedError:()=>Te,SdkError:()=>h,SdkRootError:()=>oe,SolanaAutoTxFee:()=>Ta,TimeoutError:()=>Vn,TxTooLargeError:()=>Ci,VerifyTxError:()=>Sn,YieldDoesNotSupportedError:()=>yi,assertYieldIsSupported:()=>Lc,isYieldSupported:()=>ia,mainnet:()=>li,nodeRpcUrlsDefault:()=>lg,nodeUrlsDefault:()=>Ag});module.exports=gg(Ol);var li={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://lite-api.jup.ag/swap/v1",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7,SUI:8}},cachePoolInfoChainSec:20},Ag={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},lg={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org",SUI:"https://fullnode.mainnet.sui.io",STX:"https://api.hiro.so"};var cs=require("@algorandfoundation/algokit-utils"),Rc=require("tronweb"),fc=require("web3");var oe=class extends Error{errorCode;constructor(n,i){super(i),this.errorCode=n}},h=class extends oe{constructor(n){super("SdkError",n)}},dt=class extends oe{constructor(n){super("InvalidAmountError",n)}},ln=class extends oe{constructor(n){super("AmountNotEnoughError",n)}},Wt=class extends oe{constructor(n){super("InsufficientPoolLiquidityError",n)}},he=class extends oe{constructor(n){super("JupiterError",n)}},Zn=class extends oe{constructor(n){super("InvalidGasFeePaymentOptionError",n)}},ui=class extends oe{constructor(n){super("InvalidMessengerOptionError",n)}},H=class extends oe{constructor(n){super("MethodNotSupportedError",n)}},Sn=class extends oe{constructor(n){super("VerifyTxError",n)}},un=class extends oe{constructor(n){super("InvalidTxError",n)}},pi=class extends oe{constructor(n){super("ExtraGasMaxLimitExceededError",n)}},mi=class extends oe{constructor(n,i,r){super("ArgumentInvalidDecimalsError",`Argument '${n}' decimals '${i}' cannot be greater than '${r}'`)}},Vn=class extends oe{constructor(n){super("TimeoutError",n)}},bi=class extends oe{constructor(n){super("NodeRpcUrlNotInitializedError",`For chain '${n}' Node RPC URL not initialized`)}},We=class extends oe{constructor(n){super("CCTPDoesNotSupportedError",n)}},Te=class extends oe{constructor(n){super("OFTDoesNotSupportedError",n)}},yi=class extends oe{constructor(n){super("YieldDoesNotSupportedError",n)}},Ci=class extends oe{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},Ws=(R=>(R.SDK_ERROR="SdkError",R.INVALID_AMOUNT_ERROR="InvalidAmountError",R.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",R.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",R.JUPITER_ERROR="JupiterError",R.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",R.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",R.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",R.VERIFY_TX_ERROR="VerifyTxError",R.INVALID_TX_ERROR="InvalidTxError",R.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",R.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",R.TIMEOUT_ERROR="TimeoutError",R.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",R.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",R.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",R.YIELD_DOES_NOT_SUPPORTED_ERROR="YieldDoesNotSupportedError",R.TX_TOO_LARGE="TxTooLargeError",R))(Ws||{});var je=(R=>(R.BSC="BSC",R.ETH="ETH",R.BAS="BAS",R.SOL="SOL",R.TRX="TRX",R.POL="POL",R.ARB="ARB",R.CEL="CEL",R.AVA="AVA",R.SRB="SRB",R.STLR="STLR",R.OPT="OPT",R.SUI="SUI",R.SNC="SNC",R.UNI="UNI",R.LIN="LIN",R.ALG="ALG",R.STX="STX",R))(je||{}),D=(c=>(c.EVM="EVM",c.SOLANA="SOLANA",c.TRX="TRX",c.SRB="SRB",c.SUI="SUI",c.ALG="ALG",c.STX="STX",c))(D||{});var ug={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9,ALG:6,STX:6},pg={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SNC:{chainSymbol:"SNC",chainId:"0x92",name:"Sonic",chainType:"EVM"},UNI:{chainSymbol:"UNI",chainId:"0x82",name:"Unichain",chainType:"EVM"},LIN:{chainSymbol:"LIN",chainId:"0xe708",name:"Linea",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"},ALG:{chainSymbol:"ALG",name:"Algorand",chainType:"ALG"},STX:{chainSymbol:"STX",name:"Stacks",chainType:"STX"}},k=(()=>{let a={...pg};return{addChainsProperties(n){a={...a,...n}},getChainProperty(n){let i=a[n];if(!i)throw new h(`Cannot find chain properties for ${n}`);return i},getChainsProperties(){return a},getChainDecimalsByType(n){return ug[n]}}})();var Aa=(d=>(d.OK="OK",d.INVALID="INVALID",d.FORBIDDEN="FORBIDDEN",d.UNINITIALIZED="UNINITIALIZED",d.CONTRACT_ADDRESS="CONTRACT_ADDRESS",d.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",d))(Aa||{}),jr=(s=>(s.ALLBRIDGE="allbridge",s.WORMHOLE="wormhole",s.CCTP="cctp",s.CCTP_V2="cctpV2",s.OFT="oft",s))(jr||{}),Qe=(s=>(s[s.ALLBRIDGE=1]="ALLBRIDGE",s[s.WORMHOLE=2]="WORMHOLE",s[s.CCTP=3]="CCTP",s[s.CCTP_V2=4]="CCTP_V2",s[s.OFT=5]="OFT",s))(Qe||{});var la=require("big.js");function se(a,n){throw new Error(n??`Unexpected value: ${a}`)}async function Ce(a,n){return await a.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}function Q(a){if((0,la.Big)(a).lte(0))throw new dt("Amount must be greater than zero")}function kr(a){if((0,la.Big)(a).lt(0))throw new dt("Amount must be greater or equal than zero")}function O(a,n,i){let r=(0,la.Big)(n).toFixed(),[o,s]=r.split(".");if(s&&s.length>i)throw new mi(a,s.length,i)}async function ua(a,n,i){return await Promise.race([a,new Promise((r,o)=>{setTimeout(()=>o(new Vn(n)),i)})])}async function Hr(a,n,i,r){if(i<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${i} was received.`);let o=0;for(;;)try{return await ua(a(),n,r)}catch{if(++o>=i)throw new Vn(n)}}async function Ts(a,n,i,r=1.5,o=!1){let s=[],d=0,c=await a();if(s.push(c),!n(c))return s;let g=new Date(Date.now()+i*1e3).valueOf(),A=1e3,l=A;for(;Date.now()<g;){let u=s[s.length-1];if(u===void 0||!n(u))break;d++,o&&console.info(`Waiting ${A}ms before trying again (bringing the total wait time to ${l}ms so far, of total ${i*1e3}ms)`),await new Promise(C=>setTimeout(C,A)),A=A*r,new Date(Date.now()+A).valueOf()>g&&(A=g-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${A}ms`)),l=A+l;let y=await a(u);s.push(y),o&&n(y)&&console.info(`${d}. Called ${a.name}; ${s.length} prev attempts. Most recent: ${JSON.stringify(s[s.length-1],null,2)}`)}return s}var zs=require("@algorandfoundation/algokit-utils/types/amount"),Mn=ce(require("algosdk"));var Fs=require("@algorandfoundation/algokit-utils/types/app-arc56"),Ii=require("@algorandfoundation/algokit-utils/types/app-client"),mg=require("@algorandfoundation/algokit-utils/types/app-factory"),pa={name:"Bridge",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"byte",name:"chainId"},{type:"uint64",name:"messenger"},{type:"uint64",name:"gasOracle"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInAsset",args:[{type:"uint64",name:"asset"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"swapAndBridge",args:[{type:"pay",name:"paymentRef"},{type:"axfer",name:"assetTransferRef"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"swapAndBridgeWithStable",args:[{type:"axfer",name:"assetTransferRef"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"feeTokenAmount"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"receiveTokens",args:[{type:"pay",name:"paymentRef"},{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"receiveAmountMin"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]}],recommendations:{}},{name:"registerBridge",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"bridgeAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"addBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removeBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawGasTokens",args:[{type:"uint64",name:"amount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawBridgingFeeInTokens",args:[{type:"uint64",name:"asset"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getBridgingCostInTokens",args:[{type:"byte",name:"destinationChainId"},{type:"uint64",name:"asset"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"hashMessage",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"}],returns:{type:"byte[32]"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"isOtherBridgeTokenSupported",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"token"}],returns:{type:"bool"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getTransactionCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getReceiveTokensCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getSendTransactionStorageCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"swap",args:[{type:"axfer",name:"assetTransferRef",desc:"The token to be swapped."},{type:"uint64",name:"receiveAsset",desc:"The token to receive in exchange for the swapped token."},{type:"address",name:"recipient",desc:"The address to receive the tokens."},{type:"uint64",name:"receiveAmountMin",desc:"The minimum amount of tokens required to receive during the swap."},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],recommendations:{}},{name:"addPool",args:[{type:"uint64",name:"poolId",desc:"The address of the `Pool` contract."},{type:"uint64",name:"asset",desc:"The address of the token in the liquidity pool."}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removePool",args:[{type:"uint64",name:"tokenId"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setStopAuthority",args:[{type:"address",name:"stopAuthority"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setRebalancer",args:[{type:"address",name:"rebalancer"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getGasUsage",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"setGasUsage",args:[{type:"byte",name:"chainId"},{type:"uint64",name:"gasAmount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setGasOracle",args:[{type:"uint64",name:"gasOracle"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getTransactionRelayerCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"transferOwnership",args:[{type:"address",name:"newOwner"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:3,bytes:4},local:{ints:0,bytes:0}},keys:{global:{chainId:{keyType:"AVMString",valueType:"byte",key:"Y2hhaW5JZA=="},messenger:{keyType:"AVMString",valueType:"AVMUint64",key:"bWVzc2VuZ2Vy"},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},rebalancer:{keyType:"AVMString",valueType:"address",key:"cmViYWxhbmNlcg=="},canSwap:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuU3dhcA=="},gasOracle:{keyType:"AVMString",valueType:"AVMUint64",key:"Z2FzT3JhY2xl"},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{},box:{}},maps:{global:{},local:{},box:{processedMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"bQ=="},sentMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"cw=="},otherBridges:{keyType:"byte",valueType:"byte[32]",prefix:"Yg=="},otherBridgeTokens:{keyType:"AVMBytes",valueType:"byte[0]",prefix:"dA=="},pools:{keyType:"uint64",valueType:"uint64",prefix:"cA=="},fromGasOracleScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"ZQ=="},bridgingFeeConversionScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"Zg=="},gasUsage:{keyType:"byte",valueType:"uint64",prefix:"dQ=="}}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[431],errorMessage:"Asset must go to app"},{pc:[877,1323,2099,2412,2424],errorMessage:"Box must have value"},{pc:[1835],errorMessage:"Bridge: amount too low for fee"},{pc:[1842],errorMessage:"Bridge: bridge to the zero address"},{pc:[911],errorMessage:"Bridge: message processed"},{pc:[961],errorMessage:"Bridge: no message"},{pc:[853,2063],errorMessage:"Bridge: not enough fee"},{pc:[843],errorMessage:"Bridge: source not registered"},{pc:[1950],errorMessage:"Bridge: tokens already sent"},{pc:[1915],errorMessage:"Bridge: unknown chain or token"},{pc:[1902],errorMessage:"Bridge: wrong destination chain"},{pc:[953,1256,1308,1995,2146,2289,2395,2469],errorMessage:"Bytes has valid prefix"},{pc:[447],errorMessage:"CloseTo not allowed"},{pc:[137],errorMessage:"OnCompletion must be NoOp"},{pc:[2484],errorMessage:"Only owner"},{pc:[439],errorMessage:"Rekey not allowed"},{pc:[1665],errorMessage:"Router: is not stopAuthority"},{pc:[2311],errorMessage:"Router: no pool"},{pc:[2221],errorMessage:"Router: no receive pool"},{pc:[832,1502,1825],errorMessage:"Router: swap prohibited"},{pc:[1166],errorMessage:"account opted into asset"},{pc:[2006,2319],errorMessage:"application exists"},{pc:[1599],errorMessage:"asset exists"},{pc:[831,858,920,1127,1174,1225,1267,1501,1663,1824,1896,1964,2108,2113,2236,2346,2430,2482],errorMessage:"check GlobalState exists"},{pc:[1956],errorMessage:"index access is out of bounds"},{pc:[958],errorMessage:"invalid number of bytes for arc4.bool"},{pc:[504,642,658,666,711,727,735,791,807,818,1040,1069,1098,1349,1373,1381,1406,1475,1686,1703,1803],errorMessage:"invalid number of bytes for arc4.static_array<arc4.uint8, 32>"},{pc:[520,529,561,674,743,752,779,826,1118,1148,1213,1261,1313,1340,1466,1483,1492,1571,1580,1643,1746,1768,2e3,2151,2294,2400,2474],errorMessage:"invalid number of bytes for arc4.uint64"},{pc:[512,650,719,799,1032,1061,1090,1205,1357,1365,1398,1434,1720,1738,1785],errorMessage:"invalid number of bytes for arc4.uint8"},{pc:[899,2205],errorMessage:"invalid size"},{pc:[634,703,1458],errorMessage:"transaction type is axfer"},{pc:[623,771],errorMessage:"transaction type is pay"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMzIgMTU3MDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAiY2FuU3dhcCIgIm93bmVyIiAiZ2FzT3JhY2xlIiAicmViYWxhbmNlciIgImNoYWluSWQiICJtZXNzZW5nZXIiICJ0IiAicCIgInN0b3BBdXRob3JpdHkiIDB4MDEgMHgwMCAidSIgMHg0MzQxN2FhMyAweGY3NDc1YjgyIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAzZDU0IDB4MDY4MTAxCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGludGNfMSAvLyAwCiAgICBiemVybwogICAgYnl0ZWMgNCAvLyAicmViYWxhbmNlciIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUzCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgaW50Y18wIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAzMwogICAgcHVzaGJ5dGVzcyAweDY1ZjcwNTczIDB4M2UzODAyN2MgMHhhNDYwMGFlZCAweGRlNGNhZDRhIDB4NGViYTA3MjEgMHhjNjE3ZWQ3MyAweDU3NTMxNTYwIDB4NjM4MDgyNzggMHgwNjUwN2M2YSAweGY1Zjk2ZWIzIDB4NGIwNjJjYTAgMHhjM2NkZDkyYSAvLyBtZXRob2QgIm9wdEluQXNzZXQodWludDY0KXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2UocGF5LGF4ZmVyLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0KXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2VXaXRoU3RhYmxlKGF4ZmVyLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZWNlaXZlVG9rZW5zKHBheSx1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSx1aW50NjQpdm9pZCIsIG1ldGhvZCAicmVnaXN0ZXJCcmlkZ2UoYnl0ZSxieXRlWzMyXSl2b2lkIiwgbWV0aG9kICJhZGRCcmlkZ2VUb2tlbihieXRlLGJ5dGVbMzJdKXZvaWQiLCBtZXRob2QgInJlbW92ZUJyaWRnZVRva2VuKGJ5dGUsYnl0ZVszMl0pdm9pZCIsIG1ldGhvZCAid2l0aGRyYXdHYXNUb2tlbnModWludDY0KXZvaWQiLCBtZXRob2QgIndpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vucyh1aW50NjQpdm9pZCIsIG1ldGhvZCAiZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMoYnl0ZSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJoYXNoTWVzc2FnZSh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlLGJ5dGVbMzJdLGJ5dGVbMzJdKWJ5dGVbMzJdIiwgbWV0aG9kICJpc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWQoYnl0ZSxieXRlWzMyXSlib29sIgogICAgYnl0ZWMgMTMgLy8gbWV0aG9kICJnZXRUcmFuc2FjdGlvbkNvc3QoYnl0ZSl1aW50NjQiCiAgICBwdXNoYnl0ZXNzIDB4MDdkZjg0MjkgMHg4MGM1YzcwZiAweDQxMzRkMDY4IDB4ZWYxNWY4NTUgMHg2YjFlZTIyMyAweDE4NzBhNDkyIDB4MzU1NzMyNGQgMHgwNGIxNjFmMSAweGQyYjM1N2ViIC8vIG1ldGhvZCAiZ2V0UmVjZWl2ZVRva2Vuc0Nvc3QoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3QoKXVpbnQ2NCIsIG1ldGhvZCAic3dhcChheGZlcix1aW50NjQsYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImFkZFBvb2wodWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZW1vdmVQb29sKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wU3dhcCgpdm9pZCIsIG1ldGhvZCAic3RhcnRTd2FwKCl2b2lkIiwgbWV0aG9kICJzZXRTdG9wQXV0aG9yaXR5KGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic2V0UmViYWxhbmNlcihhZGRyZXNzKXZvaWQiCiAgICBieXRlYyAxNCAvLyBtZXRob2QgImdldEdhc1VzYWdlKGJ5dGUpdWludDY0IgogICAgcHVzaGJ5dGVzcyAweDBjYTVhZTdhIDB4Mjc0NzBmMDcgMHhjYmZjNmQwMiAweGUxN2JhZmI0IC8vIG1ldGhvZCAic2V0R2FzVXNhZ2UoYnl0ZSx1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0R2FzT3JhY2xlKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGJ5dGUpdWludDY0IiwgbWV0aG9kICJ0cmFuc2Zlck93bmVyc2hpcChhZGRyZXNzKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBvcHRJbkFzc2V0IHN3YXBBbmRCcmlkZ2Ugc3dhcEFuZEJyaWRnZVdpdGhTdGFibGUgcmVjZWl2ZVRva2VucyByZWdpc3RlckJyaWRnZSBhZGRCcmlkZ2VUb2tlbiByZW1vdmVCcmlkZ2VUb2tlbiB3aXRoZHJhd0dhc1Rva2VucyB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnMgZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMgaGFzaE1lc3NhZ2UgaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkIGdldFRyYW5zYWN0aW9uQ29zdCBtYWluX2dldFJlY2VpdmVUb2tlbnNDb3N0X3JvdXRlQDE4IG1haW5fZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3Rfcm91dGVAMTkgc3dhcCBhZGRQb29sIHJlbW92ZVBvb2wgc3RvcFN3YXAgc3RhcnRTd2FwIHNldFN0b3BBdXRob3JpdHkgc2V0UmViYWxhbmNlciBnZXRHYXNVc2FnZSBzZXRHYXNVc2FnZSBzZXRHYXNPcmFjbGUgZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdCB0cmFuc2Zlck93bmVyc2hpcAogICAgZXJyCgptYWluX2dldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRSZWNlaXZlVG9rZW5zQ29zdF9yb3V0ZUAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDE1IC8vIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAzZDU0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY3JlYXRlX05vT3BAMzM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICBwdXNoYnl0ZXMgMHg2NjRjYTQwNCAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYnl0ZSx1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGVBcHBsaWNhdGlvbgogICAgZXJyCgoKLy8gX3B1eWFfbGliLnV0aWwuZW5zdXJlX2J1ZGdldChyZXF1aXJlZF9idWRnZXQ6IHVpbnQ2NCwgZmVlX3NvdXJjZTogdWludDY0KSAtPiB2b2lkOgplbnN1cmVfYnVkZ2V0OgogICAgcHJvdG8gMiAwCiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgICsKCmVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDE6CiAgICBmcmFtZV9kaWcgMAogICAgZ2xvYmFsIE9wY29kZUJ1ZGdldAogICAgPgogICAgYnogZW5zdXJlX2J1ZGdldF9hZnRlcl93aGlsZUA2CiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgYnl0ZWMgMTYgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCiAgICBieXRlYyAxNiAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQogICAgZnJhbWVfZGlnIC0xCiAgICBzd2l0Y2ggZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDMgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1OgogICAgaXR4bl9zdWJtaXQKICAgIGIgZW5zdXJlX2J1ZGdldF93aGlsZV90b3BAMQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQ6CiAgICBnbG9iYWwgTWluVHhuRmVlCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgYiBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDM6CiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclR4bjogdWludDY0KSAtPiB1aW50NjQ6CmFtb3VudEZyb21Bc3NldFRyYW5zZmVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIzCiAgICAvLyBleHBvcnQgZnVuY3Rpb24gYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclR4bjogZ3R4bi5Bc3NldFRyYW5zZmVyVHhuKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI0CiAgICAvLyBhc3NlcnQoYXNzZXRUcmFuc2ZlclR4bi5hc3NldFJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgYEFzc2V0IG11c3QgZ28gdG8gYXBwYCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIEFzc2V0IG11c3QgZ28gdG8gYXBwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjcKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLnJla2V5VG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYFJla2V5IG5vdCBhbGxvd2VkYCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJla2V5VG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBSZWtleSBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI4CiAgICAvLyBhc3NlcnQoYXNzZXRUcmFuc2ZlclR4bi5hc3NldENsb3NlVG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYENsb3NlVG8gbm90IGFsbG93ZWRgKTsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQ2xvc2VUbyBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI5CiAgICAvLyByZXR1cm4gYXNzZXRUcmFuc2ZlclR4bi5hc3NldEFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YW1vdW50RnJvbVBheW1lbnQocGF5bWVudFR4bjogdWludDY0KSAtPiB1aW50NjQ6CmFtb3VudEZyb21QYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjMyCiAgICAvLyBleHBvcnQgZnVuY3Rpb24gYW1vdW50RnJvbVBheW1lbnQocGF5bWVudFR4bjogZ3R4bi5QYXltZW50VHhuKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjMzCiAgICAvLyBpZiAocGF5bWVudFR4bi5yZWNlaXZlciAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgICE9CiAgICBieiBhbW91bnRGcm9tUGF5bWVudF9hZnRlcl9pZl9lbHNlQDIKICAgIGludGNfMSAvLyAwCiAgICByZXRzdWIKCmFtb3VudEZyb21QYXltZW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czozNQogICAgLy8gaWYgKHBheW1lbnRUeG4ucmVrZXlUbyAhPT0gR2xvYmFsLnplcm9BZGRyZXNzKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYnogYW1vdW50RnJvbVBheW1lbnRfYWZ0ZXJfaWZfZWxzZUA0CiAgICBpbnRjXzEgLy8gMAogICAgcmV0c3ViCgphbW91bnRGcm9tUGF5bWVudF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzYKICAgIC8vIGlmIChwYXltZW50VHhuLmNsb3NlUmVtYWluZGVyVG8gIT09IEdsb2JhbC56ZXJvQWRkcmVzcykgcmV0dXJuIDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIENsb3NlUmVtYWluZGVyVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGJ6IGFtb3VudEZyb21QYXltZW50X2FmdGVyX2lmX2Vsc2VANgogICAgaW50Y18xIC8vIDAKICAgIHJldHN1YgoKYW1vdW50RnJvbVBheW1lbnRfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjM4CiAgICAvLyByZXR1cm4gcGF5bWVudFR4bi5hbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFtb3VudAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmNyZWF0ZUFwcGxpY2F0aW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjkKICAgIC8vIHRoaXMub3duZXIudmFsdWUgPSBvd25lcjsKICAgIGRpZyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTQKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NDIKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgOSAvLyAic3RvcEF1dGhvcml0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTcKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3MQogICAgLy8gdGhpcy5jaGFpbklkLnZhbHVlID0gY2hhaW5JZDsKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3MgogICAgLy8gdGhpcy5tZXNzZW5nZXIudmFsdWUgPSBtZXNzZW5nZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIGNoYWluSWQ6IEJ5dGUsIG1lc3NlbmdlcjogQXBwbGljYXRpb24sIGdhc09yYWNsZTogQXBwbGljYXRpb24pOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyBvcHRJbkFzc2V0KGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc5LTg1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc5LTg0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3OS04NQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIGxvZygnQnJpZGdlOiBvcHQtaW4gY29tcGxldGVkJyk7CiAgICBwdXNoYnl0ZXMgIkJyaWRnZTogb3B0LWluIGNvbXBsZXRlZCIKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3NQogICAgLy8gb3B0SW5Bc3NldChhc3NldDogQXNzZXQpOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uuc3dhcEFuZEJyaWRnZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyIC8vIDIKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIHRoaXMuX3N3YXBBbmRCcmlkZ2UoYW1vdW50RnJvbVBheW1lbnQocGF5bWVudFJlZiksIGFzc2V0VHJhbnNmZXJSZWYsIHJlY2lwaWVudCwgZGVzdGluYXRpb25DaGFpbklkLCByZWNlaXZlVG9rZW4sIG5vbmNlLCAwLCBidWRnZXQpOwogICAgdW5jb3ZlciA2CiAgICBjYWxsc3ViIGFtb3VudEZyb21QYXltZW50CiAgICBjb3ZlciA2CiAgICBjb3ZlciA2CiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA3CiAgICBjYWxsc3ViIF9zd2FwQW5kQnJpZGdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLnN3YXBBbmRCcmlkZ2VXaXRoU3RhYmxlW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEFuZEJyaWRnZVdpdGhTdGFibGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAxMDAwIH0gfSB9KQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExMwogICAgLy8gdGhpcy5fc3dhcEFuZEJyaWRnZSgwLCBhc3NldFRyYW5zZmVyUmVmLCByZWNpcGllbnQsIGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuLCBub25jZSwgZmVlVG9rZW5BbW91bnQsIGJ1ZGdldCk7CiAgICBpbnRjXzEgLy8gMAogICAgY292ZXIgNwogICAgY2FsbHN1YiBfc3dhcEFuZEJyaWRnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMTAwMCB9IH0gfSkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVjZWl2ZVRva2Vuc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlY2VpdmVUb2tlbnM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBjb3ZlciA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjQKICAgIC8vIGFzc2VydCh0aGlzLmNhblN3YXAudmFsdWUsICdSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZCcpOwogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTMKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NlcnQgLy8gUm91dGVyOiBzd2FwIHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIG90aGVyQnJpZGdlcyA9IEJveE1hcDxCeXRlLCBTdGF0aWNCeXRlczwzMj4+KHsga2V5UHJlZml4OiAnYicgfSk7CiAgICBwdXNoYnl0ZXMgImIiCiAgICBkaWcgNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNAogICAgLy8gYXNzZXJ0KHRoaXMub3RoZXJCcmlkZ2VzKHNvdXJjZUNoYWluSWQpLmV4aXN0cywgJ0JyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkJyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNgogICAgLy8gY29uc3QgdmFsdWUgPSBhbW91bnRGcm9tUGF5bWVudChwYXltZW50UmVmKTsKICAgIHVuY292ZXIgNwogICAgY2FsbHN1YiBhbW91bnRGcm9tUGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMDcKICAgIC8vIGFzc2VydCh2YWx1ZSA+PSBzdG9yYWdlRmVlLCAnQnJpZGdlOiBub3QgZW5vdWdoIGZlZScpOwogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0OAogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gYXNzZXJ0KHZhbHVlID49IHN0b3JhZ2VGZWUsICdCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlJyk7CiAgICA+PQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbm90IGVub3VnaCBmZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgc291cmNlQ2hhaW5JZCwgdGhpcy5jaGFpbklkLnZhbHVlLCByZWNlaXZlVG9rZW4sIG5vbmNlKTsKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjaGFpbklkID0gR2xvYmFsU3RhdGU8Qnl0ZT4oKTsKICAgIGJ5dGVjIDUgLy8gImNoYWluSWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwOQogICAgLy8gY29uc3QgbWVzc2FnZSA9IHRoaXMuaGFzaE1lc3NhZ2UoYW1vdW50LCByZWNpcGllbnQsIHNvdXJjZUNoYWluSWQsIHRoaXMuY2hhaW5JZC52YWx1ZSwgcmVjZWl2ZVRva2VuLCBub25jZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDgKICAgIGRpZyA4CiAgICB1bmNvdmVyIDgKICAgIHVuY292ZXIgMwogICAgZGlnIDgKICAgIHVuY292ZXIgOAogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjEwCiAgICAvLyBjb25zdCBtZXNzYWdlV2l0aFNlbmRlciA9IGhhc2hXaXRoU2VuZGVyQWRkcmVzcyhtZXNzYWdlLCB0aGlzLm90aGVyQnJpZGdlcyhzb3VyY2VDaGFpbklkKS52YWx1ZS5ieXRlcyk7CiAgICB1bmNvdmVyIDIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IGg6IGJ5dGVzID0gb3Aua2VjY2FrMjU2KG9wLmNvbmNhdChtZXNzYWdlLmJ5dGVzLCBzZW5kZXJBZGRyZXNzKSk7CiAgICBkaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBrZWNjYWsyNTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo1NQogICAgLy8gY29uc3QgZmlyc3QyID0gb3Auc3Vic3RyaW5nKG1lc3NhZ2UuYnl0ZXMsIDAsIDIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjU3CiAgICAvLyBjb25zdCBsYXN0MzAgPSBvcC5zdWJzdHJpbmcoaCwgMiwgMzIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDIgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo2MAogICAgLy8gcmV0dXJuIG5ldyBTdGF0aWNCeXRlczwzMj4ob3AuY29uY2F0KGZpcnN0MiwgbGFzdDMwKSk7CiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgNgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHNpemUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIHByb2Nlc3NlZE1lc3NhZ2VzID0gQm94TWFwPFN0YXRpY0J5dGVzPDMyPiwgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAnbScgfSk7CiAgICBwdXNoYnl0ZXMgIm0iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxMgogICAgLy8gYXNzZXJ0KCF0aGlzLnByb2Nlc3NlZE1lc3NhZ2VzKG1lc3NhZ2VXaXRoU2VuZGVyKS5leGlzdHMsICdCcmlkZ2U6IG1lc3NhZ2UgcHJvY2Vzc2VkJyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbWVzc2FnZSBwcm9jZXNzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnByb2Nlc3NlZE1lc3NhZ2VzKG1lc3NhZ2VXaXRoU2VuZGVyKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNy0yMjEKICAgIC8vIGFzc2VydChhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsCiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxOQogICAgLy8gYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNy0yMjEKICAgIC8vIGFzc2VydChhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsCiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBwdXNoYnl0ZXMgMHgzM2UxNDdhYSAvLyBtZXRob2QgInJlY2VpdmVkTWVzc2FnZXMoYnl0ZVszMl0pYm9vbCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBubyBtZXNzYWdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyMwogICAgLy8gY29uc3QgdG9rZW5JZDogdWludDY0ID0gb3AuZXh0cmFjdFVpbnQ2NChyZWNlaXZlVG9rZW4uYnl0ZXMsIDI0KTsKICAgIHVuY292ZXIgMgogICAgcHVzaGludCAyNCAvLyAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjI1LTIzMAogICAgLy8gY29uc3QgcmVjZWl2ZUFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgQXNzZXQodG9rZW5JZCksCiAgICAvLyAgIHJlY2lwaWVudEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbiwKICAgIC8vICk7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyByZXR1cm4gMTU3MDA7CiAgICBpbnRjIDQgLy8gMTU3MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjMzCiAgICAvLyBjb25zdCBleHRyYUdhczogdWludDY0ID0gdmFsdWUgLSBzdG9yYWdlRmVlOwogICAgLQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIzNAogICAgLy8gaWYgKGV4dHJhR2FzID4gMCkgewogICAgYnogcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjM1LTIzOAogICAgLy8gaXR4bi5wYXltZW50KHsKICAgIC8vICAgYW1vdW50OiBleHRyYUdhcywKICAgIC8vICAgcmVjZWl2ZXI6IHJlY2lwaWVudEFkZHJlc3MuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIGRpZyA0CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDYKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsKICAgIC8vICAgcmVjZWl2ZUFtb3VudCwKICAgIC8vICAgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLAogICAgLy8gICBub25jZSwKICAgIC8vICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciwKICAgIC8vIH0pOwogICAgZGlnIDEKICAgIGl0b2IKICAgIGRpZyA1CiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ0CiAgICAvLyBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDYKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsKICAgIC8vICAgcmVjZWl2ZUFtb3VudCwKICAgIC8vICAgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLAogICAgLy8gICBub25jZSwKICAgIC8vICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciwKICAgIC8vIH0pOwogICAgY29uY2F0CiAgICBkaWcgMwogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg0NTgzNmFkNiAvLyBtZXRob2QgIlRva2Vuc1JlY2VpdmVkKHVpbnQ2NCxhZGRyZXNzLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0pIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTkzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVnaXN0ZXJCcmlkZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpyZWdpc3RlckJyaWRnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1MQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyBvdGhlckJyaWRnZXMgPSBCb3hNYXA8Qnl0ZSwgU3RhdGljQnl0ZXM8MzI+Pih7IGtleVByZWZpeDogJ2InIH0pOwogICAgcHVzaGJ5dGVzICJiIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyB0aGlzLm90aGVyQnJpZGdlcyhjaGFpbklkKS52YWx1ZSA9IGJyaWRnZUFkZHJlc3M7CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmFkZEJyaWRnZVRva2VuW3JvdXRpbmddKCkgLT4gdm9pZDoKYWRkQnJpZGdlVG9rZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNTcKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNjEKICAgIC8vIHJldHVybiBjaGFpbklkLmJ5dGVzLmNvbmNhdCh0b2tlbi5ieXRlcyk7CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIG90aGVyQnJpZGdlVG9rZW5zID0gQm94TWFwPGJ5dGVzLCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICd0JyB9KTsKICAgIGJ5dGVjIDcgLy8gInQiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyB0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGNoYWluSWQsIHRva2VuQWRkcmVzcykpLnZhbHVlID0gbmV3IFN0YXRpY0J5dGVzKCk7CiAgICBwdXNoYnl0ZXMgMHgKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVtb3ZlQnJpZGdlVG9rZW5bcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVCcmlkZ2VUb2tlbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI2MwogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM2MQogICAgLy8gcmV0dXJuIGNoYWluSWQuYnl0ZXMuY29uY2F0KHRva2VuLmJ5dGVzKTsKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NwogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW5BZGRyZXNzKSkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdHYXNUb2tlbnNbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhd0dhc1Rva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY5CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyBpdHhuLnBheW1lbnQoeyBhbW91bnQ6IGFtb3VudCwgcmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMgfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzIgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzAKICAgIC8vIGl0eG4ucGF5bWVudCh7IGFtb3VudDogYW1vdW50LCByZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcyB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50Y18wIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zW3JvdXRpbmddKCkgLT4gdm9pZDoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NgogICAgLy8gY29uc3QgYXBwQWNjdDogQWNjb3VudCA9IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzOwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzcKICAgIC8vIGNvbnN0IGJhbGFuY2UgPSBhc3NldC5iYWxhbmNlKGFwcEFjY3QpOwogICAgc3dhcAogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzgKICAgIC8vIGlmIChiYWxhbmNlID4gVWludDY0KDApKSB7CiAgICBieiB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnNfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3OS0yODQKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHNlbmRlcjogYXBwQWNjdCwKICAgIC8vICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGJhbGFuY2UsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBkaWcgMgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzktMjg0CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICBzZW5kZXI6IGFwcEFjY3QsCiAgICAvLyAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBiYWxhbmNlLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRCcmlkZ2luZ0Nvc3RJblRva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjg4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTMKICAgIC8vIGNvbnN0IGJyaWRnZUdhc0Ftb3VudDogdWludDY0ID0gdGhpcy5nZXRHYXNVc2FnZShkZXN0aW5hdGlvbkNoYWluSWQpOwogICAgZGlnIDEKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0R2FzVXNhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjk0LTI5OAogICAgLy8gY29uc3QgbWVzc2VuZ2VyR2FzQW1vdW50OiB1aW50NjQgPSBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLmdldEdhc1VzYWdlLAogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NgogICAgLy8gYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTYKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NC0yOTgKICAgIC8vIGNvbnN0IG1lc3Nlbmdlckdhc0Ftb3VudDogdWludDY0ID0gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogTWVzc2VuZ2VyLnByb3RvdHlwZS5nZXRHYXNVc2FnZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgYnl0ZWMgMTQgLy8gbWV0aG9kICJnZXRHYXNVc2FnZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMC0zMDQKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNELAogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWQsIGJyaWRnZUdhc0Ftb3VudCArIG1lc3Nlbmdlckdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjkKICAgIC8vIGdhc09yYWNsZSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWNfMyAvLyAiZ2FzT3JhY2xlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIGNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAwLTMwNAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWU7CiAgICBwdXNoYnl0ZXMgMHg3YmY3ZDUwYyAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNEKGJ5dGUsdWludDY0KXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICB1bmNvdmVyIDMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozNgogICAgLy8gcHJvdGVjdGVkIGZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZScgfSk7CiAgICBwdXNoYnl0ZXMgImUiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAwLTMwNAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWU7CiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI4OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlW3JvdXRpbmddKCkgLT4gdm9pZDoKaGFzaE1lc3NhZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkW3JvdXRpbmddKCkgLT4gdm9pZDoKaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMzQKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBvdGhlckJyaWRnZVRva2VucyA9IEJveE1hcDxieXRlcywgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAndCcgfSk7CiAgICBieXRlYyA3IC8vICJ0IgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzNgogICAgLy8gcmV0dXJuIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW4pKS5leGlzdHM7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDExIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5nZXRUcmFuc2FjdGlvbkNvc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRUcmFuc2FjdGlvbkNvc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQxCiAgICAvLyByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGNoYWluSWQpICsgdGhpcy5nZXRTZW5kVHJhbnNhY3Rpb25TdG9yYWdlQ29zdCgpOwogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM1NQogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gcmV0dXJuIHRoaXMuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkKSArIHRoaXMuZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3QoKTsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3dhcFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN3YXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjgxCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6ODkKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18xIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MwogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjQKICAgIC8vIGFzc2VydCh0aGlzLmNhblN3YXAudmFsdWUsICdSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo5MQogICAgLy8gY29uc3Qgc2VuZGVyID0gbmV3IEFkZHJlc3MoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjkyCiAgICAvLyBjb25zdCBhbW91bnQgPSBhbW91bnRGcm9tQXNzZXRUcmFuc2Zlcihhc3NldFRyYW5zZmVyUmVmKTsKICAgIGRpZyA0CiAgICBjYWxsc3ViIGFtb3VudEZyb21Bc3NldFRyYW5zZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjkzCiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgc2VuZGVyLCBhbW91bnQpOwogICAgdW5jb3ZlciA1CiAgICBndHhucyBYZmVyQXNzZXQKICAgIGR1cAogICAgZGlnIDMKICAgIGRpZyAzCiAgICBjYWxsc3ViIHNlbmRBbmRTd2FwVG9WVXNkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjk0CiAgICAvLyBjb25zdCByZWNlaXZlZEFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZChyZWNlaXZlQXNzZXQsIHJlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbik7CiAgICBkaWcgNgogICAgZGlnIDYKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciA2CiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OTUtMTAyCiAgICAvLyBlbWl0PFN3YXBwZWQ+KHsKICAgIC8vICAgc2VuZGVyLAogICAgLy8gICByZWNpcGllbnQsCiAgICAvLyAgIHRva2VuSWQ6IGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkLAogICAgLy8gICByZWNlaXZlVG9rZW5JZDogcmVjZWl2ZUFzc2V0LmlkLAogICAgLy8gICBhbW91bnQsCiAgICAvLyAgIHJlY2VpdmVkQW1vdW50LAogICAgLy8gfSk7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1NDA0NGIzIC8vIG1ldGhvZCAiU3dhcHBlZChhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjgxCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLmFkZFBvb2xbcm91dGluZ10oKSAtPiB2b2lkOgphZGRQb29sOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTQKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTUKICAgIC8vIHRoaXMucG9vbHMoYXNzZXQpLnZhbHVlID0gcG9vbElkOwogICAgZHVwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE1CiAgICAvLyB0aGlzLnBvb2xzKGFzc2V0KS52YWx1ZSA9IHBvb2xJZDsKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTYKICAgIC8vIGNvbnN0IHRva2VuRGVjaW1hbHMgPSBhc3NldC5kZWNpbWFsczsKICAgIHN3YXAKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTcKICAgIC8vIHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgPSAxMCAqKiAoT1JBQ0xFX1BSSUNFX1BSRUNJU0lPTiAtIHRva2VuRGVjaW1hbHMgKyBDSEFJTl9QUkVDSVNJT04pOwogICAgcHVzaGludCA5IC8vIDkKICAgIHN3YXAKICAgIC0KICAgIGR1cAogICAgcHVzaGludCA2IC8vIDYKICAgICsKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozOQogICAgLy8gcHJvdGVjdGVkIGJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IgPSBCb3hNYXA8QXNzZXQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdmJyB9KTsKICAgIHB1c2hieXRlcyAiZiIKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE3CiAgICAvLyB0aGlzLmJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlID0gMTAgKiogKE9SQUNMRV9QUklDRV9QUkVDSVNJT04gLSB0b2tlbkRlY2ltYWxzICsgQ0hBSU5fUFJFQ0lTSU9OKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyk7CiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBzd2FwCiAgICBleHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzYKICAgIC8vIHByb3RlY3RlZCBmcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3RvciA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ2UnIH0pOwogICAgcHVzaGJ5dGVzICJlIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyk7CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnJlbW92ZVBvb2xbcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVQb29sOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjQKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjQKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTIxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3RvcFN3YXBbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wU3dhcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NzEKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdSb3V0ZXI6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo0MgogICAgLy8gcHJpdmF0ZSBzdG9wQXV0aG9yaXR5ID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA5IC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo3MQogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1JvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHknKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTMKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzMwogICAgLy8gdGhpcy5jYW5Td2FwLnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTMwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3RhcnRTd2FwW3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnRTd2FwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDEKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MwogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTQyCiAgICAvLyB0aGlzLmNhblN3YXAudmFsdWUgPSB0cnVlOwogICAgaW50Y18wIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFN0b3BBdXRob3JpdHlbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRTdG9wQXV0aG9yaXR5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDgKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1MAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjQyCiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDkgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1MQogICAgLy8gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlID0gc3RvcEF1dGhvcml0eTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE0OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFJlYmFsYW5jZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSZWJhbGFuY2VyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNTcKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1OQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDQgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2MAogICAgLy8gdGhpcy5yZWJhbGFuY2VyLnZhbHVlID0gcmViYWxhbmNlcjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1NwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0R2FzVXNhZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldEdhc1VzYWdlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2Uuc2V0R2FzVXNhZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI0CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICd1JyB9KTsKICAgIGJ5dGVjIDEyIC8vICJ1IgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjUKICAgIC8vIHRoaXMuZ2FzVXNhZ2UoY2hhaW5JZCkudmFsdWUgPSBnYXNBbW91bnQ7CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjIyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5zZXRHYXNPcmFjbGVbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRHYXNPcmFjbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzEKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjgKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjpPd25hYmxlLnRyYW5zZmVyT3duZXJzaGlwW3JvdXRpbmddKCkgLT4gdm9pZDoKdHJhbnNmZXJPd25lcnNoaXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE4CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5fc3dhcEFuZEJyaWRnZShmZWVGcm9tTmF0aXZlOiB1aW50NjQsIGFzc2V0VHJhbnNmZXJSZWY6IHVpbnQ2NCwgcmVjaXBpZW50OiBieXRlcywgZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgcmVjZWl2ZVRva2VuOiBieXRlcywgbm9uY2U6IGJ5dGVzLCBmZWVUb2tlbkFtb3VudDogdWludDY0LCBidWRnZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKX3N3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExNi0xMjUKICAgIC8vIHByaXZhdGUgX3N3YXBBbmRCcmlkZ2UoCiAgICAvLyAgIGZlZUZyb21OYXRpdmU6IHVpbnQ2NCwKICAgIC8vICAgYXNzZXRUcmFuc2ZlclJlZjogZ3R4bi5Bc3NldFRyYW5zZmVyVHhuLAogICAgLy8gICByZWNpcGllbnQ6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgZGVzdGluYXRpb25DaGFpbklkOiBCeXRlLAogICAgLy8gICByZWNlaXZlVG9rZW46IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgbm9uY2U6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgZmVlVG9rZW5BbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgYnVkZ2V0OiB1aW50NjQsCiAgICAvLyApOiB2b2lkIHsKICAgIHByb3RvIDggMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjYKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUzCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vIFJvdXRlcjogc3dhcCBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEyOAogICAgLy8gY29uc3QgYW1vdW50ID0gYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclJlZik7CiAgICBmcmFtZV9kaWcgLTcKICAgIGNhbGxzdWIgYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGFzc2VydChhbW91bnQgPiBmZWVUb2tlbkFtb3VudCwgJ0JyaWRnZTogYW1vdW50IHRvbyBsb3cgZm9yIGZlZScpOwogICAgZnJhbWVfZGlnIC0yCiAgICA+CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBhbW91bnQgdG9vIGxvdyBmb3IgZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gYXNzZXJ0KCFyZWNpcGllbnQuYnl0ZXMuZXF1YWxzKGJ6ZXJvKDMyKSksICdCcmlkZ2U6IGJyaWRnZSB0byB0aGUgemVybyBhZGRyZXNzJyk7CiAgICBpbnRjXzMgLy8gMzIKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTYKICAgID09CiAgICAhCiAgICBhc3NlcnQgLy8gQnJpZGdlOiBicmlkZ2UgdG8gdGhlIHplcm8gYWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGZlZUZyb21TdGFibGU6IHVpbnQ2NCA9IHRoaXMuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbihhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgZmVlVG9rZW5BbW91bnQpOwogICAgZnJhbWVfZGlnIC03CiAgICBndHhucyBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY1CiAgICAvLyBpZiAoZmVlVG9rZW5BbW91bnQgPT09IDApIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0yCiAgICBibnogX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaWZfZWxzZUAzCiAgICBpbnRjXzEgLy8gMAoKX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzMKICAgIC8vIGNvbnN0IGJyaWRnaW5nRmVlOiB1aW50NjQgPSBmZWVGcm9tTmF0aXZlICsgZmVlRnJvbVN0YWJsZTsKICAgIGZyYW1lX2RpZyAtOAogICAgZGlnIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBlbWl0PEJyaWRnaW5nRmVlRnJvbVRva2Vucz4oeyBmZWVGcm9tTmF0aXZlLCBmZWVGcm9tU3RhYmxlLCBmZWVTdGFibGVUb2tlbkFtb3VudDogZmVlVG9rZW5BbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTgKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MzZiYWZhZGQgLy8gbWV0aG9kICJCcmlkZ2luZ0ZlZUZyb21Ub2tlbnModWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM2CiAgICAvLyBjb25zdCBhbW91bnRBZnRlckZlZTogdWludDY0ID0gYW1vdW50IC0gZmVlVG9rZW5BbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzOAogICAgLy8gY29uc3QgdlVzZEFtb3VudCA9IHRoaXMuc2VuZEFuZFN3YXBUb1ZVc2QoYXNzZXRUcmFuc2ZlclJlZi54ZmVyQXNzZXQsIHNlbmRlciwgYW1vdW50QWZ0ZXJGZWUpOwogICAgZnJhbWVfZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM3CiAgICAvLyBjb25zdCBzZW5kZXIgPSBuZXcgQWRkcmVzcyhUeG4uc2VuZGVyKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM4CiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgc2VuZGVyLCBhbW91bnRBZnRlckZlZSk7CiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgc2VuZEFuZFN3YXBUb1ZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBhc3NlcnQoZGVzdGluYXRpb25DaGFpbklkICE9PSB0aGlzLmNoYWluSWQudmFsdWUsICdCcmlkZ2U6IHdyb25nIGRlc3RpbmF0aW9uIGNoYWluJyk7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIGFzc2VydChkZXN0aW5hdGlvbkNoYWluSWQgIT09IHRoaXMuY2hhaW5JZC52YWx1ZSwgJ0JyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4nKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTUKICAgIGRpZyAxCiAgICAhPQogICAgYXNzZXJ0IC8vIEJyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgZnJhbWVfZGlnIC01CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NwogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTEKICAgIC8vIGFzc2VydCh0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuKSkuZXhpc3RzLCAnQnJpZGdlOiB1bmtub3duIGNoYWluIG9yIHRva2VuJyk7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHVua25vd24gY2hhaW4gb3IgdG9rZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUzCiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgdGhpcy5jaGFpbklkLnZhbHVlLCBkZXN0aW5hdGlvbkNoYWluSWQsIHJlY2VpdmVUb2tlbiwgbm9uY2UpOwogICAgZGlnIDEKICAgIGZyYW1lX2RpZyAtNgogICAgdW5jb3ZlciAyCiAgICBmcmFtZV9kaWcgLTUKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0zCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5oYXNoTWVzc2FnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICBmcmFtZV9kaWcgLTUKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNTUKICAgIC8vIHJldHVybiAxNTcwMDsKICAgIGludGMgNCAvLyAxNTcwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyBzZW50TWVzc2FnZXMgPSBCb3hNYXA8U3RhdGljQnl0ZXM8MzI+LCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICdzJyB9KTsKICAgIHB1c2hieXRlcyAicyIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBhc3NlcnQoIXRoaXMuc2VudE1lc3NhZ2VzKG1lc3NhZ2UpLmV4aXN0cywgJ0JyaWRnZTogdG9rZW5zIGFscmVhZHkgc2VudCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHRva2VucyBhbHJlYWR5IHNlbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyB0aGlzLnNlbnRNZXNzYWdlcyhtZXNzYWdlKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gY29uc3QgZGVzdGluYXRpb25DaGFpbklkID0gbWVzc2FnZS5hdCgxKTsKICAgIGRpZyAxCiAgICBleHRyYWN0IDEgMSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc3LTE4MQogICAgLy8gY29uc3QgbWVzc2FnZUNvc3QgPSBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uQ29zdCwKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBtZXNzZW5nZXIgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjIDYgLy8gIm1lc3NlbmdlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzctMTgxCiAgICAvLyBjb25zdCBtZXNzYWdlQ29zdCA9IGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IE1lc3Nlbmdlci5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25Db3N0LAogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBieXRlYyAxMyAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uQ29zdChieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgZGlnIDEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTg3LTE4OQogICAgLy8gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogTWVzc2VuZ2VyLnByb3RvdHlwZS5zZW5kTWVzc2FnZSwgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLCBhcmdzOiBbcGF5bWVudFBhcmFtcywgbWVzc2FnZV0sCiAgICAvLyB9KTsKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGR1cAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTgzLTE4NgogICAgLy8gY29uc3QgcGF5bWVudFBhcmFtcyA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIGFtb3VudDogbWVzc2FnZUNvc3QsCiAgICAvLyAgIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgLy8gfSk7CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE4Ny0xODkKICAgIC8vIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IE1lc3Nlbmdlci5wcm90b3R5cGUuc2VuZE1lc3NhZ2UsIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwgYXJnczogW3BheW1lbnRQYXJhbXMsIG1lc3NhZ2VdLAogICAgLy8gfSk7CiAgICBpdHhuX25leHQKICAgIHB1c2hieXRlcyAweGQwMmY1N2Y1IC8vIG1ldGhvZCAic2VuZE1lc3NhZ2UocGF5LGJ5dGVbMzJdKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTYKICAgIC8vIGVtaXQ8UmVjZWl2ZUZlZT4oeyBicmlkZ2VUcmFuc2FjdGlvbkNvc3QsIG1lc3NhZ2VUcmFuc2FjdGlvbkNvc3QgfSk7CiAgICBkaWcgMQogICAgaXRvYgogICAgZGlnIDEKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4NGI1NTQxOWIgLy8gbWV0aG9kICJSZWNlaXZlRmVlKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTU3CiAgICAvLyBhc3NlcnQoYnJpZGdpbmdGZWUgPj0gYnJpZGdlVHJhbnNhY3Rpb25Db3N0ICsgbWVzc2FnZVRyYW5zYWN0aW9uQ29zdCwgJ0JyaWRnZTogbm90IGVub3VnaCBmZWUnKTsKICAgICsKICAgIHVuY292ZXIgMgogICAgPD0KICAgIGFzc2VydCAvLyBCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE1OC0xNjUKICAgIC8vIGVtaXQ8VG9rZW5zU2VudD4oewogICAgLy8gICAgIGFtb3VudCwKICAgIC8vICAgICByZWNpcGllbnQsCiAgICAvLyAgICAgZGVzdGluYXRpb25DaGFpbklkLAogICAgLy8gICAgIHJlY2VpdmVUb2tlbiwKICAgIC8vICAgICBub25jZSwKICAgIC8vICAgICBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICAvLyAgIH0sCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTYKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNjQKICAgIC8vIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTU4LTE2NQogICAgLy8gZW1pdDxUb2tlbnNTZW50Pih7CiAgICAvLyAgICAgYW1vdW50LAogICAgLy8gICAgIHJlY2lwaWVudCwKICAgIC8vICAgICBkZXN0aW5hdGlvbkNoYWluSWQsCiAgICAvLyAgICAgcmVjZWl2ZVRva2VuLAogICAgLy8gICAgIG5vbmNlLAogICAgLy8gICAgIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIC8vICAgfSwKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTgtMTY2CiAgICAvLyBlbWl0PFRva2Vuc1NlbnQ+KHsKICAgIC8vICAgICBhbW91bnQsCiAgICAvLyAgICAgcmVjaXBpZW50LAogICAgLy8gICAgIGRlc3RpbmF0aW9uQ2hhaW5JZCwKICAgIC8vICAgICByZWNlaXZlVG9rZW4sCiAgICAvLyAgICAgbm9uY2UsCiAgICAvLyAgICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICB9LAogICAgLy8gKTsKICAgIHB1c2hieXRlcyAweDIyOWZiYWVjIC8vIG1ldGhvZCAiVG9rZW5zU2VudCh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSxieXRlKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCl9zd2FwQW5kQnJpZGdlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY3CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgZnJhbWVfZGlnIDEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzkKICAgIC8vIHByb3RlY3RlZCBicmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZicgfSk7CiAgICBwdXNoYnl0ZXMgImYiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY3CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMgogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNjctMzcxCiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0UHJpY2UsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW3RoaXMuY2hhaW5JZC52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNzAKICAgIC8vIGFyZ3M6IFt0aGlzLmNoYWluSWQudmFsdWVdLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNoYWluSWQgPSBHbG9iYWxTdGF0ZTxCeXRlPigpOwogICAgYnl0ZWMgNSAvLyAiY2hhaW5JZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM2Ny0zNzEKICAgIC8vIGNvbnN0IGZlZTogdWludDY0ID0gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSAqIGZlZVRva2VuQW1vdW50IC8gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRQcmljZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMuZ2FzT3JhY2xlLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgcHVzaGJ5dGVzIDB4MWRiNzBjZGQgLy8gbWV0aG9kICJnZXRQcmljZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBjb25zdCBmZWVGcm9tU3RhYmxlOiB1aW50NjQgPSB0aGlzLl9jb252ZXJ0QnJpZGdpbmdGZWVJblRva2Vuc1RvTmF0aXZlVG9rZW4oYXNzZXRUcmFuc2ZlclJlZi54ZmVyQXNzZXQsIGZlZVRva2VuQW1vdW50KTsKICAgIGIgX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlKGFtb3VudDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCBzb3VyY2VDaGFpbklkOiBieXRlcywgZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgcmVjZWl2ZVRva2VuOiBieXRlcywgbm9uY2U6IGJ5dGVzKSAtPiBieXRlczoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDctMzE1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGhhc2hNZXNzYWdlKAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIHNvdXJjZUNoYWluSWQ6IEJ5dGUsCiAgICAvLyAgIGRlc3RpbmF0aW9uQ2hhaW5JZDogQnl0ZSwKICAgIC8vICAgcmVjZWl2ZVRva2VuOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIG5vbmNlOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyApOiBTdGF0aWNCeXRlczwzMj4gewogICAgcHJvdG8gNiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gY29uc3QgYW1vdW50MzIgPSBiemVybygyNCkuY29uY2F0KG9wLml0b2IoYW1vdW50KSk7CiAgICBwdXNoaW50IDI0IC8vIDI0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC02CiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE3CiAgICAvLyBjb25zdCBzb3VyY2VDaGFpbklkMzIgPSBiemVybygzMSkuY29uY2F0KHNvdXJjZUNoYWluSWQuYnl0ZXMpOwogICAgcHVzaGludCAzMSAvLyAzMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxOC0zMTkKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgc3dhcAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE4LTMyMAogICAgLy8gY29uc3QgcGFja2VkID0gYW1vdW50MzIKICAgIC8vICAgLmNvbmNhdChyZWNpcGllbnQuYnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoc291cmNlQ2hhaW5JZDMyKQogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxOC0zMjEKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgLy8gICAuY29uY2F0KHNvdXJjZUNoYWluSWQzMikKICAgIC8vICAgLmNvbmNhdChyZWNlaXZlVG9rZW4uYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTgtMzIyCiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzIzCiAgICAvLyAuY29uY2F0KEFMTEJSSURHRV9NRVNTRU5HRVIuYnl0ZXMpOwogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTgtMzIzCiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KEFMTEJSSURHRV9NRVNTRU5HRVIuYnl0ZXMpOwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyNQogICAgLy8gY29uc3QgaGFzaCA9IG9wLmtlY2NhazI1NihwYWNrZWQpOyAvLyAzMiBieXRlcwogICAga2VjY2FrMjU2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyOAogICAgLy8gY29uc3Qgd2l0aFNyYyA9IG9wLnNldEJ5dGUoaGFzaCwgMCwgb3AuYnRvaShzb3VyY2VDaGFpbklkLmJ5dGVzKSk7CiAgICBmcmFtZV9kaWcgLTQKICAgIGJ0b2kKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICBzZXRieXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyOQogICAgLy8gY29uc3Qgd2l0aERzdCA9IG9wLnNldEJ5dGUod2l0aFNyYywgMSwgb3AuYnRvaShkZXN0aW5hdGlvbkNoYWluSWQuYnl0ZXMpKTsKICAgIGZyYW1lX2RpZyAtMwogICAgYnRvaQogICAgaW50Y18wIC8vIDEKICAgIHN3YXAKICAgIHNldGJ5dGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzMxCiAgICAvLyByZXR1cm4gbmV3IFN0YXRpY0J5dGVzPDMyPih3aXRoRHN0KTsKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBzaXplCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZChhc3NldDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCB2VXNkQW1vdW50OiB1aW50NjQsIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCkgLT4gdWludDY0OgpyZWNlaXZlQW5kU3dhcEZyb21WVXNkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjMtMTY4CiAgICAvLyBwcm90ZWN0ZWQgcmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgYXNzZXQ6IEFzc2V0LAogICAgLy8gICByZWNpcGllbnQ6IEFkZHJlc3MsCiAgICAvLyAgIHZVc2RBbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbjogdWludDY0LAogICAgLy8gKTogdWludDY0IHsKICAgIHByb3RvIDQgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjkKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKGFzc2V0KS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZnJhbWVfZGlnIC00CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjkKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKGFzc2V0KS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzAKICAgIC8vIGNvbnN0IHBvb2xJZCA9IHRoaXMucG9vbHMoYXNzZXQpLnZhbHVlOwogICAgYm94X2dldAogICAgcG9wCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE3MS0xNzUKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBQb29sLnByb3RvdHlwZS5zd2FwRnJvbVZVc2QsCiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MgogICAgLy8gcHJpdmF0ZSByZWJhbGFuY2VyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oeyBpbml0aWFsVmFsdWU6IG5ldyBBZGRyZXNzKGJ6ZXJvKDApKSB9KTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA0IC8vICJyZWJhbGFuY2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBieXRlYyAxMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTcxLTE3NQogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IFBvb2wucHJvdG90eXBlLnN3YXBGcm9tVlVzZCwKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3JlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbiwgcmVjaXBpZW50ID09PSB0aGlzLnJlYmFsYW5jZXIudmFsdWVdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHgwZDFiNGMwNiAvLyBtZXRob2QgInN3YXBGcm9tVlVzZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsYm9vbCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNlbmRBbmRTd2FwVG9WVXNkKGFzc2V0OiB1aW50NjQsIHVzZXI6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdWludDY0OgpzZW5kQW5kU3dhcFRvVlVzZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTc5CiAgICAvLyBwcm90ZWN0ZWQgc2VuZEFuZFN3YXBUb1ZVc2QoYXNzZXQ6IEFzc2V0LCB1c2VyOiBBZGRyZXNzLCBhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTgwCiAgICAvLyBhc3NlcnQodGhpcy5wb29scyhhc3NldCkuZXhpc3RzLCAnUm91dGVyOiBubyBwb29sJyk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzQKICAgIC8vIHBvb2xzID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncCcgfSk7CiAgICBieXRlYyA4IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4MAogICAgLy8gYXNzZXJ0KHRoaXMucG9vbHMoYXNzZXQpLmV4aXN0cywgJ1JvdXRlcjogbm8gcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHBvb2wKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTgxCiAgICAvLyBjb25zdCBwb29sSWQgPSB0aGlzLnBvb2xzKGFzc2V0KS52YWx1ZTsKICAgIGJveF9nZXQKICAgIHBvcAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4NgogICAgLy8gYXNzZXRSZWNlaXZlcjogQXBwbGljYXRpb24ocG9vbElkKS5hZGRyZXNzLAogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg3CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxOTAtMTk0CiAgICAvLyByZXR1cm4gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogUG9vbC5wcm90b3R5cGUuc3dhcFRvVlVzZCwKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxOTMKICAgIC8vIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDQgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE5MwogICAgLy8gYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBieXRlYyAxMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTkwLTE5NAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IFBvb2wucHJvdG90eXBlLnN3YXBUb1ZVc2QsCiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGQ5NzhhZDE0IC8vIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZShjaGFpbklkOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTctMTgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0R2FzVXNhZ2UoY2hhaW5JZDogQnl0ZSk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICd1JyB9KTsKICAgIGJ5dGVjIDEyIC8vICJ1IgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTkKICAgIC8vIHJldHVybiB0aGlzLmdhc1VzYWdlKGNoYWluSWQpLnZhbHVlOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZDogYnl0ZXMpIC0+IHVpbnQ2NDoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzQtMzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkOiBCeXRlKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxMAogICAgLy8gZ2FzVXNhZ2UgPSBCb3hNYXA8Qnl0ZSwgdWludDY0Pih7IGtleVByZWZpeDogJ3UnIH0pOwogICAgYnl0ZWMgMTIgLy8gInUiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNgogICAgLy8gY29uc3QgZ2FzQW1vdW50ID0gdGhpcy5nYXNVc2FnZShjaGFpbklkKS52YWx1ZTsKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM3LTQxCiAgICAvLyByZXR1cm4gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkdhc0Nvc3RJbk5hdGl2ZVRva2VuLAogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtjaGFpbklkLCBnYXNBbW91bnRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzkKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjQwCiAgICAvLyBhcmdzOiBbY2hhaW5JZCwgZ2FzQW1vdW50XSwKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzctNDEKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluTmF0aXZlVG9rZW4sCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2NoYWluSWQsIGdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGMyYWZjY2QxIC8vIG1ldGhvZCAiZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5OYXRpdmVUb2tlbihieXRlLHVpbnQ2NCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzIgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTMKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLCAnT25seSBvd25lcicpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBvd25lcgogICAgcmV0c3ViCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CyAFAQAIINR6JhEEFR98dQdjYW5Td2FwBW93bmVyCWdhc09yYWNsZQpyZWJhbGFuY2VyB2NoYWluSWQJbWVzc2VuZ2VyAXQBcA1zdG9wQXV0aG9yaXR5AQEBAAF1BENBeqME90dbggwVH3x1AAAAAAAAPVQDBoEBMRhAAAkjrycETGcpImcxGRREMRhBAM2CDARl9wVzBD44AnwEpGAK7QTeTK1KBE66ByEExhftcwRXUxVgBGOAgngEBlB8agT1+W6zBEsGLKAEw83ZKicNggkEB9+EKQSAxccPBEE00GgE7xX4VQRrHuIjBBhwpJIENVcyTQQEsWHxBNKzV+snDoIEBAylrnoEJ0cPBwTL/G0CBOF7r7Q2GgCOGwDZARQBZAGpArACzQLqAwYDJANdA+QEHgRCAAYAAQRXBMsFEwUoBTYFPgVPBWAFcgWQBaEFswAnD7AiQycPsCJDgARmTKQENhoAjgEAiACKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJxCyHicQsh+L/40CAAsABLNC/9syALIBQv/1I7IBQv/viYoBAYv/OBQyChJEi/84IDIDEkSL/zgVMgMSRIv/OBKJigEBi/84BzIKE0EAAiOJi/84IDIDE0EAAiOJi/84CTIDE0EAAiOJi/84CIk2GgFJFSUSRDYaAkkVIhJENhoDSRUkEkQXNhoESRUkEkQXKksEZytMZycJTwNnJwVPAmcnBkxnIkM2GgFJFSQSRBeIB3exMgqyFCOyErIRgQSyECOyAbOAGEJyaWRnZTogb3B0LWluIGNvbXBsZXRlZLAiQzEWgQIJSTgQIhJEMRYiCUk4EIEEEkQ2GgFJFSUSRDYaAkkVIhJENhoDSRUlEkQ2GgRJFSUSRDYaBUkVJBJEF08GiP8cTgZOBiNPB4gEYSJDMRYiCUk4EIEEEkQ2GgFJFSUSRDYaAkkVIhJENhoDSRUlEkQ2GgRJFSUSRDYaBUkVJBJEFzYaBkkVJBJEFyNOB4gEHCJDMRYiCUk4ECISRDYaAUkVJBJEFzYaAklOA0kVJRJENhoDSRUiEkQ2GgRJFSUSRDYaBUlOBkkVJRJENhoGSRUkEkQXIyllRESAAWJLBFBJvUUBRE8HiP50SSEED0QjJwVlREsISwhPCE8DSwhPCIgFA08CvkRLAUxQAkxRAAJMUQIgUElOBkkVJRJEgAFtSwFQSb1FARREgAC/sSMnBmVEgAQz4UeqshqyGLIagQayECOyAbO0PklXBABMVwAEKBJESRUiEkQjU0RPAoEYW08DTwRPBIgEz0whBAlJQQAPsUsEsgdJsggishAjsgGzSwEWSwVQSwRQJwpQSwNQgARFg2rWTFCwIkM2GgFJFSISRDYaAkkVJRJEiAWZgAFiTwJQTL8iQzYaAUkVIhJENhoCSRUlEkSIBXxQJwdMUIAAvyJDNhoBSRUiEkQ2GgJJFSUSRIgFX1AnB0xQvEgiQzYaAUkVJBJEF4gFSrEjKmVEsgeyCCKyECOyAbMiQzYaAUkVJBJEF0mIBSsyCklOAkxwAExJTwJEQQAasSMqZUSyFEmyEksCshFLAbIAgQSyECOyAbMiQzYaAUkVIhJENhoCSRUkEkQXSwGIBJ+xIycGZUQnDrIaSwOyGrIYgQayECOyAbO0PklXBABMVwAEKBJESRUkEkQXsSMrZUROAggWgAR799UMshpPA7IashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF0wWgAFlTFC+RBcKFihMULAiQzYaAUkVJBJEFzYaAkkVJRJENhoDSRUiEkQ2GgRJFSISRDYaBUkVJRJENhoGSRUlEkSIAwQoTFCwIkM2GgFJFSISRDYaAkkVJRJEUCcHTFC9RQEnCyNPAlQoTFCwIkM2GgFJFSISRIgD0SEECBYoTFCwIkMxFiIJSTgQgQQSRDYaAUkVJBJEFzYaAkkVJRJENhoDSRUkEkQXNhoESRUkEkQXI4j7kCMpZUREMQBLBIj7v08FOBFJSwNLA4gDB0sGSwZPAk8GiAKiTwNPBFBPAhZQTwMWUE8CFlBMFlCABBVARLNMULAiQzYaAUkVJBJEFzYaAkkVJBJEF4gDfEkWJwhLAVBPAxa/THEBRIEJTAlJgQYIgQpMlIABZksDUEwWv4EKTJSAAWVPAlBMFr8iQzYaAUkVJBJEF4gDPRYnCExQvEgiQzEAIycJZUQSRCkjZyJDiAMjKSJnIkM2GgFJFSUSRIgDEycJTGciQzYaAUkVJRJEiAMCJwRMZyJDNhoBSRUiEkSIAqcWKExQsCJDNhoBSRUiEkQ2GgJJFSQSRBeIAtYnDE8CUEwWvyJDNhoBSRUkEkQXiALAK0xnIkM2GgFJFSISRIgCchYoTFCwIkM2GgFJFSUSRIgCnipMZyJDiggAi/8jiPpNIyllRESL+Yj6fkmL/g1EJa+L+hIURIv5OBGL/kAA7iOL+EsBCIv4Fk8CFlCL/hZQgAQ2uvrdTFCwiwCL/gmLATEATwKIAZUjJwVlRIv7SwETRIv7i/xQJwdMUL1FAURLAYv6TwKL+4v8i/2IAOKL+4gB3yEECIABc0sCUEm9RQEURIAAv0sBVwEBsSMnBmVEJw2yGkyyGkmyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF0sBcghEsbIHSbIIIrIQI7IBtoAE0C9X9bIaTwOyGkyyGIEGshAjsgGzSwEWSwEWUIAES1VBm0xQsAhPAg5EFov6UIv7UIv8UIv9UCcKUIAEIp+67ExQsImLARaAAWZMUL5EF4v+C7EjK2VEIycFZUSABB23DN2yGrIashiBBrIQI7IBs7Q+SVcEAExXAAQoEkRJFSQSRBcKQv7QigYBgRivi/oWUIEfr4v8UEyL+1BMUIv+UIv/UCcKUAKL/BcjTFaL/RciTFZJFSUSRImKBAGL/BYnCExQSb1FAUS+SBexi/4Wi/8WIycEZUSL/RInCyNPAlSABA0bTAayGov9shpPArIaTLIashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF4mKAwGL/RYnCExQSb1FAUS+SBexSXIIRLIUi/+yEov9shGBBLIQI7IBs7GL/xYjJwRlRIv+EicLI08CVIAE2XitFLIai/6yGkyyGrIashiBBrIQI7IBs7Q+SVcEAExXAAQoEkRJFSQSRBeJigEBJwyL/1C+RBeJigEBJwyL/1C+RBexIytlREwWgATCr8zRshqL/7IashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF4kxACMqZUQSRIk=",clear:"C4EBQw=="},events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]},{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]},{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],templateVariables:{}};var f=class a{static get create(){return{_resolveByMethod(n){switch(n.method){case"createApplication":case"createApplication(address,byte,uint64,uint64)void":return a.create.createApplication(n)}throw new Error("Unknown ' + verb + ' method")},createApplication(n){return{...n,method:"createApplication(address,byte,uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.owner,n.args.chainId,n.args.messenger,n.args.gasOracle]}}}}static optInAsset(n){return{...n,method:"optInAsset(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.asset]}}static swapAndBridge(n){return{...n,method:"swapAndBridge(pay,axfer,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(n.args)?n.args:[n.args.paymentRef,n.args.assetTransferRef,n.args.recipient,n.args.destinationChainId,n.args.receiveToken,n.args.nonce,n.args.budget]}}static swapAndBridgeWithStable(n){return{...n,method:"swapAndBridgeWithStable(axfer,byte[32],byte,byte[32],byte[32],uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetTransferRef,n.args.recipient,n.args.destinationChainId,n.args.receiveToken,n.args.nonce,n.args.feeTokenAmount,n.args.budget]}}static receiveTokens(n){return{...n,method:"receiveTokens(pay,uint64,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(n.args)?n.args:[n.args.paymentRef,n.args.amount,n.args.recipient,n.args.sourceChainId,n.args.receiveToken,n.args.nonce,n.args.receiveAmountMin]}}static registerBridge(n){return{...n,method:"registerBridge(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.bridgeAddress]}}static addBridgeToken(n){return{...n,method:"addBridgeToken(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.tokenAddress]}}static removeBridgeToken(n){return{...n,method:"removeBridgeToken(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.tokenAddress]}}static withdrawGasTokens(n){return{...n,method:"withdrawGasTokens(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.amount]}}static withdrawBridgingFeeInTokens(n){return{...n,method:"withdrawBridgingFeeInTokens(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.asset]}}static getBridgingCostInTokens(n){return{...n,method:"getBridgingCostInTokens(byte,uint64)uint64",args:Array.isArray(n.args)?n.args:[n.args.destinationChainId,n.args.asset]}}static hashMessage(n){return{...n,method:"hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",args:Array.isArray(n.args)?n.args:[n.args.amount,n.args.recipient,n.args.sourceChainId,n.args.destinationChainId,n.args.receiveToken,n.args.nonce]}}static isOtherBridgeTokenSupported(n){return{...n,method:"isOtherBridgeTokenSupported(byte,byte[32])bool",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.token]}}static getTransactionCost(n){return{...n,method:"getTransactionCost(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static getReceiveTokensCost(n){return{...n,method:"getReceiveTokensCost()uint64",args:Array.isArray(n.args)?n.args:[]}}static getSendTransactionStorageCost(n){return{...n,method:"getSendTransactionStorageCost()uint64",args:Array.isArray(n.args)?n.args:[]}}static swap(n){return{...n,method:"swap(axfer,uint64,address,uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetTransferRef,n.args.receiveAsset,n.args.recipient,n.args.receiveAmountMin,n.args.budget]}}static addPool(n){return{...n,method:"addPool(uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.poolId,n.args.asset]}}static removePool(n){return{...n,method:"removePool(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.tokenId]}}static stopSwap(n){return{...n,method:"stopSwap()void",args:Array.isArray(n.args)?n.args:[]}}static startSwap(n){return{...n,method:"startSwap()void",args:Array.isArray(n.args)?n.args:[]}}static setStopAuthority(n){return{...n,method:"setStopAuthority(address)void",args:Array.isArray(n.args)?n.args:[n.args.stopAuthority]}}static setRebalancer(n){return{...n,method:"setRebalancer(address)void",args:Array.isArray(n.args)?n.args:[n.args.rebalancer]}}static getGasUsage(n){return{...n,method:"getGasUsage(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static setGasUsage(n){return{...n,method:"setGasUsage(byte,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.gasAmount]}}static setGasOracle(n){return{...n,method:"setGasOracle(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.gasOracle]}}static getTransactionRelayerCost(n){return{...n,method:"getTransactionRelayerCost(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static transferOwnership(n){return{...n,method:"transferOwnership(address)void",args:Array.isArray(n.args)?n.args:[n.args.newOwner]}}};var ma=class a{appClient;constructor(n){this.appClient=n instanceof Ii.AppClient?n:new Ii.AppClient({...n,appSpec:pa})}decodeReturnValue(n,i){return i!==void 0?(0,Fs.getArc56ReturnValue)(i,this.appClient.getABIMethod(n),pa.structs):void 0}static async fromCreatorAndName(n){return new a(await Ii.AppClient.fromCreatorAndName({...n,appSpec:pa}))}static async fromNetwork(n){return new a(await Ii.AppClient.fromNetwork({...n,appSpec:pa}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:n=>this.appClient.params.bare.clearState(n),optInAsset:n=>this.appClient.params.call(f.optInAsset(n)),swapAndBridge:n=>this.appClient.params.call(f.swapAndBridge(n)),swapAndBridgeWithStable:n=>this.appClient.params.call(f.swapAndBridgeWithStable(n)),receiveTokens:n=>this.appClient.params.call(f.receiveTokens(n)),registerBridge:n=>this.appClient.params.call(f.registerBridge(n)),addBridgeToken:n=>this.appClient.params.call(f.addBridgeToken(n)),removeBridgeToken:n=>this.appClient.params.call(f.removeBridgeToken(n)),withdrawGasTokens:n=>this.appClient.params.call(f.withdrawGasTokens(n)),withdrawBridgingFeeInTokens:n=>this.appClient.params.call(f.withdrawBridgingFeeInTokens(n)),getBridgingCostInTokens:n=>this.appClient.params.call(f.getBridgingCostInTokens(n)),hashMessage:n=>this.appClient.params.call(f.hashMessage(n)),isOtherBridgeTokenSupported:n=>this.appClient.params.call(f.isOtherBridgeTokenSupported(n)),getTransactionCost:n=>this.appClient.params.call(f.getTransactionCost(n)),getReceiveTokensCost:(n={args:[]})=>this.appClient.params.call(f.getReceiveTokensCost(n)),getSendTransactionStorageCost:(n={args:[]})=>this.appClient.params.call(f.getSendTransactionStorageCost(n)),swap:n=>this.appClient.params.call(f.swap(n)),addPool:n=>this.appClient.params.call(f.addPool(n)),removePool:n=>this.appClient.params.call(f.removePool(n)),stopSwap:(n={args:[]})=>this.appClient.params.call(f.stopSwap(n)),startSwap:(n={args:[]})=>this.appClient.params.call(f.startSwap(n)),setStopAuthority:n=>this.appClient.params.call(f.setStopAuthority(n)),setRebalancer:n=>this.appClient.params.call(f.setRebalancer(n)),getGasUsage:n=>this.appClient.params.call(f.getGasUsage(n)),setGasUsage:n=>this.appClient.params.call(f.setGasUsage(n)),setGasOracle:n=>this.appClient.params.call(f.setGasOracle(n)),getTransactionRelayerCost:n=>this.appClient.params.call(f.getTransactionRelayerCost(n)),transferOwnership:n=>this.appClient.params.call(f.transferOwnership(n))};createTransaction={clearState:n=>this.appClient.createTransaction.bare.clearState(n),optInAsset:n=>this.appClient.createTransaction.call(f.optInAsset(n)),swapAndBridge:n=>this.appClient.createTransaction.call(f.swapAndBridge(n)),swapAndBridgeWithStable:n=>this.appClient.createTransaction.call(f.swapAndBridgeWithStable(n)),receiveTokens:n=>this.appClient.createTransaction.call(f.receiveTokens(n)),registerBridge:n=>this.appClient.createTransaction.call(f.registerBridge(n)),addBridgeToken:n=>this.appClient.createTransaction.call(f.addBridgeToken(n)),removeBridgeToken:n=>this.appClient.createTransaction.call(f.removeBridgeToken(n)),withdrawGasTokens:n=>this.appClient.createTransaction.call(f.withdrawGasTokens(n)),withdrawBridgingFeeInTokens:n=>this.appClient.createTransaction.call(f.withdrawBridgingFeeInTokens(n)),getBridgingCostInTokens:n=>this.appClient.createTransaction.call(f.getBridgingCostInTokens(n)),hashMessage:n=>this.appClient.createTransaction.call(f.hashMessage(n)),isOtherBridgeTokenSupported:n=>this.appClient.createTransaction.call(f.isOtherBridgeTokenSupported(n)),getTransactionCost:n=>this.appClient.createTransaction.call(f.getTransactionCost(n)),getReceiveTokensCost:(n={args:[]})=>this.appClient.createTransaction.call(f.getReceiveTokensCost(n)),getSendTransactionStorageCost:(n={args:[]})=>this.appClient.createTransaction.call(f.getSendTransactionStorageCost(n)),swap:n=>this.appClient.createTransaction.call(f.swap(n)),addPool:n=>this.appClient.createTransaction.call(f.addPool(n)),removePool:n=>this.appClient.createTransaction.call(f.removePool(n)),stopSwap:(n={args:[]})=>this.appClient.createTransaction.call(f.stopSwap(n)),startSwap:(n={args:[]})=>this.appClient.createTransaction.call(f.startSwap(n)),setStopAuthority:n=>this.appClient.createTransaction.call(f.setStopAuthority(n)),setRebalancer:n=>this.appClient.createTransaction.call(f.setRebalancer(n)),getGasUsage:n=>this.appClient.createTransaction.call(f.getGasUsage(n)),setGasUsage:n=>this.appClient.createTransaction.call(f.setGasUsage(n)),setGasOracle:n=>this.appClient.createTransaction.call(f.setGasOracle(n)),getTransactionRelayerCost:n=>this.appClient.createTransaction.call(f.getTransactionRelayerCost(n)),transferOwnership:n=>this.appClient.createTransaction.call(f.transferOwnership(n))};send={clearState:n=>this.appClient.send.bare.clearState(n),optInAsset:async n=>{let i=await this.appClient.send.call(f.optInAsset(n));return{...i,return:i.return}},swapAndBridge:async n=>{let i=await this.appClient.send.call(f.swapAndBridge(n));return{...i,return:i.return}},swapAndBridgeWithStable:async n=>{let i=await this.appClient.send.call(f.swapAndBridgeWithStable(n));return{...i,return:i.return}},receiveTokens:async n=>{let i=await this.appClient.send.call(f.receiveTokens(n));return{...i,return:i.return}},registerBridge:async n=>{let i=await this.appClient.send.call(f.registerBridge(n));return{...i,return:i.return}},addBridgeToken:async n=>{let i=await this.appClient.send.call(f.addBridgeToken(n));return{...i,return:i.return}},removeBridgeToken:async n=>{let i=await this.appClient.send.call(f.removeBridgeToken(n));return{...i,return:i.return}},withdrawGasTokens:async n=>{let i=await this.appClient.send.call(f.withdrawGasTokens(n));return{...i,return:i.return}},withdrawBridgingFeeInTokens:async n=>{let i=await this.appClient.send.call(f.withdrawBridgingFeeInTokens(n));return{...i,return:i.return}},getBridgingCostInTokens:async n=>{let i=await this.appClient.send.call(f.getBridgingCostInTokens(n));return{...i,return:i.return}},hashMessage:async n=>{let i=await this.appClient.send.call(f.hashMessage(n));return{...i,return:i.return}},isOtherBridgeTokenSupported:async n=>{let i=await this.appClient.send.call(f.isOtherBridgeTokenSupported(n));return{...i,return:i.return}},getTransactionCost:async n=>{let i=await this.appClient.send.call(f.getTransactionCost(n));return{...i,return:i.return}},getReceiveTokensCost:async(n={args:[]})=>{let i=await this.appClient.send.call(f.getReceiveTokensCost(n));return{...i,return:i.return}},getSendTransactionStorageCost:async(n={args:[]})=>{let i=await this.appClient.send.call(f.getSendTransactionStorageCost(n));return{...i,return:i.return}},swap:async n=>{let i=await this.appClient.send.call(f.swap(n));return{...i,return:i.return}},addPool:async n=>{let i=await this.appClient.send.call(f.addPool(n));return{...i,return:i.return}},removePool:async n=>{let i=await this.appClient.send.call(f.removePool(n));return{...i,return:i.return}},stopSwap:async(n={args:[]})=>{let i=await this.appClient.send.call(f.stopSwap(n));return{...i,return:i.return}},startSwap:async(n={args:[]})=>{let i=await this.appClient.send.call(f.startSwap(n));return{...i,return:i.return}},setStopAuthority:async n=>{let i=await this.appClient.send.call(f.setStopAuthority(n));return{...i,return:i.return}},setRebalancer:async n=>{let i=await this.appClient.send.call(f.setRebalancer(n));return{...i,return:i.return}},getGasUsage:async n=>{let i=await this.appClient.send.call(f.getGasUsage(n));return{...i,return:i.return}},setGasUsage:async n=>{let i=await this.appClient.send.call(f.setGasUsage(n));return{...i,return:i.return}},setGasOracle:async n=>{let i=await this.appClient.send.call(f.setGasOracle(n));return{...i,return:i.return}},getTransactionRelayerCost:async n=>{let i=await this.appClient.send.call(f.getTransactionRelayerCost(n));return{...i,return:i.return}},transferOwnership:async n=>{let i=await this.appClient.send.call(f.transferOwnership(n));return{...i,return:i.return}}};clone(n){return new a(this.appClient.clone(n))}async getBridgingCostInTokens(n){return(await this.appClient.send.call(f.getBridgingCostInTokens(n))).return}async hashMessage(n){return(await this.appClient.send.call(f.hashMessage(n))).return}async isOtherBridgeTokenSupported(n){return(await this.appClient.send.call(f.isOtherBridgeTokenSupported(n))).return}async getTransactionCost(n){return(await this.appClient.send.call(f.getTransactionCost(n))).return}async getReceiveTokensCost(n={args:[]}){return(await this.appClient.send.call(f.getReceiveTokensCost(n))).return}async getSendTransactionStorageCost(n={args:[]}){return(await this.appClient.send.call(f.getSendTransactionStorageCost(n))).return}async getGasUsage(n){return(await this.appClient.send.call(f.getGasUsage(n))).return}async getTransactionRelayerCost(n){return(await this.appClient.send.call(f.getTransactionRelayerCost(n))).return}state={global:{getAll:async()=>{let n=await this.appClient.state.global.getAll();return{chainId:n.chainId,messenger:n.messenger,stopAuthority:n.stopAuthority,rebalancer:n.rebalancer,canSwap:n.canSwap,gasOracle:n.gasOracle,owner:n.owner}},chainId:async()=>await this.appClient.state.global.getValue("chainId"),messenger:async()=>await this.appClient.state.global.getValue("messenger"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),rebalancer:async()=>await this.appClient.state.global.getValue("rebalancer"),canSwap:async()=>await this.appClient.state.global.getValue("canSwap"),gasOracle:async()=>await this.appClient.state.global.getValue("gasOracle"),owner:async()=>await this.appClient.state.global.getValue("owner")},box:{getAll:async()=>{let n=await this.appClient.state.box.getAll();return{}},processedMessages:{getMap:async()=>await this.appClient.state.box.getMap("processedMessages"),value:async n=>await this.appClient.state.box.getMapValue("processedMessages",n)},sentMessages:{getMap:async()=>await this.appClient.state.box.getMap("sentMessages"),value:async n=>await this.appClient.state.box.getMapValue("sentMessages",n)},otherBridges:{getMap:async()=>await this.appClient.state.box.getMap("otherBridges"),value:async n=>await this.appClient.state.box.getMapValue("otherBridges",n)},otherBridgeTokens:{getMap:async()=>await this.appClient.state.box.getMap("otherBridgeTokens"),value:async n=>await this.appClient.state.box.getMapValue("otherBridgeTokens",n)},pools:{getMap:async()=>await this.appClient.state.box.getMap("pools"),value:async n=>await this.appClient.state.box.getMapValue("pools",n)},fromGasOracleScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("fromGasOracleScalingFactor"),value:async n=>await this.appClient.state.box.getMapValue("fromGasOracleScalingFactor",n)},bridgingFeeConversionScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("bridgingFeeConversionScalingFactor"),value:async n=>await this.appClient.state.box.getMapValue("bridgingFeeConversionScalingFactor",n)},gasUsage:{getMap:async()=>await this.appClient.state.box.getMap("gasUsage"),value:async n=>await this.appClient.state.box.getMapValue("gasUsage",n)}}};newGroup(){let n=this,i=this.algorand.newGroup(),r=Promise.resolve(),o=[];return{optInAsset(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.optInAsset(s))),o.push(void 0),this},swapAndBridge(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.swapAndBridge(s))),o.push(void 0),this},swapAndBridgeWithStable(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.swapAndBridgeWithStable(s))),o.push(void 0),this},receiveTokens(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.receiveTokens(s))),o.push(void 0),this},registerBridge(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.registerBridge(s))),o.push(void 0),this},addBridgeToken(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.addBridgeToken(s))),o.push(void 0),this},removeBridgeToken(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.removeBridgeToken(s))),o.push(void 0),this},withdrawGasTokens(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.withdrawGasTokens(s))),o.push(void 0),this},withdrawBridgingFeeInTokens(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.withdrawBridgingFeeInTokens(s))),o.push(void 0),this},getBridgingCostInTokens(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.getBridgingCostInTokens(s))),o.push(d=>n.decodeReturnValue("getBridgingCostInTokens(byte,uint64)uint64",d)),this},hashMessage(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.hashMessage(s))),o.push(d=>n.decodeReturnValue("hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",d)),this},isOtherBridgeTokenSupported(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.isOtherBridgeTokenSupported(s))),o.push(d=>n.decodeReturnValue("isOtherBridgeTokenSupported(byte,byte[32])bool",d)),this},getTransactionCost(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.getTransactionCost(s))),o.push(d=>n.decodeReturnValue("getTransactionCost(byte)uint64",d)),this},getReceiveTokensCost(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.getReceiveTokensCost(s))),o.push(d=>n.decodeReturnValue("getReceiveTokensCost()uint64",d)),this},getSendTransactionStorageCost(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.getSendTransactionStorageCost(s))),o.push(d=>n.decodeReturnValue("getSendTransactionStorageCost()uint64",d)),this},swap(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.swap(s))),o.push(void 0),this},addPool(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.addPool(s))),o.push(void 0),this},removePool(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.removePool(s))),o.push(void 0),this},stopSwap(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.stopSwap(s))),o.push(void 0),this},startSwap(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.startSwap(s))),o.push(void 0),this},setStopAuthority(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setStopAuthority(s))),o.push(void 0),this},setRebalancer(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setRebalancer(s))),o.push(void 0),this},getGasUsage(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.getGasUsage(s))),o.push(d=>n.decodeReturnValue("getGasUsage(byte)uint64",d)),this},setGasUsage(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setGasUsage(s))),o.push(void 0),this},setGasOracle(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setGasOracle(s))),o.push(void 0),this},getTransactionRelayerCost(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.getTransactionRelayerCost(s))),o.push(d=>n.decodeReturnValue("getTransactionRelayerCost(byte)uint64",d)),this},transferOwnership(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.transferOwnership(s))),o.push(void 0),this},clearState(s){return r=r.then(()=>i.addAppCall(n.params.clearState(s))),this},addTransaction(s,d){return r=r.then(()=>i.addTransaction(s,d)),this},async composer(){return await r,i},async simulate(s){await r;let d=await(s?i.simulate(s):i.simulate());return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}},async send(s){await r;let d=await i.send(s);return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}}}}};var Ns=require("@algorandfoundation/algokit-utils/types/app-arc56"),hi=require("@algorandfoundation/algokit-utils/types/app-client"),bg=require("@algorandfoundation/algokit-utils/types/app-factory"),ba={name:"PaddingUtil",structs:{},methods:[{name:"createApplication",args:[],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:0,bytes:0},local:{ints:0,bytes:0}},keys:{global:{},local:{},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:["NoOp"]},sourceInfo:{approval:{sourceInfo:[{pc:[27],errorMessage:"OnCompletion must be NoOp && can only call when creating"},{pc:[37],errorMessage:"OnCompletion must be NoOp && can only call when not creating"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3BhZGRpbmctdXRpbC5jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBQYWRkaW5nVXRpbCBleHRlbmRzIENvbnRyYWN0IGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9wYWRkaW5nQDUKICAgIHB1c2hieXRlcyAweGI4NDQ3YjM2IC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2NyZWF0ZUFwcGxpY2F0aW9uX3JvdXRlQDMKICAgIGVycgoKbWFpbl9jcmVhdGVBcHBsaWNhdGlvbl9yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wYWRkaW5nLXV0aWwuY29udHJhY3QuYWxnby50czo2CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbigpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX3BhZGRpbmdANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcGFkZGluZy11dGlsLmNvbnRyYWN0LmFsZ28udHM6OQogICAgLy8gQGJhcmVtZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CzEbQQAZgAS4RHs2NhoAjgEAAQAxGRQxGBQQRIEBQzEZFDEYEESBAUM=",clear:"C4EBQw=="},events:[],templateVariables:{}};var ya=class a{appClient;constructor(n){this.appClient=n instanceof hi.AppClient?n:new hi.AppClient({...n,appSpec:ba})}decodeReturnValue(n,i){return i!==void 0?(0,Ns.getArc56ReturnValue)(i,this.appClient.getABIMethod(n),ba.structs):void 0}static async fromCreatorAndName(n){return new a(await hi.AppClient.fromCreatorAndName({...n,appSpec:ba}))}static async fromNetwork(n){return new a(await hi.AppClient.fromNetwork({...n,appSpec:ba}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:n=>this.appClient.params.bare.clearState(n),bare:n=>this.appClient.params.bare.call(n)};createTransaction={clearState:n=>this.appClient.createTransaction.bare.clearState(n),bare:n=>this.appClient.createTransaction.bare.call(n)};send={clearState:n=>this.appClient.send.bare.clearState(n),bare:n=>this.appClient.send.bare.call(n)};clone(n){return new a(this.appClient.clone(n))}state={};newGroup(){let n=this,i=this.algorand.newGroup(),r=Promise.resolve(),o=[];return{bare(s){return r=r.then(()=>i.addAppCall(n.params.bare(s))),this},clearState(s){return r=r.then(()=>i.addAppCall(n.params.clearState(s))),this},addTransaction(s,d){return r=r.then(()=>i.addTransaction(s,d)),this},async composer(){return await r,i},async simulate(s){await r;let d=await(s?i.simulate(s):i.simulate());return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}},async send(s){await r;let d=await i.send(s);return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}}}}};var ws=require("@algorandfoundation/algokit-utils"),Xn=ce(require("algosdk"));function $t(a){return(a*1e3).microAlgos()}async function Jr(a,n,i){let r=new Xn.AtomicTransactionComposer,o=(0,Xn.makeBasicAccountTransactionSigner)({addr:n,sk:new Uint8Array(64)});a.forEach(c=>{r.addTransaction({txn:c,signer:o})});let d=(await(0,ws.populateAppCallResources)(r,i)).buildGroup().map(c=>c.txn);return qt(...d)}function qt(...a){return a.map(i=>Xn.default.encodeUnsignedTransaction(i)).map(i=>Buffer.from(i).toString("hex"))}async function Ca(a,n,i){typeof a=="string"&&(a=BigInt(a));let o=(await i.account.getInformation(n)).assets;return o?o.find(({assetId:d})=>d===a)!==void 0:!1}async function Ia(a,n,i){typeof a=="string"&&(a=BigInt(a));let o=(await i.account.getInformation(n)).appsLocalState;return o?o.find(({id:d})=>d===a)!==void 0:!1}var ve=class{};var Ls=require("@solana/web3.js"),fi=require("@stacks/transactions"),js=require("@stellar/stellar-sdk"),va=ce(require("algosdk")),be=require("big.js"),Or=ce(require("randombytes")),xr=require("tronweb"),ks=require("web3");var N=require("big.js"),ha=ce(require("bn.js"));function zr(a,n){return(0,N.Big)(100).minus((0,N.Big)(100).times(n).div(a)).toNumber()}function pn(a,n){return Xe(a,n,3).round(0,N.Big.roundDown)}function Ve(a,n){return Xe(a,3,n)}function Xe(a,n,i){let r=(0,N.Big)(i).minus(n).toNumber();return(0,N.Big)(a).times(vi(r))}function vi(a){return(0,N.Big)(10).pow(a)}function X(a,n){return(0,N.Big)(a).times(vi(n))}function M(a,n){let i=(0,N.Big)(a);return i.eq(0)?(0,N.Big)(0):(0,N.Big)(i).div(vi(n))}function me(a){return M((0,N.Big)(a.tokenBalance).minus(a.vUsdBalance).toFixed(),3).div(2).toFixed()}function Tt(a,{feeShare:n,decimals:i},r){let o=(0,N.Big)(a);if(o.lte(0))return"0";let s=o.times(n),d=o.minus(s),c=pn(d,i),g=(0,N.Big)(r.tokenBalance).plus(c),A=Ft(g,r.aValue,r.dValue);return(0,N.Big)(r.vUsdBalance).minus(A).round(0,N.Big.roundDown).toFixed()}function Ri(a,{feeShare:n,decimals:i},r){let o=(0,N.Big)(a);if(o.lte(0))return(0,N.Big)(0).toFixed();let s=o.plus(r.vUsdBalance),d=Ft(s,r.aValue,r.dValue),c=Ve((0,N.Big)(r.tokenBalance).minus(d),i),g=(0,N.Big)(c).times(n);return(0,N.Big)(c).minus(g).round(0,N.Big.roundDown).toFixed()}function Gs(a,n){let i=(0,N.Big)(a);if(i.lte(0))return n;let r=i.plus(n.vUsdBalance),o=Ft(r,n.aValue,n.dValue);return{aValue:n.aValue,dValue:n.dValue,tokenBalance:o.toFixed(0),vUsdBalance:r.toFixed(0)}}function Zs(a,{feeShare:n,decimals:i},r){if((0,N.Big)(a).lte(0))return(0,N.Big)(0);let o=(0,N.Big)(r.vUsdBalance).minus(a);if(o.lte(0))throw new Wt;let s=Ft(o,r.aValue,r.dValue),d=(0,N.Big)(s).minus(r.tokenBalance),c=Ve(d,i),g=(0,N.Big)(n).div((0,N.Big)(1).minus(n)),A=(0,N.Big)(c).times(g).round(0,N.Big.roundUp);return(0,N.Big)(c).plus(A).round(0,N.Big.roundDown)}function Ss(a,{feeShare:n,decimals:i},r){if((0,N.Big)(a).lte(0))return(0,N.Big)(0);let o=(0,N.Big)(n).div((0,N.Big)(1).minus(n)),s=(0,N.Big)(a).times(o).round(0,N.Big.roundUp),d=(0,N.Big)(a).plus(s),c=pn(d,i),g=(0,N.Big)(r.tokenBalance).minus(c);if(g.lte(0))throw new Wt;let A=Ft(g,r.aValue,r.dValue);return(0,N.Big)(A).minus(r.vUsdBalance).round(0,N.Big.roundDown)}function Ft(a,n,i){let r=(0,N.Big)(4).times(n).times((0,N.Big)(i).minus(a)).minus(i),o=(0,N.Big)(i).pow(3),s=r.pow(2),d=(0,N.Big)(a).times((0,N.Big)(a).times(s).plus((0,N.Big)(4).times(n).times(o))).sqrt().round(0,N.Big.roundDown),c=(0,N.Big)(8).times(n).times(a),g=r.times(a).plus(d).div(c).round(0,N.Big.roundDown);return g.eq(0)?(0,N.Big)(0):g.plus(1)}function Vs(a,n,i,r){let o=new ha.default(a),s=new ha.default(i),d=new ha.default(n);return o.mul(s).shrn(r).sub(d).toString()}function Xs(a){return(0,N.Big)(a).gt(0)?`${Number((0,N.Big)(a).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function Ms(a,n,i){let r=(0,N.Big)(n).times(i),o=(0,N.Big)(n).plus(i),s=(0,N.Big)(8).times(a).times(r).times(o),d=r.times((0,N.Big)(16).times(a).minus(4)).div(3),c=s.times(s),g=d.times(d).times(d),A=c.plus(g),l=(0,N.Big)(A).sqrt(),u=(0,N.Big)(Math.cbrt(+s.plus(l).toFixed())),y=(0,N.Big)(Math.cbrt(+s.minus(l).toFixed()));return u.plus(y).toFixed()}function Mt(a,n,i){let r;switch(n){case"EVM":{r=Ps(a);break}case"SOLANA":{r=new Ls.PublicKey(a).toBuffer();break}case"TRX":{r=Ig(a);break}case"SRB":{r=new js.Address(a).toBuffer();break}case"SUI":{r=Ps(a);break}case"ALG":{r=yg(a);break}case"STX":{r=Cg(a);break}}switch(i){case"EVM":return"0x"+r.toString("hex");case"SOLANA":return Array.from(r);case"TRX":return r;case"SRB":return r.toJSON().data;case"SUI":return"0x"+r.toString("hex");case"ALG":return r;case"STX":return r}}function ct(a){return a.replace(/^0x/i,"")}function Ur(a){return Buffer.from(a.replace(/^0x/i,""),"hex")}function Ps(a){let i=Ur(a);return Buffer.concat([Buffer.alloc(32-i.length,0),i],32)}function yg(a){if(va.default.isValidAddress(a))return Buffer.from(va.Address.fromString(a).publicKey);if(/^\d+$/.test(a)){let n=BigInt(a).toString(16);return n=n.padStart(64,"0"),Buffer.from(n,"hex")}throw new h(`Unexpected Alg address: ${a}`)}function Cg(a){if(a.includes(".")){let[i,r]=(0,fi.parseContractId)(a);if(!i||!r)throw new h(`Unexpected Alg address: ${a}`);let o=Buffer.from((0,fi.createAddress)(i).hash160,"hex"),s=ks.Web3.utils.keccak256(Buffer.concat([o,Buffer.from(r)]));return Ur(s)}let n=Buffer.from((0,fi.createAddress)(a).hash160,"hex");return Hs(n,32)}function Ig(a){let n=Yi(a),i=Ur(n);return Hs(i,32)}function Yi(a){let n=xr.utils.crypto.decodeBase58Address(a);return n?xr.utils.bytes.byteArray2hexStr(n).replace(/^41/,"0x"):""}function Hs(a,n){if(a.length>=n)return a;let i=Buffer.alloc(n,0);return a.copy(i,n-a.length),i}function en(){return(0,Or.default)(32)}function Nt(){let a=(0,Or.default)(32).readBigInt64BE();return a<0?a*-1n:a}function ke(a,n){let i={},r=n.sourceToken;switch(i.amount=X(n.amount,r.decimals).toFixed(),i.contractAddress=r.bridgeAddress,i.fromAccountAddress=n.fromAccountAddress,a){case"SUI":{if(!r.originTokenAddress)throw new h("SUI sourceToken must contain 'originTokenAddress'");i.fromTokenAddress=r.originTokenAddress;break}case"ALG":{i.fromTokenAddress=r.tokenAddress;break}default:i.fromTokenAddress=Mt(r.tokenAddress,a,a)}switch(i.toAccountAddress=n.toAccountAddress,a){case"SUI":{if(!n.destinationToken.originTokenAddress)throw new h("SUI destinationToken must contain 'originTokenAddress'");i.toTokenAddress=n.destinationToken.originTokenAddress;break}case"ALG":{i.toTokenAddress=n.destinationToken.tokenAddress;break}default:i.toTokenAddress=Mt(n.destinationToken.tokenAddress,a,a)}return i.minimumReceiveAmount=n.minimumReceiveAmount?X(n.minimumReceiveAmount,n.destinationToken.decimals).toFixed():"0",i}async function Me(a,n,i){let r={};r.fromChainId=n.sourceToken.allbridgeChainId,r.fromChainSymbol=n.sourceToken.chainSymbol;let o=k.getChainProperty(n.destinationToken.chainSymbol).chainType;if(a==="SUI"){if(!n.sourceToken.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");r.fromTokenAddress=n.sourceToken.originTokenAddress}else r.fromTokenAddress=n.sourceToken.tokenAddress;if(r.toChainId=n.destinationToken.allbridgeChainId,r.toTokenAddress=n.destinationToken.tokenAddress,r.gasFeePaymentMethod=n.gasFeePaymentMethod??"native",r.gasFeePaymentMethod==="abr"&&!n.sourceToken.abrPayer)throw new h("Source token must contain 'abrPayer' for ARB0 payment method");let s=n.sourceToken;switch(n.messenger){case 3:if(!s.cctpAddress||!n.destinationToken.cctpAddress)throw new We("Such route does not support CCTP protocol");r.contractAddress=s.cctpAddress;break;case 4:if(!s.cctpV2Address||!n.destinationToken.cctpV2Address)throw new We("Such route does not support CCTP V2 protocol");r.contractAddress=s.cctpV2Address;break;case 5:if(!s.oftBridgeAddress||!n.destinationToken.oftBridgeAddress||s.oftId!==n.destinationToken.oftId)throw new Te("Such route does not support OFT protocol");r.contractAddress=s.oftBridgeAddress;break;case 1:case 2:r.contractAddress=s.bridgeAddress;break}r.messenger=n.messenger,r.fromAccountAddress=n.fromAccountAddress,r.amount=X(n.amount,s.decimals).toFixed();let{fee:d,feeFormat:c}=n;if(!d){let u=(await Kr(n.sourceToken,r.toChainId,r.messenger,i))[r.gasFeePaymentMethod];if(!u)throw new Zn;d=u.int,c="int"}if(c=="float")switch(r.gasFeePaymentMethod){case"native":r.fee=X(d,k.getChainDecimalsByType(s.chainType)).toFixed(0);break;case"stablecoin":r.fee=X(d,s.decimals).toFixed(0);break;case"abr":if(!s.abrPayer)throw new h("Source token must contain 'abrPayer' for ARB0 payment method");r.fee=X(d,s.abrPayer.abrToken.decimals).toFixed(0);break;default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}else r.fee=d;let{extraGas:g,extraGasFormat:A}=n;if(g&&+g>0){let l=await Qr(s,n.destinationToken,r.messenger,i),u,y;switch(r.gasFeePaymentMethod){case"native":u=k.getChainDecimalsByType(s.chainType),y=(0,be.Big)(l.exchangeRate);break;case"stablecoin":u=s.decimals,y=(0,be.Big)(l.exchangeRate).div(l.sourceNativeTokenPrice);break;case"abr":if(!s.abrPayer)throw new h("Source token must contain 'abrPayer' for ARB0 payment method");if(!l.abrExchangeRate)throw new h("Cannot transfer WITH_ARB option");u=s.abrPayer.abrToken.decimals,y=(0,be.Big)(l.exchangeRate).div(l.abrExchangeRate);break;default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}switch(A??"int"){case"float":{r.extraGas=X(g,u).toFixed(0);let C=y.mul(g);r.extraGasDest=X(C,k.getChainDecimalsByType(n.destinationToken.chainType)).toFixed(0,be.Big.roundDown);break}case"int":{r.extraGas=g;let C=M(r.extraGas,k.getChainDecimalsByType(s.chainType)),Y=y.mul(C);r.extraGasDest=X(Y,k.getChainDecimalsByType(n.destinationToken.chainType)).toFixed(0,be.Big.roundDown);break}}vg(r.extraGas,r.gasFeePaymentMethod,l)}switch(["SUI","ALG"].includes(a)||(r.fromTokenAddress=Mt(r.fromTokenAddress,a,a)),r.toAccountAddress=Mt(n.toAccountAddress,o,a),r.toTokenAddress=Mt(r.toTokenAddress,o,a),r.gasFeePaymentMethod){case"native":break;case"stablecoin":hg(r.amount,s.decimals,r.fee,r.extraGas);break;case"abr":{let{abrExchangeRate:l}=await i.getReceiveTransactionCost({sourceChainId:r.fromChainId,destinationChainId:r.toChainId,messenger:r.messenger,sourceToken:n.sourceToken.tokenAddress});r.abrExchangeRate=l;break}default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}return r}function hg(a,n,i,r){let o=(0,be.Big)(a).minus(i).minus(r??0);if(o.lte(0))throw new ln(`Amount not enough to pay fee, ${M((0,be.Big)(o).minus(1).neg(),n).toFixed()} stables is missing`)}async function Kr(a,n,i,r){let o=await r.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:n,messenger:i,sourceToken:a.tokenAddress}),s={native:{int:o.fee,float:M(o.fee,k.getChainDecimalsByType(a.chainType)).toFixed()},adminFeeShareWithExtras:o.adminFeeShareWithExtras};if(o.sourceNativeTokenPrice){let d=Xe(new be.Big(o.fee).mul(o.sourceNativeTokenPrice),k.getChainDecimalsByType(a.chainType),a.decimals).toFixed(0,be.Big.roundUp);s.stablecoin={int:d,float:M(d,a.decimals).toFixed()}}if(o.abrExchangeRate&&a.abrPayer){let d=Xe(new be.Big(o.fee).mul(o.abrExchangeRate),k.getChainDecimalsByType(a.chainType),a.abrPayer.abrToken.decimals).toFixed(0,be.Big.roundUp);s.abr={int:d,float:M(d,a.abrPayer.abrToken.decimals).toFixed()}}return s}function vg(a,n,i){let r=i.extraGasMax[n];if(!r)throw new Zn(`Impossible to pay extra gas by '${n}' payment method`);let o=r.int;if((0,be.Big)(a).gt(o))throw new pi(`Extra gas ${a} in int format, exceeded limit ${o} for '${n}' payment method`)}async function Qr(a,n,i,r){let o={},s=await r.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:n.allbridgeChainId,messenger:i,sourceToken:a.tokenAddress}),d=n.txCostAmount.maxAmount,c=M(d,k.getChainDecimalsByType(n.chainType)).toFixed(),g=(0,be.Big)(c).div(s.exchangeRate).toFixed(k.getChainDecimalsByType(a.chainType),be.Big.roundDown),A=X(g,k.getChainDecimalsByType(a.chainType)).toFixed(0);if(o.native={int:A,float:g},s.sourceNativeTokenPrice){let l=(0,be.Big)(g).mul(s.sourceNativeTokenPrice).toFixed(a.decimals,be.Big.roundDown);o.stablecoin={int:X(l,a.decimals).toFixed(0),float:l}}if(s.abrExchangeRate&&a.abrPayer){let l=(0,be.Big)(g).mul(s.abrExchangeRate).toFixed(a.abrPayer.abrToken.decimals,be.Big.roundDown);o.abr={int:X(l,a.abrPayer.abrToken.decimals).toFixed(0),float:l}}return{extraGasMax:o,destinationChain:{gasAmountMax:{int:d,float:c},swap:{int:n.txCostAmount.swap,float:M(n.txCostAmount.swap,k.getChainDecimalsByType(n.chainType)).toFixed()},transfer:{int:n.txCostAmount.transfer,float:M(n.txCostAmount.transfer,k.getChainDecimalsByType(n.chainType)).toFixed()}},exchangeRate:s.exchangeRate,abrExchangeRate:s.abrExchangeRate,sourceNativeTokenPrice:s.sourceNativeTokenPrice}}function Js(a){return a.sourceToken.chainSymbol!==a.destinationToken.chainSymbol}var Wi=class extends ve{constructor(i,r){super();this.algorand=i;this.api=r;i.setDefaultSigner(Mn.default.makeBasicAccountTransactionSigner(Mn.default.mnemonicToSecretKey("tunnel gym elevator pulse motor evolve release orange culture make sister approve winter chair armor grocery distance festival tiger holiday dish wisdom region absorb secret")))}chainType="ALG";send(i){throw new H}async buildRawTransactionSend(i){let r=await Me(this.chainType,i,this.api);if(!i.sourceToken.bridgeId)throw new h("ALG sourceToken must contain 'bridgeId'");if(!i.sourceToken.paddingUtilId)throw new h("ALG sourceToken must contain 'paddingUtilId'");let o=BigInt(i.sourceToken.bridgeId),s=this.getBridge(o),d=BigInt(i.sourceToken.paddingUtilId),c=this.getPaddingUtil(d),g=Mn.Address.fromString(i.fromAccountAddress),A=BigInt(i.sourceToken.tokenAddress),l=r.toChainId,u=r.toAccountAddress,y=r.toTokenAddress,C=en(),Y=BigInt(r.amount),W=BigInt(r.fee);r.extraGas&&(W=W+BigInt(r.extraGas));let F=this.algorand.newGroup(),w=await this.algorand.createTransaction.assetTransfer({amount:Y,assetId:A,receiver:s.appAddress,sender:g});switch(r.gasFeePaymentMethod){case"native":{let V=await this.algorand.createTransaction.payment({amount:zs.AlgoAmount.MicroAlgo(W),receiver:s.appAddress,sender:g});F.addAppCallMethodCall(await s.params.swapAndBridge({args:{paymentRef:V,assetTransferRef:w,recipient:u,destinationChainId:l,receiveToken:y,nonce:C},sender:g,extraFee:$t(8)}));break}case"stablecoin":{F.addAppCallMethodCall(await s.params.swapAndBridgeWithStable({args:{assetTransferRef:w,recipient:u,destinationChainId:l,receiveToken:y,nonce:C,feeTokenAmount:W},sender:g,extraFee:$t(9)}));let V=await this.algorand.createTransaction.appCall({appId:c.appId,sender:g,note:"padding_1"});F.addTransaction(V);break}case"abr":throw new h("ALG bridge does not support ARB0 payment method");default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}let R=await this.algorand.createTransaction.appCall({appId:c.appId,sender:g,note:"padding"});F.addTransaction(R);let{transactions:G}=await F.buildTransactions();return Jr(G,g,this.algorand.client.algod)}async buildRawTransactionSwap(i){let r=ke(this.chainType,i),o=Mn.Address.fromString(i.fromAccountAddress),s=i.toAccountAddress,d=BigInt(i.sourceToken.tokenAddress),c=BigInt(i.destinationToken.tokenAddress),g=BigInt(r.minimumReceiveAmount),A=BigInt(r.amount);if(!i.sourceToken.bridgeId)throw new h("ALG sourceToken must contain 'bridgeId'");if(!i.sourceToken.paddingUtilId)throw new h("ALG sourceToken must contain 'paddingUtilId'");let l=BigInt(i.sourceToken.bridgeId),u=this.getBridge(l),y=BigInt(i.sourceToken.paddingUtilId),C=this.getPaddingUtil(y),Y=this.algorand.newGroup();i.fromAccountAddress===s&&(await Ca(c,s,this.algorand)||Y.addAssetOptIn({sender:o,assetId:c}));let W=this.algorand.createTransaction.assetTransfer({assetId:d,amount:A,sender:o,receiver:u.appAddress});Y.addAppCallMethodCall(await u.params.swap({args:{assetTransferRef:W,recipient:s,receiveAsset:c,receiveAmountMin:g},sender:o,extraFee:$t(4)}));let F=await this.algorand.createTransaction.appCall({appId:C.appId,sender:o});Y.addTransaction(F);let{transactions:w}=await Y.buildTransactions();return Jr(w,o,this.algorand.client.algod)}getBridge(i){return this.algorand.client.getTypedAppClientById(ma,{appId:i})}getPaddingUtil(i){return this.algorand.client.getTypedAppClientById(ya,{appId:i})}};var qr=require("big.js");var Rg={abi:[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},xs=Rg;var fg={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Os=fg;var Yg={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"uint16",name:"optionType",type:"uint16"}],name:"InvalidOptionType",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"address",name:"tokenAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFeeWithExtraGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"extraGasDestinationToken",type:"uint256"}],name:"OftTokensSent",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"addToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"feeShare",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"},{internalType:"uint256",name:"extraGasInDestinationToken",type:"uint256"},{internalType:"uint256",name:"slippageBP",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"},{internalType:"uint128",name:"extraGasAmount_",type:"uint128"}],name:"extraGasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getEidByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"oftAddress",outputs:[{internalType:"address",name:"oftAddress",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"eid_",type:"uint32"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"}],name:"relayerFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"removeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"setLzGasLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"maxExtraGas_",type:"uint256"}],name:"setMaxExtraGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token_",type:"address"}],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount_",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Us=Yg;var Bg={abi:[{inputs:[{internalType:"address",name:"_abrTokenAddress",type:"address"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"abrToken",outputs:[{internalType:"contract IERC20Metadata",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_tokenAddress",type:"address"},{internalType:"address",name:"_bridge",type:"address"}],name:"approveBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"exchangeRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_amount",type:"uint256"}],name:"nativeTokensToAbr",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_id",type:"uint256"},{internalType:"address",name:"_target",type:"address"},{internalType:"string",name:"_signature",type:"string"}],name:"registerTarget",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_newExchangeRate",type:"uint256"}],name:"setExchangeRate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"id",type:"uint256"}],name:"targets",outputs:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes4",name:"selector",type:"bytes4"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_token",type:"address"},{internalType:"uint256",name:"_amount",type:"uint256"},{internalType:"uint256",name:"_abrAmount",type:"uint256"},{internalType:"uint256",name:"_targetId",type:"uint256"},{internalType:"bytes",name:"_params",type:"bytes"}],name:"transferTokensAndCallTarget",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"withdrawTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Ks=Bg;var fa=ce(require("@project-serum/anchor")),$r=require("@solana/web3.js");var Fe=ce(require("@project-serum/anchor")),Ne=require("@solana/web3.js");async function At(a,n){return Fe.utils.token.associatedAddress({mint:n,owner:a})}async function tn(a){let[n]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("config")],a);return n}async function Qs(a,n){let[i]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("lock"),Uint8Array.from(a)],n);return i}async function Ti(a,n){let[i]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([a])],n);return i}async function Pn(a){let n=await tn(a),[i]=await Ne.PublicKey.findProgramAddress([n.toBuffer()],a);return i}async function Ds(a,n){let[i]=await Ne.PublicKey.findProgramAddress([a.toBuffer()],n);return i}async function Ln(a,n){let[i]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("token"),a.toBytes()],n);return i}async function Es(a,n,i){let[r]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([a]),n],i);return r}async function Dr(a,n){let[i]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([a])],n);return i}async function Er(a,n){let[i]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([a])],n);return i}async function _s(a,n){let[i]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("sent_message"),a],n);return i}async function _r(a,n,i){let[r]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("user_deposit"),n.toBytes(),a.toBytes()],i);return r}async function $s(a,n){let[i]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("cctp_bridge"),a.toBytes()],n);return i}async function qs(a,n){let[i]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("token"),a.toBytes()],n);return i}function ed(a,n){let[i]=Ne.PublicKey.findProgramAddressSync([Fe.utils.bytes.utf8.encode("lock"),n.toBuffer()],a);return i}function td(a,n,i,r){let o=mn("message_transmitter",i),s=mn("token_messenger",r),d=mn("__event_authority",r),c=mn("token_minter",r),g=mn("local_token",r,[n]),A=mn("remote_token_messenger",r,[a.toString()]),l=mn("sender_authority",r);return{messageTransmitterAccount:o,tokenMessenger:s,tokenMessengerEventAuthority:d,tokenMinter:c,localToken:g,remoteTokenMessengerKey:A,authorityPda:l}}function mn(a,n,i=[]){let r=[Buffer.from(Fe.utils.bytes.utf8.encode(a))];for(let s of i)typeof s=="string"?r.push(Buffer.from(Fe.utils.bytes.utf8.encode(s))):Array.isArray(s)||Buffer.isBuffer(s)?r.push(Buffer.from(Uint8Array.from(s))):r.push(Buffer.from(Uint8Array.from(s.toBuffer())));return Ne.PublicKey.findProgramAddressSync(r,n)[0]}var nd=require("@project-serum/anchor"),Ra=require("@solana/web3.js");function nn(a,n){let i=new Ra.Connection(a,"confirmed"),r=new Ra.PublicKey(n);return new nd.AnchorProvider(i,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}async function Ya(a,n,i,r){let o,s=new $r.PublicKey(n),d=new $r.PublicKey(i),c=await At(s,d),g=nn(r,n);fa.setProvider(g);let A=await fa.Spl.token(g).account.token.fetchNullable(c);if(A?.authority.equals(s))o=Mt(c.toBase58(),"SOLANA",a);else{let l=await g.connection.getTokenAccountsByOwner(s,{mint:d});if(l.value.length===0&&!A)o=Mt(c.toBase58(),"SOLANA",a);else if(l.value.length>0){let u=l.value[0];if(!u?.pubkey)throw new h("First token account or its public key is undefined");o=Mt(u.pubkey.toBase58(),"SOLANA",a)}else throw new h("Associated account has wrong owner")}return o}var Fi=class extends ve{constructor(i,r,o){super();this.web3=i;this.api=r;this.nodeRpcUrlsConfig=o}chainType="EVM";async send(i){let r=await this.buildRawTransactionSend(i);return this.sendRawTransaction(r)}async buildRawTransactionSwap(i){let r=ke(this.chainType,i);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(i){let{amount:r,contractAddress:o,fromAccountAddress:s,fromTokenAddress:d,toAccountAddress:c,toTokenAddress:g,minimumReceiveAmount:A}=i,u=this.getBridgeContract(o).methods.swap(r,d,g,c,A);return Promise.resolve({from:s,to:o,data:u.encodeABI()})}async buildRawTransactionSend(i){let r=await Me(this.chainType,i,this.api),{amount:o,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:g,toAccountAddress:A,toTokenAddress:l,messenger:u,fee:y,gasFeePaymentMethod:C,extraGas:Y,extraGasDest:W,abrExchangeRate:F}=r,w="0x"+en().toString("hex"),R,G,V=y;Y&&(V=(0,qr.Big)(V).plus(Y).toFixed()),console.log("@@ raw fee",y),console.log("@@ raw extraGas",Y),console.log("@@ raw totalFee",V);let x;if(C==="abr"){if(!F)throw new h("Cannot find 'abrExchangeRate' for ARB0 payment method");if(!i.sourceToken.abrPayer)throw new h("Source token must contain 'abrPayer' for ARB0 payment method");x=V;let Z=(0,qr.Big)(V).div(F);V=Xe(Z,i.sourceToken.abrPayer.abrToken.decimals,k.getChainDecimalsByType(i.sourceToken.chainType)).toFixed(),console.log("@@ WITH_ARB totalAbr",x),console.log("@@ WITH_ARB totalFee",V)}switch(u){case 3:case 4:{let Z=await this.buildRawTransactionCctpSend(i,r,V);R=Z.sendMethod,G=Z.value;break}case 5:{let Z=this.buildRawTransactionOftSend(i,r,V,W);R=Z.sendMethod,G=Z.value;break}case 1:case 2:{let Z=this.getBridgeContract(s);switch(C){case"abr":case"native":{R=Z.methods.swapAndBridge(c,o,A,g,l,w,u,0),G=V;break}case"stablecoin":{R=Z.methods.swapAndBridge(c,o,A,g,l,w,u,V),G="0";break}default:return se(C,"Unhandled FeePaymentMethod")}}break}if(C==="abr"){if(!i.sourceToken.abrPayer)throw new h("Source token must contain 'abrPayer' for ARB0 payment method");let Z=i.sourceToken.abrPayer.payerAddress;if(!x)throw new h("Failed to calculate totalFeeInAbr");let Ie=this.getAbrPayerContract(Z),Ue="0x"+R.encodeABI().slice(10);return R=Ie.methods.transferTokensAndCallTarget(i.sourceToken.tokenAddress,o,x,u,Ue),Promise.resolve({from:d,to:Z,value:"0",data:R.encodeABI()})}return Promise.resolve({from:d,to:s,value:G,data:R.encodeABI()})}async buildRawTransactionCctpSend(i,r,o){let{amount:s,contractAddress:d,toChainId:c,toAccountAddress:g,gasFeePaymentMethod:A}=r,l=this.getCctpBridgeContract(d),u,y;if(i.destinationToken.chainType==="SOLANA"){let C=await Ya(this.chainType,i.toAccountAddress,i.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));switch(A){case"abr":case"native":{u=l.methods.bridgeWithWalletAddress(s,C,g,c,0),y=o;break}case"stablecoin":{u=l.methods.bridgeWithWalletAddress(s,C,g,c,o),y="0";break}default:return se(A,"Unhandled FeePaymentMethod")}}else switch(A){case"abr":case"native":{u=l.methods.bridge(s,g,c,0),y=o;break}case"stablecoin":{u=l.methods.bridge(s,g,c,o),y="0";break}default:return se(A,"Unhandled FeePaymentMethod")}return{sendMethod:u,value:y}}buildRawTransactionOftSend(i,r,o,s){let{amount:d,contractAddress:c,toChainId:g,toAccountAddress:A,gasFeePaymentMethod:l}=r,u=this.getOftBridgeContract(c),y,C;switch(l){case"abr":case"native":{y=u.methods.bridge(i.sourceToken.tokenAddress,d,A,g,0,s??"0","10"),C=o;break}case"stablecoin":{y=u.methods.bridge(i.sourceToken.tokenAddress,d,A,g,o,s??"0","10"),C="0";break}default:return se(l,"Unhandled FeePaymentMethod")}return{sendMethod:y,value:C}}async sendRawTransaction(i){let r=await this.web3.eth.estimateGas(i),o={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:s}=await this.web3.eth.sendTransaction({...i,gas:r,...o});return{txId:s.toString()}}getBridgeContract(i){return new this.web3.eth.Contract(xs.abi,i)}getCctpBridgeContract(i){return new this.web3.eth.Contract(Os.abi,i)}getOftBridgeContract(i){return new this.web3.eth.Contract(Us.abi,i)}getAbrPayerContract(i){return new this.web3.eth.Contract(Ks.abi,i)}};var Ba=class{constructor(n,i,r,o){this.api=n;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=o}async approve(n,i){let r,o;i?(r=n,o=i):o=n;let s=Ni(o.token,o.messenger,o.gasFeePaymentMethod);return this.tokenService.buildRawTransactionApprove({...o,spender:s},r)}async send(n,i){return Q(n.amount),O("amount",n.amount,n.sourceToken.decimals),Js(n)?Wa(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionSend(n):Wa(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionSwap(n)}};var ge=require("@project-serum/anchor"),ee=require("@solana/web3.js"),tt=require("big.js");var wi={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"PoolInfo overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"}]};var id={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};var ad=require("@project-serum/anchor"),rd=ce(require("big.js")),Gi=require("web3");async function jn(a,n){return await ad.Spl.token(n).account.token.fetch(a)}async function od(a,n,i){let r=await n.account.pool.fetch(i),o=r.decimals,s=(0,rd.default)(r.feeShareBp.toString()).div(1e4).toFixed(),d={aValue:r.a.toString(),dValue:r.d.toString(),totalLpAmount:r.totalLpAmount.toString(),tokenBalance:r.tokenBalance.toString(),vUsdBalance:r.vUsdBalance.toString(),accRewardPerShareP:r.accRewardPerShareP.toString()};return Tt(a,{decimals:o,feeShare:s},d)}function sd(a){let n=a.amount,i="0x"+a.recipient.toString("hex"),r=a.sourceChainId,o=a.destinationChainId,s="0x"+a.receiveToken.toString("hex"),d="0x"+a.nonce.toString("hex"),c=1,g="0x"+a.chainBridge.toString("hex"),A=Gi.Web3.utils.encodePacked({t:"uint256",v:n},{t:"bytes32",v:i},{t:"uint256",v:r},{t:"bytes32",v:s},{t:"uint256",v:d},{t:"uint8",v:c});if(!A)throw new h("message cannot be undefined");let l=Gi.Web3.utils.keccak256(Buffer.from(A.replace("0x",""),"hex")),u=Buffer.from(l.replace("0x",""),"hex");u[0]=r,u[1]=o;let y=Gi.Web3.utils.encodePacked({t:"bytes32",v:"0x"+u.toString("hex")},{t:"bytes32",v:g});if(!y)throw new un("messageWithSigner cannot be undefined");let C=Gi.Web3.utils.keccak256(Buffer.from(y.replace("0x",""),"hex")),Y=Buffer.from(C.replace("0x",""),"hex");return Y[0]=u[0],Y[1]=u[1],Y}var De=require("@solana/web3.js"),dd=require("big.js");var eo=require("@solana/web3.js");async function bn(a,n){return await Promise.all(a.message.addressTableLookups.map(async i=>new eo.AddressLookupTableAccount({key:i.accountKey,state:eo.AddressLookupTableAccount.deserialize(await n.getAccountInfo(i.accountKey).then(r=>{if(!r)throw new h("Cannot get AccountInfo");return r.data}))})))}var Ta="AUTO";async function kn(a,n,i){let r=new De.Connection(i,"confirmed"),o=(await r.simulateTransaction(a)).value.unitsConsumed;await gd(a.instructions,o,n,r)}async function cd(a,n,i){let r=new De.Connection(i,"confirmed"),o=await bn(a,r),s=De.TransactionMessage.decompile(a.message,{addressLookupTableAccounts:o});if(a.serialize().length>1232)throw new Ci;await gd(s.instructions,769230,n,r),a.message=s.compileToV0Message(o)}async function gd(a,n,i,r){if(n>0){let o=Wg(n,a);if(i?.solana){let s=i.solana;if(s===Ta)await to(a,r);else if("pricePerUnitInMicroLamports"in s)await to(a,r,s.pricePerUnitInMicroLamports);else{let d=(0,dd.Big)(s.extraFeeInLamports).div(o).mul(vi(6)).toFixed(0);await to(a,r,d)}}}}function Wg(a,n){let i=n.findIndex(s=>s.programId.equals(De.ComputeBudgetProgram.programId)&&De.ComputeBudgetInstruction.decodeInstructionType(s)==="SetComputeUnitLimit"),r=Number((a*1.3).toFixed(0)),o=De.ComputeBudgetProgram.setComputeUnitLimit({units:r});return i>=0?n[i]=o:n.push(o),r.toString()}async function to(a,n,i){let r=a.findIndex(d=>d.programId.equals(De.ComputeBudgetProgram.programId)&&De.ComputeBudgetInstruction.decodeInstructionType(d)==="SetComputeUnitPrice"),o=BigInt(i||await Tg(n)),s=De.ComputeBudgetProgram.setComputeUnitPrice({microLamports:o});return r>=0?a[r]=s:a.push(s),o.toString()}async function Tg(a){let n=await a.getRecentPrioritizationFees(),i=0;for(let r of n)i+=r.prioritizationFee;return(i/n.length).toFixed(0)}var Ad=require("@solana/spl-token"),yn=require("@solana/web3.js"),Hn=ce(require("axios"));var Fa=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(n,i){this.connection=new yn.Connection(n),this.jupiterUrl=i.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=i.jupiterApiKeyHeader,this.maxAccounts=i.jupiterMaxAccounts}async getJupiterSwapTx(n,i,r,o){let s;try{let u=o?"ExactOut":"ExactIn",y=`${this.jupiterUrl}/quote?inputMint=${i}&outputMint=${Ad.NATIVE_MINT.toString()}&amount=${r}&swapMode=${u}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(y+=`&maxAccounts=${this.maxAccounts}`),s=await Hn.default.get(y,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(u){throw u instanceof Hn.AxiosError&&u.response&&u.response.data&&u.response.data.error?new he(u.response.data.error):new he("Cannot get route")}let d;if(o&&s?.data?.inAmount)d=s.data.inAmount;else if(o)throw new he("Cannot get inAmount");let c;try{c=await Hn.default.post(`${this.jupiterUrl}/swap`,{quoteResponse:s.data,userPublicKey:n,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(u){throw u instanceof Hn.AxiosError&&u.response&&u.response.data&&u.response.data.error?new he(u.response.data.error):new he("Cannot get swap transaction")}let g;if(c?.data?.swapTransaction)g=c.data.swapTransaction;else throw new he("Cannot get swap transaction");let A=Buffer.from(g,"base64"),l=yn.VersionedTransaction.deserialize(A);return o?{tx:l,amountIn:d}:{tx:l}}async amendJupiterWithSdkTx(n,i){try{let r=await bn(n,this.connection),o=await bn(i,this.connection),s=yn.TransactionMessage.decompile(n.message,{addressLookupTableAccounts:r}),d=yn.TransactionMessage.decompile(i.message,{addressLookupTableAccounts:o});if(d.instructions.shift(),s.instructions.push(...d.instructions),r.push(...o),n.message=s.compileToV0Message(r),i.message.header.numRequiredSignatures===2&&n.signatures.length===1){let c=i.signatures[0];if(!c)throw new h("Signature is undefined");n.signatures.push(c)}return n}catch(r){throw r instanceof Error&&r.message?new he(`Some error occurred during creation final swap and bridge transaction. ${r.message}`):new he("Some error occurred during creation final swap and bridge transaction")}}};var no=1e6,ld=1.1,Na=class extends ve{constructor(i,r,o){super();this.solanaRpcUrl=i;this.params=r;this.api=o;this.jupiterService=new Fa(i,r.jupiterParams)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(i){let r=ke(this.chainType,i);return await this.buildSwapTransaction(r,i.sourceToken.poolAddress,i.destinationToken.poolAddress,i.txFeeParams)}async buildSwapTransaction(i,r,o,s){let{fromAccountAddress:d,amount:c,contractAddress:g,fromTokenAddress:A,toTokenAddress:l,toAccountAddress:u,minimumReceiveAmount:y}=i,C=d,Y=g,W=A,F=l,w=o,R=u,G=new ee.PublicKey(C),V=nn(this.solanaRpcUrl,G.toString()),x=new ge.Program(wi,Y,V),Z=await Pn(x.programId),Ie=await tn(x.programId),de=new ee.PublicKey(W),Ue=await Ln(de,x.programId),qe=new ee.PublicKey(r),Xt=await At(G,de),rt=new ee.PublicKey(R),Le=new ee.PublicKey(F),et=await Ln(Le,x.programId),ot=new ee.PublicKey(w),Ke=await At(rt,Le),Yt=[ge.web3.ComputeBudgetProgram.setComputeUnitLimit({units:no})];try{await jn(Ke,V)}catch{let ig=await ge.Spl.associatedToken(V).methods.create().accounts({mint:Le,owner:rt,associatedAccount:Ke}).instruction();Yt.push(ig)}let Bt=await x.methods.swap(new ge.BN(c),new ge.BN(y||0)).accounts({payer:G,config:Ie,bridgeAuthority:Z,user:G,sendBridgeToken:Ue,sendMint:de,sendPool:qe,sendUserToken:Xt,receiveBridgeToken:et,receiveMint:Le,receivePool:ot,receiveUserToken:Ke}).preInstructions(Yt).transaction(),st=V.connection;return Bt.recentBlockhash=(await st.getLatestBlockhash()).blockhash,Bt.feePayer=G,await kn(Bt,s,this.solanaRpcUrl),await this.convertToVersionedTransaction(Bt,st)}async buildRawTransactionSend(i){let r=await Me(this.chainType,i,this.api),o=this.addPoolAddress(i,r),s=o.gasFeePaymentMethod=="stablecoin",d;if(s)try{let{tx:A,solTxSendUpdatedParams:l}=await this.processJup(o,i,!0);d=A,o={...o,...l}}catch{try{let{tx:l,solTxSendUpdatedParams:u}=await this.processJup(o,i,!1);d=l,o={...o,...u}}catch(l){throw l instanceof oe?l:l instanceof Error&&l.message?new he(`Some error occurred during creation Jupiter swap transaction. ${l.message}`):new he("Some error occurred during creation Jupiter swap transaction")}}let c,g;switch(r.messenger){case 1:{let A=await this.prepareSwapAndBridgeData(o);c=await this.buildSwapAndBridgeAllbridgeTransaction(A);break}case 2:{let A=await this.prepareSwapAndBridgeData(o),{transaction:l,messageAccount:u}=await this.buildSwapAndBridgeWormholeTransaction(A);c=l,g=u;break}case 3:case 4:{let A=await this.prepareSwapAndBridgeCctpData(o),{transaction:l,messageSentEventDataKeypair:u}=await this.buildSwapAndBridgeCctpTransaction(i.destinationToken.chainSymbol,A);c=l,g=u;break}case 5:throw new Te("Messenger OFT is not supported yet.")}if(s){if(!d)throw new he("Swap tx is absent");c=await this.jupiterService.amendJupiterWithSdkTx(d,c)}return await cd(c,i.txFeeParams,this.solanaRpcUrl),g&&c.sign([g]),c}async processJup(i,r,o){let{fee:s,extraGas:d,gasFeePaymentMethod:c}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(r.sourceToken,i),g=o?(0,tt.Big)(s):(0,tt.Big)(i.fee);d&&(g=g.plus(d)),o||(g=g.mul(ld));let{tx:A,amountIn:l}=await this.jupiterService.getJupiterSwapTx(r.fromAccountAddress,r.sourceToken.tokenAddress,g.toFixed(0),o),u;if(o){if(!l)throw new he("Cannot get inAmount");u=(0,tt.Big)(i.amount).minus((0,tt.Big)(l).mul(ld)).toFixed(0)}else u=(0,tt.Big)(i.amount).minus(g).toFixed(0);if((0,tt.Big)(u).lte(0))throw new ln(`Amount not enough to pay fee, ${M((0,tt.Big)(u).minus(1).neg(),r.sourceToken.decimals).toFixed()} stables is missing`);return{tx:A,solTxSendUpdatedParams:{amount:u,fee:s,extraGas:d,gasFeePaymentMethod:c}}}addPoolAddress(i,r){return{...r,poolAddress:i.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(i,r){if(r.gasFeePaymentMethod=="stablecoin"){let o=(await this.api.getReceiveTransactionCost({sourceChainId:r.fromChainId,destinationChainId:r.toChainId,messenger:r.messenger,sourceToken:i.tokenAddress})).sourceNativeTokenPrice,s=(0,tt.Big)(r.fee).div(o).mul((0,tt.Big)(10).pow(k.getChainDecimalsByType("SOLANA")-i.decimals)).toFixed(0),d;return r.extraGas&&(d=(0,tt.Big)(r.extraGas).div(o).mul((0,tt.Big)(10).pow(k.getChainDecimalsByType("SOLANA")-i.decimals)).toFixed(0)),{fee:s,extraGas:d,gasFeePaymentMethod:"native"}}return{fee:r.fee,extraGas:r.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(i,r,o){return ge.web3.SystemProgram.transfer({fromPubkey:r,toPubkey:o,lamports:+i})}async prepareSwapAndBridgeData(i){let{amount:r,contractAddress:o,fromChainId:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:g,toAccountAddress:A,toTokenAddress:l,poolAddress:u,extraGas:y}=i,C=c,Y=d,W=g,F=l,w=A,R=o,G=s,V=nn(this.solanaRpcUrl,Y),x=new ge.Program(wi,R,V),Z=Array.from(en()),Ie=new ee.PublicKey(u),de=await od(r,x,Ie),Ue=await Qs(Z,x.programId),qe=await Pn(x.programId),Xt=await At(new ee.PublicKey(Y),new ee.PublicKey(C)),rt=await Ln(new ee.PublicKey(C),x.programId),Le=await Dr(W,x.programId),et=await Es(W,Buffer.from(F),x.programId),ot=await tn(x.programId),Ke=await x.account.config.fetch(ot),Yt=await Ti(W,Ke.gasOracleProgramId),Bt=await Ti(G,Ke.gasOracleProgramId),st=sd({amount:de,recipient:Buffer.from(w),nonce:Buffer.from(Z),receiveToken:Buffer.from(F),destinationChainId:W,sourceChainId:G,chainBridge:(await Pn(x.programId)).toBuffer()}),q={};return q.bridge=x,q.amount=new ge.BN(r),q.vusdAmount=new ge.BN(de),q.nonce=Z,q.recipient=Array.from(w),q.receiveToken=Array.from(F),q.poolAccount=Ie,q.lockAccount=Ue,q.bridgeAuthority=qe,q.userToken=Xt,q.bridgeTokenAccount=rt,q.chainBridgeAccount=Le,q.otherBridgeTokenAccount=et,q.userAccount=new ee.PublicKey(Y),q.destinationChainId=W,q.mint=new ee.PublicKey(C),q.config=ot,q.configAccountInfo=Ke,q.gasPrice=Yt,q.thisGasPrice=Bt,q.message=st,y&&(q.extraGasInstruction=this.getExtraGasInstruction(y,q.userAccount,ot)),q}async buildSwapAndBridgeAllbridgeTransaction(i){let{bridge:r,vusdAmount:o,nonce:s,recipient:d,receiveToken:c,poolAccount:g,lockAccount:A,bridgeAuthority:l,userToken:u,bridgeTokenAccount:y,chainBridgeAccount:C,otherBridgeTokenAccount:Y,userAccount:W,destinationChainId:F,mint:w,config:R,configAccountInfo:G,gasPrice:V,thisGasPrice:x,message:Z,extraGasInstruction:Ie}=i,de=G.allbridgeMessengerProgramId,Ue=await Er(F,de),qe=await tn(de),Xt=await _s(Z,de),rt=[];Ie&&rt.push(Ie);let Le=await r.methods.swapAndBridge({vusdAmount:o,nonce:s,destinationChainId:F,recipient:d,receiveToken:c}).accounts({mint:w,user:W,config:R,lock:A,pool:g,gasPrice:V,thisGasPrice:x,bridgeAuthority:l,userToken:u,bridgeToken:y,chainBridge:C,messenger:de,messengerGasUsage:Ue,messengerConfig:qe,sentMessageAccount:Xt,otherBridgeToken:Y}).preInstructions([ge.web3.ComputeBudgetProgram.setComputeUnitLimit({units:no})]).postInstructions(rt).transaction(),et=nn(this.solanaRpcUrl,W.toString()).connection;return Le.recentBlockhash=(await et.getLatestBlockhash()).blockhash,Le.feePayer=W,await this.convertToVersionedTransaction(Le,et)}async convertToVersionedTransaction(i,r){let o=await r.getAddressLookupTable(new ee.PublicKey(this.params.solanaLookUpTable)).then(d=>d.value);if(!o)throw new h("Cannot find allbridgeLookupTableAccount");let s=new ge.web3.TransactionMessage({payerKey:i.feePayer,recentBlockhash:i.recentBlockhash,instructions:i.instructions}).compileToV0Message([o]);return new ge.web3.VersionedTransaction(s)}async buildSwapAndBridgeWormholeTransaction(i){let{bridge:r,vusdAmount:o,nonce:s,recipient:d,receiveToken:c,poolAccount:g,lockAccount:A,bridgeAuthority:l,userToken:u,bridgeTokenAccount:y,chainBridgeAccount:C,otherBridgeTokenAccount:Y,userAccount:W,destinationChainId:F,mint:w,config:R,configAccountInfo:G,gasPrice:V,thisGasPrice:x,message:Z,extraGasInstruction:Ie}=i,de=this.params.wormholeMessengerProgramId,[Ue]=ee.PublicKey.findProgramAddressSync([Buffer.from("Bridge")],new ee.PublicKey(de)),[qe]=ee.PublicKey.findProgramAddressSync([Buffer.from("fee_collector")],new ee.PublicKey(de)),[Xt]=ee.PublicKey.findProgramAddressSync([Buffer.from("Sequence"),l.toBuffer()],new ee.PublicKey(de)),rt=await Er(F,G.wormholeMessengerProgramId),Le=await tn(G.wormholeMessengerProgramId),et=ee.Keypair.generate(),ot=nn(this.solanaRpcUrl,W.toString()),Ke=await ot.connection.getAccountInfo(Ue);if(Ke==null)throw new h("Cannot fetch wormhole bridge account info");let Yt=new ge.BN(Ke.data.slice(16,24),"le").toString(),Bt=ee.SystemProgram.transfer({fromPubkey:W,toPubkey:qe,lamports:+Yt}),st=[];Ie&&st.push(Ie);let q={mint:w,user:W,config:R,lock:A,pool:g,gasPrice:V,thisGasPrice:x,bridgeAuthority:l,userToken:u,bridgeToken:y,chainBridge:C,otherBridgeToken:Y,messengerGasUsage:rt,wormholeProgram:de,bridge:Ue,message:et.publicKey,wormholeMessenger:G.wormholeMessengerProgramId,sequence:Xt,feeCollector:qe,wormholeMessengerConfig:Le,clock:ge.web3.SYSVAR_CLOCK_PUBKEY},ca=await r.methods.swapAndBridgeWormhole({vusdAmount:o,nonce:s,destinationChainId:F,recipient:d,receiveToken:c}).accounts(q).preInstructions([ge.web3.ComputeBudgetProgram.setComputeUnitLimit({units:no}),Bt]).postInstructions(st).signers([et]).transaction();return ca.recentBlockhash=(await ot.connection.getLatestBlockhash()).blockhash,ca.feePayer=W,{transaction:await this.convertToVersionedTransaction(ca,ot.connection),messageAccount:et}}async prepareSwapAndBridgeCctpData(i){let{contractAddress:r,amount:o,fromAccountAddress:s,fromTokenAddress:d,toChainId:c,toAccountAddress:g,toTokenAddress:A,extraGas:l}=i,u=r;if(!u)throw new We("Such route does not support CCTP protocol");let y=4,C=s,Y=A,W=g,F=nn(this.solanaRpcUrl,C),w=new ge.Program(id,u,F),R=new ee.PublicKey(d),G=await $s(R,w.programId),V=new ee.PublicKey(C),x=await w.account.cctpBridge.fetch(G),Z={};return Z.cctpBridge=w,Z.cctpBridgeAccount=G,Z.cctpAddressAccount=new ee.PublicKey(u),Z.amount=new ge.BN(o),Z.recipient=Array.from(W),Z.receiveToken=Array.from(Y),Z.userToken=await At(V,R),Z.bridgeAuthority=await Ds(G,w.programId),Z.bridgeTokenAccount=await qs(R,w.programId),Z.chainBridgeAccount=await Dr(c,w.programId),Z.userAccount=V,Z.destinationChainId=c,Z.mint=R,Z.gasPrice=await Ti(c,x.gasOracleProgramId),Z.thisGasPrice=await Ti(y,x.gasOracleProgramId),Z.provider=F,l&&(Z.extraGasInstruction=this.getExtraGasInstruction(l,Z.userAccount,G)),Z}async buildSwapAndBridgeCctpTransaction(i,r){let{cctpBridge:o,cctpBridgeAccount:s,amount:d,recipient:c,receiveToken:g,bridgeAuthority:A,userToken:l,bridgeTokenAccount:u,chainBridgeAccount:y,userAccount:C,destinationChainId:Y,mint:W,gasPrice:F,thisGasPrice:w,extraGasInstruction:R,provider:G}=r,V=this.params.cctpParams.cctpDomains[i],x=this.params.cctpParams.cctpTransmitterProgramId,Z=this.params.cctpParams.cctpTokenMessengerMinter;if(V==null||!x||!Z)throw new h("CCTP is not configured");let Ie=new ee.PublicKey(x),de=new ee.PublicKey(Z),{messageTransmitterAccount:Ue,tokenMessenger:qe,tokenMessengerEventAuthority:Xt,tokenMinter:rt,localToken:Le,remoteTokenMessengerKey:et,authorityPda:ot}=td(V,W,Ie,de),Ke=[];R&&Ke.push(R);let Yt=ee.Keypair.generate(),Bt=ed(o.programId,Yt.publicKey),st=await o.methods.bridge({amount:d,destinationChainId:Y,recipient:c,receiveToken:g}).accounts({mint:W,user:C,cctpBridge:s,messageSentEventData:Yt.publicKey,lock:Bt,cctpMessenger:de,messageTransmitterProgram:Ie,messageTransmitterAccount:Ue,tokenMessenger:qe,tokenMinter:rt,localToken:Le,remoteTokenMessengerKey:et,authorityPda:ot,eventAuthority:Xt,bridgeToken:u,gasPrice:F,thisGasPrice:w,chainBridge:y,userToken:l,bridgeAuthority:A}).preInstructions([ge.web3.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(Ke).transaction(),q=G.connection;return st.recentBlockhash=(await q.getLatestBlockhash()).blockhash,st.feePayer=C,{transaction:await this.convertToVersionedTransaction(st,q),messageSentEventDataKeypair:Yt}}send(i){throw new H}};var wa=require("@stellar/stellar-sdk"),ud=require("big.js");var t=require("@stellar/stellar-sdk"),Fg=t.contract.Spec,Ng=t.contract.Client;var Zi=class extends Ng{constructor(i){super(new Fg(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),i);this.options=i}fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var Ga=class extends ve{constructor(i,r,o){super();this.nodeRpcUrlsConfig=i;this.params=r;this.api=o}chainType="SRB";async buildRawTransactionSend(i){let r=await Me(this.chainType,i,this.api);return await this.buildRawTransactionSendFromParams(r)}async buildRawTransactionSendFromParams(i){let{amount:r,contractAddress:o,fromAccountAddress:s,fromTokenAddress:d,toChainId:c,toAccountAddress:g,toTokenAddress:A,fee:l,gasFeePaymentMethod:u,extraGas:y}=i,C=l;y&&(C=(0,ud.Big)(C).plus(y).toFixed());let Y=this.getContract(Zi,o,s),W;switch(u){case"native":W=await Y.swap_and_bridge({sender:s,token:wa.Address.contract(Buffer.from(d)).toString(),amount:BigInt(r),recipient:Buffer.from(g),destination_chain_id:+c,receive_token:Buffer.from(A),nonce:Nt(),gas_amount:BigInt(C),fee_token_amount:BigInt(0)});break;case"stablecoin":W=await Y.swap_and_bridge({sender:s,token:wa.Address.contract(Buffer.from(d)).toString(),amount:BigInt(r),recipient:Buffer.from(g),destination_chain_id:+c,receive_token:Buffer.from(A),nonce:Nt(),gas_amount:BigInt(0),fee_token_amount:BigInt(C)});break;case"abr":throw new h("SRB bridge does not support ARB0 payment method");default:return se(u,"Unhandled FeePaymentMethod")}return W.toXDR()}async buildRawTransactionSwap(i){let r=ke(this.chainType,i);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(i){let{amount:r,contractAddress:o,fromAccountAddress:s,fromTokenAddress:d,toAccountAddress:c,toTokenAddress:g,minimumReceiveAmount:A}=i;return(await this.getContract(Zi,o,s).swap({sender:s,amount:BigInt(r),token:wa.Address.contract(Buffer.from(d)).toBuffer(),receive_token:Buffer.from(g),recipient:c,receive_amount_min:BigInt(A)})).toXDR()}send(i){throw new H}getContract(i,r,o){let s={publicKey:o,contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new i(s)}};var Si=require("@clarigen/core"),md=require("@stacks/network"),He=require("@stacks/transactions");var lt={bridge:{functions:{assertCanSwap:{name:"assert-can-swap",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertGasOracle:{name:"assert-gas-oracle",access:"private",args:[{name:"gas-oracle-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertMessenger:{name:"assert-messenger",access:"private",args:[{name:"messenger-ref",type:"trait_reference"},{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},convertBridgingFeeInTokensToNative:{name:"convert-bridging-fee-in-tokens-to-native",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"fee-token-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyStopAuthority:{name:"only-stop-authority",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveAndSwapFromVusd:{name:"receive-and-swap-from-vusd",access:"private",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"recipient",type:"principal"},{name:"vusd-amount",type:"uint128"},{name:"receive-amount-min",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},sendAndSwapToVusd:{name:"send-and-swap-to-vusd",access:"private",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},sendTokens:{name:"send-tokens",access:"private",args:[{name:"messenger-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"bridging-fee",type:"uint128"}],outputs:{type:{response:{ok:{tuple:[{name:"bridge-tx-cost",type:"uint128"},{name:"message-tx-cost",type:"uint128"}]},error:"uint128"}}}},addBridgeToken:{name:"add-bridge-token",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},addPool:{name:"add-pool",access:"public",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getTransactionCost:{name:"get-transaction-cost",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"this-chain-id_",type:"uint128"},{name:"gas-oracle",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveTokens:{name:"receive-tokens",access:"public",args:[{name:"messenger-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:"principal"},{name:"source-chain-id",type:"uint128"},{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"receive-amount-min",type:"uint128"},{name:"extra-gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},registerBridge:{name:"register-bridge",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"bridge-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeBridge:{name:"remove-bridge",access:"public",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeBridgeToken:{name:"remove-bridge-token",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeMessenger:{name:"remove-messenger",access:"public",args:[{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setGasUsage:{name:"set-gas-usage",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setMessenger:{name:"set-messenger",access:"public",args:[{name:"messenger-id",type:"uint128"},{name:"new-messenger",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setRebalancer:{name:"set-rebalancer",access:"public",args:[{name:"new-rebalancer",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setStopAuthority:{name:"set-stop-authority",access:"public",args:[{name:"new-authority",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startSwap:{name:"start-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopSwap:{name:"stop-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swap:{name:"swap",access:"public",args:[{name:"amount",type:"uint128"},{name:"send-pool-ref",type:"trait_reference"},{name:"send-ft-ref",type:"trait_reference"},{name:"receive-pool-ref",type:"trait_reference"},{name:"receive-ft-ref",type:"trait_reference"},{name:"recipient",type:"principal"},{name:"receive-amount-min",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swapAndBridge:{name:"swap-and-bridge",access:"public",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"messenger-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"fee-native-amount",type:"uint128"},{name:"fee-token-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawBridgingFeeInTokens:{name:"withdraw-bridging-fee-in-tokens",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawGasTokens:{name:"withdraw-gas-tokens",access:"public",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getGasOracleAddress:{name:"get-gas-oracle-address",access:"read_only",args:[],outputs:{type:"principal"}},getGasUsage:{name:"get-gas-usage",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getMessenger:{name:"get-messenger",access:"read_only",args:[{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getOtherBridge:{name:"get-other-bridge",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},getOwner:{name:"get-owner",access:"read_only",args:[],outputs:{type:"principal"}},getProcessedMessageStatus:{name:"get-processed-message-status",access:"read_only",args:[{name:"message-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},getRebalancer:{name:"get-rebalancer",access:"read_only",args:[],outputs:{type:"principal"}},getSentMessageStatus:{name:"get-sent-message-status",access:"read_only",args:[{name:"message-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},getStopAuthority:{name:"get-stop-authority",access:"read_only",args:[],outputs:{type:"principal"}},getThisChainId:{name:"get-this-chain-id",access:"read_only",args:[],outputs:{type:"uint128"}},getTokenInfo:{name:"get-token-info",access:"read_only",args:[{name:"token-principal-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:{tuple:[{name:"bridging-fee-conversion-scaling-factor",type:"uint128"},{name:"from-gas-oracle-scaling-factor",type:"uint128"},{name:"pool",type:"principal"},{name:"token",type:"principal"}]},error:"uint128"}}}},isBridgeTokenSupported:{name:"is-bridge-token-supported",access:"read_only",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},isSwapEnabled:{name:"is-swap-enabled",access:"read_only",args:[],outputs:{type:"bool"}}},maps:{gasUsageMap:{name:"gas-usage-map",key:"uint128",value:"uint128"},messengers:{name:"messengers",key:"uint128",value:"principal"},otherBridgeTokens:{name:"other-bridge-tokens",key:{tuple:[{name:"chain-id",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}]},value:"bool"},otherBridges:{name:"other-bridges",key:"uint128",value:{buffer:{length:32}}},processedMessages:{name:"processed-messages",key:{buffer:{length:32}},value:"bool"},sentMessages:{name:"sent-messages",key:{buffer:{length:32}},value:"bool"},tokenInfos:{name:"token-infos",key:{buffer:{length:32}},value:{tuple:[{name:"bridging-fee-conversion-scaling-factor",type:"uint128"},{name:"from-gas-oracle-scaling-factor",type:"uint128"},{name:"pool",type:"principal"},{name:"token",type:"principal"}]}}},variables:{chainPrecision:{name:"chain-precision",type:"uint128",access:"constant"},errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadyProcessed:{name:"err-already-processed",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadySent:{name:"err-already-sent",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errBridgeSourceNotRegistered:{name:"err-bridge-source-not-registered",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositAmountTooSmall:{name:"err-deposit-amount-too-small",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errGasUsageNotSet:{name:"err-gas-usage-not-set",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errMessengerNotRegistered:{name:"err-messenger-not-registered",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNoMessage:{name:"err-no-message",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughFee:{name:"err-not-enough-fee",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSwapProhibited:{name:"err-swap-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errTokenNotSupported:{name:"err-token-not-supported",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongGasOracle:{name:"err-wrong-gas-oracle",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongMessenger:{name:"err-wrong-messenger",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongTokenForPool:{name:"err-wrong-token-for-pool",type:{response:{ok:"none",error:"uint128"}},access:"constant"},oraclePrecision:{name:"oracle-precision",type:"uint128",access:"constant"},canSwap:{name:"can-swap",type:"bool",access:"variable"},gasOraclePrincipal:{name:"gas-oracle-principal",type:{optional:"principal"},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},rebalancer:{name:"rebalancer",type:"principal",access:"variable"},stopAuthority:{name:"stop-authority",type:"principal",access:"variable"},thisChainId:{name:"this-chain-id",type:{optional:"uint128"},access:"variable"}},constants:{canSwap:!1,chainPrecision:6n,errAlreadyInitialized:{isOk:!1,value:1004n},errAlreadyProcessed:{isOk:!1,value:1010n},errAlreadySent:{isOk:!1,value:1005n},errBridgeSourceNotRegistered:{isOk:!1,value:1009n},errDepositAmountTooSmall:{isOk:!1,value:1001n},errGasUsageNotSet:{isOk:!1,value:1008n},errMessengerNotRegistered:{isOk:!1,value:1014n},errNoMessage:{isOk:!1,value:1011n},errNotEnoughFee:{isOk:!1,value:1007n},errNotInitialized:{isOk:!1,value:1006n},errSwapProhibited:{isOk:!1,value:1012n},errTokenNotSupported:{isOk:!1,value:1002n},errUnauthorized:{isOk:!1,value:1000n},errWrongGasOracle:{isOk:!1,value:1013n},errWrongMessenger:{isOk:!1,value:1015n},errWrongTokenForPool:{isOk:!1,value:1003n},gasOraclePrincipal:null,oraclePrecision:18n,owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",rebalancer:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",stopAuthority:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",thisChainId:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"bridge"},ftToken:{functions:{getTokenUri:{name:"get-token-uri",access:"public",args:[],outputs:{type:{response:{ok:{optional:{"string-utf8":{length:19}}},error:"none"}}}},mint:{name:"mint",access:"public",args:[{name:"amount",type:"uint128"},{name:"recipient",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},transfer:{name:"transfer",access:"public",args:[{name:"amount",type:"uint128"},{name:"sender",type:"principal"},{name:"recipient",type:"principal"},{name:"memo",type:{optional:{buffer:{length:34}}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getBalance:{name:"get-balance",access:"read_only",args:[{name:"owner",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"none"}}}},getDecimals:{name:"get-decimals",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"none"}}}},getName:{name:"get-name",access:"read_only",args:[],outputs:{type:{response:{ok:{"string-ascii":{length:13}},error:"none"}}}},getSymbol:{name:"get-symbol",access:"read_only",args:[],outputs:{type:{response:{ok:{"string-ascii":{length:7}},error:"none"}}}},getTotalSupply:{name:"get-total-supply",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"none"}}}}},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[{name:"example-token"}],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"ft-token"},gasOracle:{functions:{setChainData:{name:"set-chain-data",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-price",type:"uint128"},{name:"new-gas-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setGasPrice:{name:"set-gas-price",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-gas-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setPrice:{name:"set-price",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},crossRate:{name:"cross-rate",access:"read_only",args:[{name:"other-chain-id",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getChainData:{name:"get-chain-data",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:{tuple:[{name:"gas-price",type:"uint128"},{name:"price",type:"uint128"}]},error:"uint128"}}}},getGasPrice:{name:"get-gas-price",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getPrice:{name:"get-price",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getTransactionGasCostInNativeToken:{name:"get-transaction-gas-cost-in-native-token",access:"read_only",args:[{name:"other-chain-id",type:"uint128"},{name:"gas-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getTransactionGasCostInUsd:{name:"get-transaction-gas-cost-in-usd",access:"read_only",args:[{name:"other-chain-id",type:"uint128"},{name:"gas-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}}},maps:{chainData:{name:"chain-data",key:"uint128",value:{tuple:[{name:"gas-price",type:"uint128"},{name:"price",type:"uint128"}]}}},variables:{errNotFound:{name:"err-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},oracleScalingFactor:{name:"oracle-scaling-factor",type:"uint128",access:"constant"},contractOwner:{name:"contract-owner",type:"principal",access:"variable"},fromOracleToChainScalingFactor:{name:"from-oracle-to-chain-scaling-factor",type:"uint128",access:"variable"},thisChainId:{name:"this-chain-id",type:"uint128",access:"variable"}},constants:{contractOwner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",errNotFound:{isOk:!1,value:4001n},errUnauthorized:{isOk:!1,value:4000n},fromOracleToChainScalingFactor:1000000000000n,oracleScalingFactor:1000000000000000000n,thisChainId:16n},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"gas-oracle"},gasOracleTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"gas-oracle-trait"},messenger:{functions:{assertGasOracle:{name:"assert-gas-oracle",access:"private",args:[{name:"gas-oracle-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},addSecondaryValidator:{name:"add-secondary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getTransactionCost:{name:"get-transaction-cost",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"this-chain-id_",type:"uint128"},{name:"gas-oracle",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveMessage:{name:"receive-message",access:"public",args:[{name:"message",type:{buffer:{length:32}}},{name:"signature1",type:{buffer:{length:65}}},{name:"signature2",type:{buffer:{length:65}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeSecondaryValidator:{name:"remove-secondary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},sendMessage:{name:"send-message",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},setGasUsage:{name:"set-gas-usage",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOtherChainIds:{name:"set-other-chain-ids",access:"public",args:[{name:"value",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setPrimaryValidator:{name:"set-primary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawGasTokens:{name:"withdraw-gas-tokens",access:"public",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getGasOracle:{name:"get-gas-oracle",access:"read_only",args:[],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getGasUsage:{name:"get-gas-usage",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getOtherChainIds:{name:"get-other-chain-ids",access:"read_only",args:[],outputs:{type:{response:{ok:{buffer:{length:32}},error:"none"}}}},getSentMessageBlock:{name:"get-sent-message-block",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getThisChainId:{name:"get-this-chain-id",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},isMessageReceived:{name:"is-message-received",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}}},maps:{gasUsageMap:{name:"gas-usage-map",key:"uint128",value:"uint128"},receivedMessages:{name:"received-messages",key:{buffer:{length:32}},value:"bool"},secondaryValidators:{name:"secondary-validators",key:{buffer:{length:33}},value:"bool"},sentMessagesBlock:{name:"sent-messages-block",key:{buffer:{length:32}},value:"uint128"}},variables:{errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadySent:{name:"err-already-sent",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errGasUsageNotSet:{name:"err-gas-usage-not-set",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidChainId:{name:"err-invalid-chain-id",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidDestination:{name:"err-invalid-destination",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidPrimary:{name:"err-invalid-primary",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidSecondary:{name:"err-invalid-secondary",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errMessageNotFound:{name:"err-message-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBufferLength:{name:"err-wrong-buffer-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongGasOracle:{name:"err-wrong-gas-oracle",type:{response:{ok:"none",error:"uint128"}},access:"constant"},gasOraclePrincipal:{name:"gas-oracle-principal",type:{optional:"principal"},access:"variable"},otherChainIds:{name:"other-chain-ids",type:{buffer:{length:32}},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},primaryValidator:{name:"primary-validator",type:{buffer:{length:33}},access:"variable"},thisChainId:{name:"this-chain-id",type:{optional:"uint128"},access:"variable"}},constants:{errAlreadyInitialized:{isOk:!1,value:3008n},errAlreadySent:{isOk:!1,value:3003n},errGasUsageNotSet:{isOk:!1,value:3010n},errInvalidChainId:{isOk:!1,value:3002n},errInvalidDestination:{isOk:!1,value:3004n},errInvalidPrimary:{isOk:!1,value:3005n},errInvalidSecondary:{isOk:!1,value:3006n},errMessageNotFound:{isOk:!1,value:3001n},errNotInitialized:{isOk:!1,value:3011n},errUnauthorized:{isOk:!1,value:3000n},errWrongBufferLength:{isOk:!1,value:3009n},errWrongGasOracle:{isOk:!1,value:3007n},gasOraclePrincipal:null,otherChainIds:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",primaryValidator:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),thisChainId:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"messenger"},messengerTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"messenger-trait"},pool:{functions:{addRewards:{name:"add-rewards",access:"private",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"none"}}}},assertBalanceReatio:{name:"assert-balance-reatio",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanDeposit:{name:"assert-can-deposit",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanSwap:{name:"assert-can-swap",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanWithdraw:{name:"assert-can-withdraw",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertToken:{name:"assert-token",access:"private",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},depositLp:{name:"deposit-lp",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"to",type:"principal"},{name:"lp-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},leCube_q:{name:"le-cube?",access:"private",args:[{name:"x",type:"uint128"},{name:"n",type:"uint128"}],outputs:{type:"bool"}},newtonStep:{name:"newton-step",access:"private",args:[{name:"n",type:"uint128"},{name:"x",type:"uint128"}],outputs:{type:"uint128"}},onlyBridge:{name:"only-bridge",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyStopAuthority:{name:"only-stop-authority",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},refine:{name:"refine",access:"private",args:[{name:"n",type:"uint128"},{name:"x",type:"uint128"}],outputs:{type:"uint128"}},withdrawLp:{name:"withdraw-lp",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"from",type:"principal"},{name:"lp-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},adjustTotalLpAmount:{name:"adjust-total-lp-amount",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},claimAdminFee:{name:"claim-admin-fee",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},claimRewards:{name:"claim-rewards",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},deposit:{name:"deposit",access:"public",args:[{name:"amount",type:"uint128"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"token",type:"trait_reference"},{name:"bridge-address",type:"principal"},{name:"fee-share-bp-arg",type:"uint128"},{name:"balance-ratio-min-bp-arg",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},serBalanceRetioMinBp:{name:"ser-balance-retio-min-bp",access:"public",args:[{name:"new-balance-ratio-min-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setAdminFeeSahreBp:{name:"set-admin-fee-sahre-bp",access:"public",args:[{name:"new-admin-fee-share-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setBridge:{name:"set-bridge",access:"public",args:[{name:"new-bridge",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setFeeShare:{name:"set-fee-share",access:"public",args:[{name:"fee-share-bp_",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setStopAuthority:{name:"set-stop-authority",access:"public",args:[{name:"new-stop-authority",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startDeposit:{name:"start-deposit",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startSwap:{name:"start-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startWithdraw:{name:"start-withdraw",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopDeposit:{name:"stop-deposit",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopSwap:{name:"stop-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopWithdraw:{name:"stop-withdraw",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swapFromVusd:{name:"swap-from-vusd",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"},{name:"receive-amount-min",type:"uint128"},{name:"zero-fee",type:"bool"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},swapToVusd:{name:"swap-to-vusd",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"},{name:"zero-fee",type:"bool"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},withdraw:{name:"withdraw",access:"public",args:[{name:"amount-lp",type:"uint128"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},calcD:{name:"calc-d",access:"read_only",args:[{name:"x",type:"uint128"},{name:"y",type:"uint128"}],outputs:{type:"uint128"}},calcY:{name:"calc-y",access:"read_only",args:[{name:"x",type:"uint128"},{name:"d_",type:"uint128"}],outputs:{type:"uint128"}},cbrt:{name:"cbrt",access:"read_only",args:[{name:"n",type:"uint128"}],outputs:{type:"uint128"}},fromSystemPrecision:{name:"from-system-precision",access:"read_only",args:[{name:"amount",type:"uint128"}],outputs:{type:"uint128"}},getAccRewardPerShareP:{name:"get-acc-reward-per-share-p",access:"read_only",args:[],outputs:{type:"uint128"}},getAdminFeeAmount:{name:"get-admin-fee-amount",access:"read_only",args:[],outputs:{type:"uint128"}},getAdminFeeShareBp:{name:"get-admin-fee-share-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getBalanceRatioMinBp:{name:"get-balance-ratio-min-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getBridge:{name:"get-bridge",access:"read_only",args:[],outputs:{type:{optional:"principal"}}},getCanDeposit:{name:"get-can-deposit",access:"read_only",args:[],outputs:{type:"bool"}},getCanSwap:{name:"get-can-swap",access:"read_only",args:[],outputs:{type:"bool"}},getCanWithdraw:{name:"get-can-withdraw",access:"read_only",args:[],outputs:{type:"bool"}},getD:{name:"get-d",access:"read_only",args:[],outputs:{type:"uint128"}},getFeeShareBp:{name:"get-fee-share-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getLpBalance:{name:"get-lp-balance",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:"uint128"}},getLpTotalSupply:{name:"get-lp-total-supply",access:"read_only",args:[],outputs:{type:"uint128"}},getOwner:{name:"get-owner",access:"read_only",args:[],outputs:{type:"principal"}},getReserves:{name:"get-reserves",access:"read_only",args:[],outputs:{type:"uint128"}},getStopAuthority:{name:"get-stop-authority",access:"read_only",args:[],outputs:{type:"principal"}},getTokenAddress:{name:"get-token-address",access:"read_only",args:[],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getTokenBalance:{name:"get-token-balance",access:"read_only",args:[],outputs:{type:"uint128"}},getUserRewardDebt:{name:"get-user-reward-debt",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:"uint128"}},getVusdBalance:{name:"get-vusd-balance",access:"read_only",args:[],outputs:{type:"uint128"}},pendingRewards:{name:"pending-rewards",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"none"}}}},toSystemPrecision:{name:"to-system-precision",access:"read_only",args:[{name:"amount",type:"uint128"}],outputs:{type:"uint128"}}},maps:{lpBalances:{name:"lp-balances",key:"principal",value:"uint128"},userRewardDebt:{name:"user-reward-debt",key:"principal",value:"uint128"}},variables:{BP:{name:"BP",type:"uint128",access:"constant"},P:{name:"P",type:"uint128",access:"constant"},a:{name:"a",type:"uint128",access:"constant"},errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositAmountTooSmall:{name:"err-deposit-amount-too-small",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositProhibited:{name:"err-deposit-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errLowTokenBalance:{name:"err-low-token-balance",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errLowVusdBalance:{name:"err-low-vusd-balance",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughLp:{name:"err-not-enough-lp",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughReserves:{name:"err-not-enough-reserves",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errPoolBalanceTooBig:{name:"err-pool-balance-too-big",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSlippage:{name:"err-slippage",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSwapProhibited:{name:"err-swap-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errTooLarge:{name:"err-too-large",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWithdrawProhibited:{name:"err-withdraw-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongToken:{name:"err-wrong-token",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errZeroChanges:{name:"err-zero-changes",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errZeroDChanges:{name:"err-zero-d-changes",type:{response:{ok:"none",error:"uint128"}},access:"constant"},maxTokenBalance:{name:"max-token-balance",type:"uint128",access:"constant"},systemPrecision:{name:"system-precision",type:"uint128",access:"constant"},accRewardPerShareP:{name:"acc-reward-per-share-p",type:"uint128",access:"variable"},adminFeeAmount:{name:"admin-fee-amount",type:"uint128",access:"variable"},adminFeeShareBp:{name:"admin-fee-share-bp",type:"uint128",access:"variable"},balanceRatioMinBp:{name:"balance-ratio-min-bp",type:"uint128",access:"variable"},bridge:{name:"bridge",type:{optional:"principal"},access:"variable"},canDeposit:{name:"can-deposit",type:"bool",access:"variable"},canSwap:{name:"can-swap",type:"bool",access:"variable"},canWithdraw:{name:"can-withdraw",type:"bool",access:"variable"},d:{name:"d",type:"uint128",access:"variable"},feeShareBp:{name:"fee-share-bp",type:"uint128",access:"variable"},lpTotalSupply:{name:"lp-total-supply",type:"uint128",access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},reserves:{name:"reserves",type:"uint128",access:"variable"},stopAuthority:{name:"stop-authority",type:"principal",access:"variable"},tokenAmountIncrease:{name:"token-amount-increase",type:"uint128",access:"variable"},tokenAmountReduce:{name:"token-amount-reduce",type:"uint128",access:"variable"},tokenBalance:{name:"token-balance",type:"uint128",access:"variable"},tokenPrincipal:{name:"token-principal",type:{optional:"principal"},access:"variable"},vusdBalance:{name:"vusd-balance",type:"uint128",access:"variable"}},constants:{BP:10000n,P:48n,a:20n,accRewardPerShareP:0n,adminFeeAmount:0n,adminFeeShareBp:0n,balanceRatioMinBp:0n,bridge:null,canDeposit:!0,canSwap:!0,canWithdraw:!0,d:0n,errAlreadyInitialized:{isOk:!1,value:2007n},errDepositAmountTooSmall:{isOk:!1,value:2001n},errDepositProhibited:{isOk:!1,value:2013n},errLowTokenBalance:{isOk:!1,value:2012n},errLowVusdBalance:{isOk:!1,value:2011n},errNotEnoughLp:{isOk:!1,value:2010n},errNotEnoughReserves:{isOk:!1,value:2005n},errNotInitialized:{isOk:!1,value:2006n},errPoolBalanceTooBig:{isOk:!1,value:2002n},errSlippage:{isOk:!1,value:2009n},errSwapProhibited:{isOk:!1,value:2015n},errTooLarge:{isOk:!1,value:2016n},errUnauthorized:{isOk:!1,value:2000n},errWithdrawProhibited:{isOk:!1,value:2014n},errWrongToken:{isOk:!1,value:2008n},errZeroChanges:{isOk:!1,value:2003n},errZeroDChanges:{isOk:!1,value:2004n},feeShareBp:0n,lpTotalSupply:0n,maxTokenBalance:1000000000000n,owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",reserves:0n,stopAuthority:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",systemPrecision:3n,tokenAmountIncrease:0n,tokenAmountReduce:0n,tokenBalance:0n,tokenPrincipal:null,vusdBalance:0n},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"pool"},poolTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"pool-trait"},sip010TraitFtStandard:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch21",clarity_version:"Clarity1",contractName:"sip-010-trait-ft-standard"},utils:{functions:{assertNotEmptyBuff32:{name:"assert-not-empty-buff-32",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},bufferByte:{name:"buffer-byte",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}},{name:"i",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:1}},error:"uint128"}}}},bufferByteUint:{name:"buffer-byte-uint",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}},{name:"i",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},hashMessage:{name:"hash-message",access:"read_only",args:[{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"source-chain-id",type:"uint128"},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},hashWithSenderAddress:{name:"hash-with-sender-address",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}},{name:"sender",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},principalHash:{name:"principal-hash",access:"read_only",args:[{name:"value",type:"principal"}],outputs:{type:{buffer:{length:32}}}},principalToBuff32:{name:"principal-to-buff32",access:"read_only",args:[{name:"value",type:"principal"}],outputs:{type:{buffer:{length:32}}}},stringToBuff:{name:"string-to-buff",access:"read_only",args:[{name:"str",type:{"string-ascii":{length:40}}}],outputs:{type:{buffer:{length:45}}}},uintToBuff1:{name:"uint-to-buff-1",access:"read_only",args:[{name:"value",type:"uint128"}],outputs:{type:{buffer:{length:17}}}},uintToBuff32:{name:"uint-to-buff-32",access:"read_only",args:[{name:"value",type:"uint128"}],outputs:{type:{buffer:{length:33}}}}},maps:{},variables:{errEmptyBuffer:{name:"err-empty-buffer",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBufferLength:{name:"err-wrong-buffer-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongMsgLength:{name:"err-wrong-msg-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},thisChainId:{name:"this-chain-id",type:"uint128",access:"constant"},zeroBytes12:{name:"zero-bytes-12",type:{buffer:{length:12}},access:"constant"},zeroBytes16:{name:"zero-bytes-16",type:{buffer:{length:16}},access:"constant"},zeroBytes32:{name:"zero-bytes-32",type:{buffer:{length:32}},access:"constant"}},constants:{errEmptyBuffer:{isOk:!1,value:5002n},errWrongBufferLength:{isOk:!1,value:5000n},errWrongMsgLength:{isOk:!1,value:5001n},thisChainId:16n,zeroBytes12:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0]),zeroBytes16:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),zeroBytes32:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"utils"}};function Pt(a){if(!a.originTokenAddress)throw new h("STX token must contain 'originTokenAddress'");let[n,i]=a.originTokenAddress.split("::");if(!i)throw new h("STX token must contain 'originTokenAddress' ends with '::<tokenName>'");return i}var pd=require("@stacks/transactions");function Lt(a,n,i,r,o){let[s,d]=(0,pd.parseContractId)(r);if(!s||!d)throw new Error(`Unable to parse stx token ${r}`);return{type:"ft-postcondition",address:i,condition:n,asset:`${s}.${d}::${o}`,amount:a}}function io(a,n,i){return{type:"stx-postcondition",address:i,condition:n,amount:a}}var Za=class extends ve{constructor(i,r,o){super();this.nodeRpcUrl=i;this.params=r;this.api=o;let s=(0,md.createNetwork)({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new Si.ClarigenClient(s,this.params.stxHeroApiKey)}chainType="STX";client;send(i){throw new H}async buildRawTransactionSend(i){let r=await Me(this.chainType,i,this.api),{contractAddress:o,messenger:s,toChainId:d,toAccountAddress:c,toTokenAddress:g}=r,A=BigInt(r.amount),l=Lt(A,"lte",i.fromAccountAddress,i.sourceToken.tokenAddress,Pt(i.sourceToken)),u=io(0,"gte",i.sourceToken.bridgeAddress),y=[l,u],C=BigInt(r.fee);r.extraGas&&(C=C+BigInt(r.extraGas));let Y,W;switch(r.gasFeePaymentMethod){case"native":{Y=0n,W=C;let qe=io(C,"lte",i.fromAccountAddress);y.push(qe);break}case"stablecoin":{Y=C,W=0n;break}case"abr":throw new h("STX bridge does not support ARB0 payment method");default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}let[F]=(0,He.parseContractId)(o),w=(0,Si.contractFactory)(lt.bridge,o),{contractAddress:R,contractName:G,functionName:V,functionArgs:x}=w.swapAndBridge({ftRef:i.sourceToken.tokenAddress,poolRef:i.sourceToken.poolAddress,messengerRef:`${F}.messenger`,gasOracleRef:`${F}.gas-oracle`,amount:A,recipient:Uint8Array.from(c),destinationChainId:d,receiveToken:Uint8Array.from(g),nonce:Uint8Array.from(en()),messengerId:s,feeNativeAmount:W,feeTokenAmount:Y}),Z=(0,He.makeRandomPrivKey)(),Ie=(0,He.privateKeyToPublic)(Z),de={contractAddress:R,contractName:G,functionName:V,functionArgs:x,publicKey:Ie,validateWithAbi:!0,network:this.client.network,postConditions:y,postConditionMode:He.PostConditionMode.Deny};return(await(0,He.makeUnsignedContractCall)(de)).serialize()}async buildRawTransactionSwap(i){let r=ke(this.chainType,i),o=BigInt(r.amount),s=BigInt(r.minimumReceiveAmount),d=i.sourceToken.bridgeAddress,c=(0,Si.contractFactory)(lt.bridge,d),{contractAddress:g,contractName:A,functionName:l,functionArgs:u}=c.swap({amount:o,sendPoolRef:i.sourceToken.poolAddress,sendFtRef:i.sourceToken.tokenAddress,receivePoolRef:i.destinationToken.poolAddress,receiveFtRef:i.destinationToken.tokenAddress,recipient:i.toAccountAddress,receiveAmountMin:s}),y=(0,He.makeRandomPrivKey)(),C=(0,He.privateKeyToPublic)(y),Y=Lt(o,"lte",i.fromAccountAddress,i.sourceToken.tokenAddress,Pt(i.sourceToken)),W=Lt(s,"gte",i.destinationToken.poolAddress,i.destinationToken.tokenAddress,Pt(i.destinationToken)),F={contractAddress:g,contractName:A,functionName:l,functionArgs:u,publicKey:C,validateWithAbi:!0,network:this.client.network,postConditions:[Y,W],postConditionMode:He.PostConditionMode.Deny};return(await(0,He.makeUnsignedContractCall)(F)).serialize()}};var bd="1.18.0",yd="1.40.0";var wg={"-32700":"ParseError","-32701":"OversizedRequest","-32702":"OversizedResponse","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError","-32604":"ServerBusy","-32000":"CallExecutionFailed","-32001":"UnknownError","-32003":"SubscriptionClosed","-32004":"SubscriptionClosedWithError","-32005":"BatchesNotSupported","-32006":"TooManySubscriptions","-32050":"TransientError","-32002":"TransactionExecutionClientError"},Sa=class extends Error{},Jn=class extends Sa{constructor(n,i){super(n),this.code=i,this.type=wg[i]??"ServerError"}},Va=class extends Sa{constructor(n,i,r){super(n),this.status=i,this.statusText=r}};var Cd=a=>{throw TypeError(a)},ro=(a,n,i)=>n.has(a)||Cd("Cannot "+i),Ae=(a,n,i)=>(ro(a,n,"read from private field"),i?i.call(a):n.get(a)),Cn=(a,n,i)=>n.has(a)?Cd("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(a):n.set(a,i),zn=(a,n,i,r)=>(ro(a,n,"write to private field"),r?r.call(a,i):n.set(a,i),i),Id=(a,n,i)=>(ro(a,n,"access private method"),i),Gg=(a,n,i,r)=>({set _(o){zn(a,n,o,i)},get _(){return Ae(a,n,r)}}),In,Vi,jt,hn,Xi,xn,Xa,hd,vd;function Zg(a){let n=new URL(a);return n.protocol=n.protocol.replace("http","ws"),n.toString()}var Sg={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},Ma=class{constructor(n,i={}){if(Cn(this,Xa),Cn(this,In,0),Cn(this,Vi,0),Cn(this,jt,null),Cn(this,hn,null),Cn(this,Xi,new Set),Cn(this,xn,new Map),this.endpoint=n,this.options={...Sg,...i},!this.options.WebSocketConstructor)throw new Error("Missing WebSocket constructor");this.endpoint.startsWith("http")&&(this.endpoint=Zg(this.endpoint))}async makeRequest(n,i){let r=await Id(this,Xa,hd).call(this);return new Promise((o,s)=>{zn(this,In,Ae(this,In)+1),Ae(this,xn).set(Ae(this,In),{resolve:o,reject:s,timeout:setTimeout(()=>{Ae(this,xn).delete(Ae(this,In)),s(new Error(`Request timeout: ${n}`))},this.options.callTimeout)}),r.send(JSON.stringify({jsonrpc:"2.0",id:Ae(this,In),method:n,params:i}))}).then(({error:o,result:s})=>{if(o)throw new Jn(o.message,o.code);return s})}async subscribe(n){let i=new ao(n);return Ae(this,Xi).add(i),await i.subscribe(this),()=>i.unsubscribe(this)}};In=new WeakMap;Vi=new WeakMap;jt=new WeakMap;hn=new WeakMap;Xi=new WeakMap;xn=new WeakMap;Xa=new WeakSet;hd=function(){return Ae(this,hn)?Ae(this,hn):(zn(this,hn,new Promise(a=>{Ae(this,jt)?.close(),zn(this,jt,new this.options.WebSocketConstructor(this.endpoint)),Ae(this,jt).addEventListener("open",()=>{zn(this,Vi,0),a(Ae(this,jt))}),Ae(this,jt).addEventListener("close",()=>{Gg(this,Vi)._++,Ae(this,Vi)<=this.options.maxReconnects&&setTimeout(()=>{Id(this,Xa,vd).call(this)},this.options.reconnectTimeout)}),Ae(this,jt).addEventListener("message",({data:n})=>{let i;try{i=JSON.parse(n)}catch(r){console.error(new Error(`Failed to parse RPC message: ${n}`,{cause:r}));return}if("id"in i&&i.id!=null&&Ae(this,xn).has(i.id)){let{resolve:r,timeout:o}=Ae(this,xn).get(i.id);clearTimeout(o),r(i)}else if("params"in i){let{params:r}=i;Ae(this,Xi).forEach(o=>{o.subscriptionId===r.subscription&&r.subscription===o.subscriptionId&&o.onMessage(r.result)})}})})),Ae(this,hn))};vd=async function(){return Ae(this,jt)?.close(),zn(this,hn,null),Promise.allSettled([...Ae(this,Xi)].map(a=>a.subscribe(this)))};var ao=class{constructor(n){this.subscriptionId=null,this.subscribed=!1,this.input=n}onMessage(n){this.subscribed&&this.input.onMessage(n)}async unsubscribe(n){let{subscriptionId:i}=this;return this.subscribed=!1,i==null?!1:(this.subscriptionId=null,n.makeRequest(this.input.unsubscribe,[i]))}async subscribe(n){this.subscriptionId=null,this.subscribed=!0;let i=await n.makeRequest(this.input.method,this.input.params);this.subscribed&&(this.subscriptionId=i)}};var Rd=a=>{throw TypeError(a)},co=(a,n,i)=>n.has(a)||Rd("Cannot "+i),nt=(a,n,i)=>(co(a,n,"read from private field"),i?i.call(a):n.get(a)),Pa=(a,n,i)=>n.has(a)?Rd("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(a):n.set(a,i),oo=(a,n,i,r)=>(co(a,n,"write to private field"),r?r.call(a,i):n.set(a,i),i),Vg=(a,n,i)=>(co(a,n,"access private method"),i),Mi,ut,Pi,so,fd,La=class{constructor(n){Pa(this,so),Pa(this,Mi,0),Pa(this,ut),Pa(this,Pi),oo(this,ut,n)}fetch(n,i){let r=nt(this,ut).fetch??fetch;if(!r)throw new Error("The current environment does not support fetch, you can provide a fetch implementation in the options for SuiHTTPTransport.");return r(n,i)}async request(n){oo(this,Mi,nt(this,Mi)+1);let i=await this.fetch(nt(this,ut).rpc?.url??nt(this,ut).url,{method:"POST",headers:{"Content-Type":"application/json","Client-Sdk-Type":"typescript","Client-Sdk-Version":bd,"Client-Target-Api-Version":yd,"Client-Request-Method":n.method,...nt(this,ut).rpc?.headers},body:JSON.stringify({jsonrpc:"2.0",id:nt(this,Mi),method:n.method,params:n.params})});if(!i.ok)throw new Va(`Unexpected status code: ${i.status}`,i.status,i.statusText);let r=await i.json();if("error"in r&&r.error!=null)throw new Jn(r.error.message,r.error.code);return r.result}async subscribe(n){let i=await Vg(this,so,fd).call(this).subscribe(n);return async()=>!!await i()}};Mi=new WeakMap;ut=new WeakMap;Pi=new WeakMap;so=new WeakSet;fd=function(){if(!nt(this,Pi)){let a=nt(this,ut).WebSocketConstructor??WebSocket;if(!a)throw new Error("The current environment does not support WebSocket, you can provide a WebSocketConstructor in the options for SuiHTTPTransport.");oo(this,Pi,new Ma(nt(this,ut).websocket?.url??nt(this,ut).url,{WebSocketConstructor:a,...nt(this,ut).websocket}))}return nt(this,Pi)};var Ot=require("@mysten/bcs");Re();ze();var E=require("@mysten/bcs");var iA=/^(?!.*(^(?!@)|[-.@])($|[-.@]))(?:[a-z0-9-]{0,63}(?:\.[a-z0-9-]{0,63})*)?@[a-z0-9-]{0,63}$/i,aA=/^(?!.*(^|[-.])($|[-.]))(?:[a-z0-9-]{0,63}\.)+sui$/i;function Sd(a,n="at"){let i=a.toLowerCase(),r;if(i.includes("@")){if(!iA.test(i))throw new Error(`Invalid SuiNS name ${a}`);let[o,s]=i.split("@");r=[...o?o.split("."):[],s]}else{if(!aA.test(i))throw new Error(`Invalid SuiNS name ${a}`);r=i.split(".").slice(0,-1)}return n==="dot"?`${r.join(".")}.sui`:`${r.slice(0,-1).join(".")}@${r[r.length-1]}`}ze();var rA=BigInt(1e9),Po="0x1",Ja="0x2";var za=Je("0x6");var Lo=`${Ja}::sui::SUI`,oA=Je("0x5");ze();var sA="object",dA="ID",cA="ascii",gA="String",AA="string",lA="String",uA="option",pA="Option";function Vd(a){let n=typeof a.body=="object"&&"datatype"in a.body?a.body.datatype:null;return!!n&&j(n.package)===j("0x2")&&n.module==="tx_context"&&n.type==="TxContext"}function xa(a){if(typeof a=="string")switch(a){case"address":return v.Address;case"bool":return v.Bool;case"u8":return v.U8;case"u16":return v.U16;case"u32":return v.U32;case"u64":return v.U64;case"u128":return v.U128;case"u256":return v.U256;default:throw new Error(`Unknown type signature ${a}`)}if("vector"in a){if(a.vector==="u8")return v.vector(v.U8).transform({input:i=>typeof i=="string"?new TextEncoder().encode(i):i,output:i=>i});let n=xa(a.vector);return n?v.vector(n):null}if("datatype"in a){let n=j(a.datatype.package);if(n===j(Po)){if(a.datatype.module===cA&&a.datatype.type===gA)return v.String;if(a.datatype.module===AA&&a.datatype.type===lA)return v.String;if(a.datatype.module===uA&&a.datatype.type===pA){let i=xa(a.datatype.typeParameters[0]);return i?v.vector(i):null}}if(n===j(Ja)&&a.datatype.module===sA&&a.datatype.type===dA)return v.Address}return null}function Xd(a){return typeof a=="object"&&"Reference"in a?{ref:"&",body:ki(a.Reference)}:typeof a=="object"&&"MutableReference"in a?{ref:"&mut",body:ki(a.MutableReference)}:{ref:null,body:ki(a)}}function ki(a){if(typeof a=="string")switch(a){case"Address":return"address";case"Bool":return"bool";case"U8":return"u8";case"U16":return"u16";case"U32":return"u32";case"U64":return"u64";case"U128":return"u128";case"U256":return"u256";default:throw new Error(`Unexpected type ${a}`)}if("Vector"in a)return{vector:ki(a.Vector)};if("Struct"in a)return{datatype:{package:a.Struct.address,module:a.Struct.module,type:a.Struct.name,typeParameters:a.Struct.typeArguments.map(ki)}};if("TypeParameter"in a)return{typeParameter:a.TypeParameter};throw new Error(`Unexpected type ${JSON.stringify(a)}`)}var Md=require("@mysten/bcs");ze();function mA(a){return{$kind:"Pure",Pure:{bytes:a instanceof Uint8Array?(0,Md.toBase64)(a):a.toBase64()}}}var Oe={Pure:mA,ObjectRef({objectId:a,digest:n,version:i}){return{$kind:"Object",Object:{$kind:"ImmOrOwnedObject",ImmOrOwnedObject:{digest:n,version:i,objectId:j(a)}}}},SharedObjectRef({objectId:a,mutable:n,initialSharedVersion:i}){return{$kind:"Object",Object:{$kind:"SharedObject",SharedObject:{mutable:n,initialSharedVersion:i,objectId:j(a)}}}},ReceivingRef({objectId:a,digest:n,version:i}){return{$kind:"Object",Object:{$kind:"Receiving",Receiving:{digest:n,version:i,objectId:j(a)}}}}};var Jo=require("@mysten/bcs"),yt=require("valibot");ze();var m=require("valibot");ze();function rn(a){let n=Object.entries(a).map(([i,r])=>(0,m.object)({[i]:r}));return(0,m.pipe)((0,m.union)(n),(0,m.transform)(i=>({...i,$kind:Object.keys(i)[0]})))}var vn=(0,m.pipe)((0,m.string)(),(0,m.transform)(a=>j(a)),(0,m.check)(Ee)),Pe=vn,an=(0,m.string)(),we=(0,m.pipe)((0,m.union)([(0,m.string)(),(0,m.pipe)((0,m.number)(),(0,m.integer)())]),(0,m.check)(a=>{try{return BigInt(a),BigInt(a)>=0&&BigInt(a)<=18446744073709551615n}catch{return!1}},"Invalid u64")),bt=(0,m.object)({objectId:vn,version:we,digest:(0,m.string)()}),ne=(0,m.pipe)((0,m.union)([(0,m.object)({GasCoin:(0,m.literal)(!0)}),(0,m.object)({Input:(0,m.pipe)((0,m.number)(),(0,m.integer)()),type:(0,m.optional)((0,m.literal)("pure"))}),(0,m.object)({Input:(0,m.pipe)((0,m.number)(),(0,m.integer)()),type:(0,m.optional)((0,m.literal)("object"))}),(0,m.object)({Result:(0,m.pipe)((0,m.number)(),(0,m.integer)())}),(0,m.object)({NestedResult:(0,m.tuple)([(0,m.pipe)((0,m.number)(),(0,m.integer)()),(0,m.pipe)((0,m.number)(),(0,m.integer)())])})]),(0,m.transform)(a=>({...a,$kind:Object.keys(a)[0]}))),bA=(0,m.object)({budget:(0,m.nullable)(we),price:(0,m.nullable)(we),owner:(0,m.nullable)(vn),payment:(0,m.nullable)((0,m.array)(bt))}),Yy=(0,m.object)({address:(0,m.string)(),module:(0,m.string)(),name:(0,m.string)(),typeParams:(0,m.array)((0,m.string)())}),jo=(0,m.union)([(0,m.literal)("address"),(0,m.literal)("bool"),(0,m.literal)("u8"),(0,m.literal)("u16"),(0,m.literal)("u32"),(0,m.literal)("u64"),(0,m.literal)("u128"),(0,m.literal)("u256"),(0,m.object)({vector:(0,m.lazy)(()=>jo)}),(0,m.object)({datatype:(0,m.object)({package:(0,m.string)(),module:(0,m.string)(),type:(0,m.string)(),typeParameters:(0,m.array)((0,m.lazy)(()=>jo))})}),(0,m.object)({typeParameter:(0,m.pipe)((0,m.number)(),(0,m.integer)())})]),yA=(0,m.object)({ref:(0,m.nullable)((0,m.union)([(0,m.literal)("&"),(0,m.literal)("&mut")])),body:jo}),CA=(0,m.object)({package:Pe,module:(0,m.string)(),function:(0,m.string)(),typeArguments:(0,m.array)((0,m.string)()),arguments:(0,m.array)(ne),_argumentTypes:(0,m.optional)((0,m.nullable)((0,m.array)(yA)))}),IA=(0,m.object)({name:(0,m.string)(),inputs:(0,m.record)((0,m.string)(),(0,m.union)([ne,(0,m.array)(ne)])),data:(0,m.record)((0,m.string)(),(0,m.unknown)())}),hA=rn({MoveCall:CA,TransferObjects:(0,m.object)({objects:(0,m.array)(ne),address:ne}),SplitCoins:(0,m.object)({coin:ne,amounts:(0,m.array)(ne)}),MergeCoins:(0,m.object)({destination:ne,sources:(0,m.array)(ne)}),Publish:(0,m.object)({modules:(0,m.array)(an),dependencies:(0,m.array)(Pe)}),MakeMoveVec:(0,m.object)({type:(0,m.nullable)((0,m.string)()),elements:(0,m.array)(ne)}),Upgrade:(0,m.object)({modules:(0,m.array)(an),dependencies:(0,m.array)(Pe),package:Pe,ticket:ne}),$Intent:IA}),Pd=rn({ImmOrOwnedObject:bt,SharedObject:(0,m.object)({objectId:Pe,initialSharedVersion:we,mutable:(0,m.boolean)()}),Receiving:bt}),vA=rn({Object:Pd,Pure:(0,m.object)({bytes:an}),UnresolvedPure:(0,m.object)({value:(0,m.unknown)()}),UnresolvedObject:(0,m.object)({objectId:Pe,version:(0,m.optional)((0,m.nullable)(we)),digest:(0,m.optional)((0,m.nullable)((0,m.string)())),initialSharedVersion:(0,m.optional)((0,m.nullable)(we))})}),ko=rn({Object:Pd,Pure:(0,m.object)({bytes:an})}),Ho=rn({None:(0,m.literal)(!0),Epoch:we}),Kn=(0,m.object)({version:(0,m.literal)(2),sender:(0,m.nullish)(vn),expiration:(0,m.nullish)(Ho),gasData:bA,inputs:(0,m.array)(vA),commands:(0,m.array)(hA)});var $e={MoveCall(a){let[n,i="",r=""]="target"in a?a.target.split("::"):[a.package,a.module,a.function];return{$kind:"MoveCall",MoveCall:{package:n,module:i,function:r,typeArguments:a.typeArguments??[],arguments:a.arguments??[]}}},TransferObjects(a,n){return{$kind:"TransferObjects",TransferObjects:{objects:a.map(i=>(0,yt.parse)(ne,i)),address:(0,yt.parse)(ne,n)}}},SplitCoins(a,n){return{$kind:"SplitCoins",SplitCoins:{coin:(0,yt.parse)(ne,a),amounts:n.map(i=>(0,yt.parse)(ne,i))}}},MergeCoins(a,n){return{$kind:"MergeCoins",MergeCoins:{destination:(0,yt.parse)(ne,a),sources:n.map(i=>(0,yt.parse)(ne,i))}}},Publish({modules:a,dependencies:n}){return{$kind:"Publish",Publish:{modules:a.map(i=>typeof i=="string"?i:(0,Jo.toBase64)(new Uint8Array(i))),dependencies:n.map(i=>Je(i))}}},Upgrade({modules:a,dependencies:n,package:i,ticket:r}){return{$kind:"Upgrade",Upgrade:{modules:a.map(o=>typeof o=="string"?o:(0,Jo.toBase64)(new Uint8Array(o))),dependencies:n.map(o=>Je(o)),package:i,ticket:(0,yt.parse)(ne,r)}}},MakeMoveVec({type:a,elements:n}){return{$kind:"MakeMoveVec",MakeMoveVec:{type:a??null,elements:n.map(i=>(0,yt.parse)(ne,i))}}},Intent({name:a,inputs:n={},data:i={}}){return{$kind:"$Intent",$Intent:{name:a,inputs:Object.fromEntries(Object.entries(n).map(([r,o])=>[r,Array.isArray(o)?o.map(s=>(0,yt.parse)(ne,s)):(0,yt.parse)(ne,o)])),data:i}}}};var Qn=require("@mysten/bcs"),wt=require("valibot");ze();var on=require("@mysten/bcs"),p=require("valibot");Re();var zo=(0,p.object)({digest:(0,p.string)(),objectId:(0,p.string)(),version:(0,p.union)([(0,p.pipe)((0,p.number)(),(0,p.integer)()),(0,p.string)(),(0,p.bigint)()])}),RA=rn({ImmOrOwned:zo,Shared:(0,p.object)({objectId:Pe,initialSharedVersion:we,mutable:(0,p.boolean)()}),Receiving:zo}),Ld=rn({Object:RA,Pure:(0,p.array)((0,p.pipe)((0,p.number)(),(0,p.integer)()))}),kd=(0,p.union)([(0,p.object)({kind:(0,p.literal)("Input"),index:(0,p.pipe)((0,p.number)(),(0,p.integer)()),value:(0,p.unknown)(),type:(0,p.optional)((0,p.literal)("object"))}),(0,p.object)({kind:(0,p.literal)("Input"),index:(0,p.pipe)((0,p.number)(),(0,p.integer)()),value:(0,p.unknown)(),type:(0,p.literal)("pure")})]),fA=(0,p.union)([(0,p.object)({Epoch:(0,p.pipe)((0,p.number)(),(0,p.integer)())}),(0,p.object)({None:(0,p.nullable)((0,p.literal)(!0))})]),jd=(0,p.pipe)((0,p.union)([(0,p.number)(),(0,p.string)(),(0,p.bigint)()]),(0,p.check)(a=>{if(!["string","number","bigint"].includes(typeof a))return!1;try{return BigInt(a),!0}catch{return!1}})),xo=(0,p.union)([(0,p.object)({bool:(0,p.nullable)((0,p.literal)(!0))}),(0,p.object)({u8:(0,p.nullable)((0,p.literal)(!0))}),(0,p.object)({u64:(0,p.nullable)((0,p.literal)(!0))}),(0,p.object)({u128:(0,p.nullable)((0,p.literal)(!0))}),(0,p.object)({address:(0,p.nullable)((0,p.literal)(!0))}),(0,p.object)({signer:(0,p.nullable)((0,p.literal)(!0))}),(0,p.object)({vector:(0,p.lazy)(()=>xo)}),(0,p.object)({struct:(0,p.lazy)(()=>YA)}),(0,p.object)({u16:(0,p.nullable)((0,p.literal)(!0))}),(0,p.object)({u32:(0,p.nullable)((0,p.literal)(!0))}),(0,p.object)({u256:(0,p.nullable)((0,p.literal)(!0))})]),YA=(0,p.object)({address:(0,p.string)(),module:(0,p.string)(),name:(0,p.string)(),typeParams:(0,p.array)(xo)}),BA=(0,p.object)({budget:(0,p.optional)(jd),price:(0,p.optional)(jd),payment:(0,p.optional)((0,p.array)(zo)),owner:(0,p.optional)((0,p.string)())}),WA=[kd,(0,p.object)({kind:(0,p.literal)("GasCoin")}),(0,p.object)({kind:(0,p.literal)("Result"),index:(0,p.pipe)((0,p.number)(),(0,p.integer)())}),(0,p.object)({kind:(0,p.literal)("NestedResult"),index:(0,p.pipe)((0,p.number)(),(0,p.integer)()),resultIndex:(0,p.pipe)((0,p.number)(),(0,p.integer)())})],zt=(0,p.union)([...WA]),TA=(0,p.object)({kind:(0,p.literal)("MoveCall"),target:(0,p.pipe)((0,p.string)(),(0,p.check)(a=>a.split("::").length===3)),typeArguments:(0,p.array)((0,p.string)()),arguments:(0,p.array)(zt)}),FA=(0,p.object)({kind:(0,p.literal)("TransferObjects"),objects:(0,p.array)(zt),address:zt}),NA=(0,p.object)({kind:(0,p.literal)("SplitCoins"),coin:zt,amounts:(0,p.array)(zt)}),wA=(0,p.object)({kind:(0,p.literal)("MergeCoins"),destination:zt,sources:(0,p.array)(zt)}),GA=(0,p.object)({kind:(0,p.literal)("MakeMoveVec"),type:(0,p.union)([(0,p.object)({Some:xo}),(0,p.object)({None:(0,p.nullable)((0,p.literal)(!0))})]),objects:(0,p.array)(zt)}),ZA=(0,p.object)({kind:(0,p.literal)("Publish"),modules:(0,p.array)((0,p.array)((0,p.pipe)((0,p.number)(),(0,p.integer)()))),dependencies:(0,p.array)((0,p.string)())}),SA=(0,p.object)({kind:(0,p.literal)("Upgrade"),modules:(0,p.array)((0,p.array)((0,p.pipe)((0,p.number)(),(0,p.integer)()))),dependencies:(0,p.array)((0,p.string)()),packageId:(0,p.string)(),ticket:zt}),VA=[TA,FA,NA,wA,ZA,SA,GA],XA=(0,p.union)([...VA]),Gy=(0,p.object)({version:(0,p.literal)(1),sender:(0,p.optional)((0,p.string)()),expiration:(0,p.nullish)(fA),gasConfig:BA,inputs:(0,p.array)(kd),transactions:(0,p.array)(XA)});function Oo(a){let n=a.inputs.map((i,r)=>{if(i.Object)return{kind:"Input",index:r,value:{Object:i.Object.ImmOrOwnedObject?{ImmOrOwned:i.Object.ImmOrOwnedObject}:i.Object.Receiving?{Receiving:{digest:i.Object.Receiving.digest,version:i.Object.Receiving.version,objectId:i.Object.Receiving.objectId}}:{Shared:{mutable:i.Object.SharedObject.mutable,initialSharedVersion:i.Object.SharedObject.initialSharedVersion,objectId:i.Object.SharedObject.objectId}}},type:"object"};if(i.Pure)return{kind:"Input",index:r,value:{Pure:Array.from((0,on.fromBase64)(i.Pure.bytes))},type:"pure"};if(i.UnresolvedPure)return{kind:"Input",type:"pure",index:r,value:i.UnresolvedPure.value};if(i.UnresolvedObject)return{kind:"Input",type:"object",index:r,value:i.UnresolvedObject.objectId};throw new Error("Invalid input")});return{version:1,sender:a.sender??void 0,expiration:a.expiration?.$kind==="Epoch"?{Epoch:Number(a.expiration.Epoch)}:a.expiration?{None:!0}:null,gasConfig:{owner:a.gasData.owner??void 0,budget:a.gasData.budget??void 0,price:a.gasData.price??void 0,payment:a.gasData.payment??void 0},inputs:n,transactions:a.commands.map(i=>{if(i.MakeMoveVec)return{kind:"MakeMoveVec",type:i.MakeMoveVec.type===null?{None:!0}:{Some:kt.parseFromStr(i.MakeMoveVec.type)},objects:i.MakeMoveVec.elements.map(r=>Ht(r,n))};if(i.MergeCoins)return{kind:"MergeCoins",destination:Ht(i.MergeCoins.destination,n),sources:i.MergeCoins.sources.map(r=>Ht(r,n))};if(i.MoveCall)return{kind:"MoveCall",target:`${i.MoveCall.package}::${i.MoveCall.module}::${i.MoveCall.function}`,typeArguments:i.MoveCall.typeArguments,arguments:i.MoveCall.arguments.map(r=>Ht(r,n))};if(i.Publish)return{kind:"Publish",modules:i.Publish.modules.map(r=>Array.from((0,on.fromBase64)(r))),dependencies:i.Publish.dependencies};if(i.SplitCoins)return{kind:"SplitCoins",coin:Ht(i.SplitCoins.coin,n),amounts:i.SplitCoins.amounts.map(r=>Ht(r,n))};if(i.TransferObjects)return{kind:"TransferObjects",objects:i.TransferObjects.objects.map(r=>Ht(r,n)),address:Ht(i.TransferObjects.address,n)};if(i.Upgrade)return{kind:"Upgrade",modules:i.Upgrade.modules.map(r=>Array.from((0,on.fromBase64)(r))),dependencies:i.Upgrade.dependencies,packageId:i.Upgrade.package,ticket:Ht(i.Upgrade.ticket,n)};throw new Error(`Unknown transaction ${Object.keys(i)}`)})}}function Ht(a,n){if(a.$kind==="GasCoin")return{kind:"GasCoin"};if(a.$kind==="Result")return{kind:"Result",index:a.Result};if(a.$kind==="NestedResult")return{kind:"NestedResult",index:a.NestedResult[0],resultIndex:a.NestedResult[1]};if(a.$kind==="Input")return n[a.Input];throw new Error(`Invalid argument ${Object.keys(a)}`)}function Hd(a){return(0,p.parse)(Kn,{version:2,sender:a.sender??null,expiration:a.expiration?"Epoch"in a.expiration?{Epoch:a.expiration.Epoch}:{None:!0}:null,gasData:{owner:a.gasConfig.owner??null,budget:a.gasConfig.budget?.toString()??null,price:a.gasConfig.price?.toString()??null,payment:a.gasConfig.payment?.map(n=>({digest:n.digest,objectId:n.objectId,version:n.version.toString()}))??null},inputs:a.inputs.map(n=>{if(n.kind==="Input"){if((0,p.is)(Ld,n.value)){let i=(0,p.parse)(Ld,n.value);if(i.Object){if(i.Object.ImmOrOwned)return{Object:{ImmOrOwnedObject:{objectId:i.Object.ImmOrOwned.objectId,version:String(i.Object.ImmOrOwned.version),digest:i.Object.ImmOrOwned.digest}}};if(i.Object.Shared)return{Object:{SharedObject:{mutable:i.Object.Shared.mutable??null,initialSharedVersion:i.Object.Shared.initialSharedVersion,objectId:i.Object.Shared.objectId}}};if(i.Object.Receiving)return{Object:{Receiving:{digest:i.Object.Receiving.digest,version:String(i.Object.Receiving.version),objectId:i.Object.Receiving.objectId}}};throw new Error("Invalid object input")}return{Pure:{bytes:(0,on.toBase64)(new Uint8Array(i.Pure))}}}return n.type==="object"?{UnresolvedObject:{objectId:n.value}}:{UnresolvedPure:{value:n.value}}}throw new Error("Invalid input")}),commands:a.transactions.map(n=>{switch(n.kind){case"MakeMoveVec":return{MakeMoveVec:{type:"Some"in n.type?kt.tagToString(n.type.Some):null,elements:n.objects.map(i=>Jt(i))}};case"MergeCoins":return{MergeCoins:{destination:Jt(n.destination),sources:n.sources.map(i=>Jt(i))}};case"MoveCall":{let[i,r,o]=n.target.split("::");return{MoveCall:{package:i,module:r,function:o,typeArguments:n.typeArguments,arguments:n.arguments.map(s=>Jt(s))}}}case"Publish":return{Publish:{modules:n.modules.map(i=>(0,on.toBase64)(Uint8Array.from(i))),dependencies:n.dependencies}};case"SplitCoins":return{SplitCoins:{coin:Jt(n.coin),amounts:n.amounts.map(i=>Jt(i))}};case"TransferObjects":return{TransferObjects:{objects:n.objects.map(i=>Jt(i)),address:Jt(n.address)}};case"Upgrade":return{Upgrade:{modules:n.modules.map(i=>(0,on.toBase64)(Uint8Array.from(i))),dependencies:n.dependencies,package:n.packageId,ticket:Jt(n.ticket)}}}throw new Error(`Unknown transaction ${Object.keys(n)}`)})})}function Jt(a){switch(a.kind){case"GasCoin":return{GasCoin:!0};case"Result":return{Result:a.index};case"NestedResult":return{NestedResult:[a.index,a.resultIndex]};case"Input":return{Input:a.index}}}var B=require("valibot");function Hi(a){return(0,B.union)(Object.entries(a).map(([n,i])=>(0,B.object)({[n]:i})))}var Ct=Hi({GasCoin:(0,B.literal)(!0),Input:(0,B.pipe)((0,B.number)(),(0,B.integer)()),Result:(0,B.pipe)((0,B.number)(),(0,B.integer)()),NestedResult:(0,B.tuple)([(0,B.pipe)((0,B.number)(),(0,B.integer)()),(0,B.pipe)((0,B.number)(),(0,B.integer)())])}),MA=(0,B.object)({budget:(0,B.nullable)(we),price:(0,B.nullable)(we),owner:(0,B.nullable)(vn),payment:(0,B.nullable)((0,B.array)(bt))}),PA=(0,B.object)({package:Pe,module:(0,B.string)(),function:(0,B.string)(),typeArguments:(0,B.array)((0,B.string)()),arguments:(0,B.array)(Ct)}),LA=(0,B.object)({name:(0,B.string)(),inputs:(0,B.record)((0,B.string)(),(0,B.union)([Ct,(0,B.array)(Ct)])),data:(0,B.record)((0,B.string)(),(0,B.unknown)())}),jA=Hi({MoveCall:PA,TransferObjects:(0,B.object)({objects:(0,B.array)(Ct),address:Ct}),SplitCoins:(0,B.object)({coin:Ct,amounts:(0,B.array)(Ct)}),MergeCoins:(0,B.object)({destination:Ct,sources:(0,B.array)(Ct)}),Publish:(0,B.object)({modules:(0,B.array)(an),dependencies:(0,B.array)(Pe)}),MakeMoveVec:(0,B.object)({type:(0,B.nullable)((0,B.string)()),elements:(0,B.array)(Ct)}),Upgrade:(0,B.object)({modules:(0,B.array)(an),dependencies:(0,B.array)(Pe),package:Pe,ticket:Ct}),$Intent:LA}),kA=Hi({ImmOrOwnedObject:bt,SharedObject:(0,B.object)({objectId:Pe,initialSharedVersion:we,mutable:(0,B.boolean)()}),Receiving:bt}),HA=Hi({Object:kA,Pure:(0,B.object)({bytes:an}),UnresolvedPure:(0,B.object)({value:(0,B.unknown)()}),UnresolvedObject:(0,B.object)({objectId:Pe,version:(0,B.optional)((0,B.nullable)(we)),digest:(0,B.optional)((0,B.nullable)((0,B.string)())),initialSharedVersion:(0,B.optional)((0,B.nullable)(we))})}),JA=Hi({None:(0,B.literal)(!0),Epoch:we}),Jd=(0,B.object)({version:(0,B.literal)(2),sender:(0,B.nullish)(vn),expiration:(0,B.nullish)(JA),gasData:MA,inputs:(0,B.array)(HA),commands:(0,B.array)(jA)});var xd=require("valibot");Re();var zA=50,xA=1000n,OA=5e10;async function Od(a,n,i){return await EA(a,n),await DA(a,n),n.onlyTransactionKind||(await UA(a,n),await KA(a,n),await QA(a,n)),await _A(a),await i()}async function UA(a,n){a.gasConfig.price||(a.gasConfig.price=String(await Rn(n).getReferenceGasPrice()))}async function KA(a,n){if(a.gasConfig.budget)return;let i=await Rn(n).dryRunTransactionBlock({transactionBlock:a.build({overrides:{gasData:{budget:String(OA),payment:[]}}})});if(i.effects.status.status!=="success")throw new Error(`Dry run failed, could not automatically determine a budget: ${i.effects.status.error}`,{cause:i});let r=xA*BigInt(a.gasConfig.price||1n),o=BigInt(i.effects.gasUsed.computationCost)+r,s=o+BigInt(i.effects.gasUsed.storageCost)-BigInt(i.effects.gasUsed.storageRebate);a.gasConfig.budget=String(s>o?s:o)}async function QA(a,n){if(!a.gasConfig.payment){let r=(await Rn(n).getCoins({owner:a.gasConfig.owner||a.sender,coinType:Lo})).data.filter(o=>!a.inputs.find(d=>d.Object?.ImmOrOwnedObject?o.coinObjectId===d.Object.ImmOrOwnedObject.objectId:!1)).map(o=>({objectId:o.coinObjectId,digest:o.digest,version:o.version}));if(!r.length)throw new Error("No valid gas coins found for the transaction.");a.gasConfig.payment=r.map(o=>(0,xd.parse)(bt,o))}}async function DA(a,n){let i=a.inputs.filter(l=>l.UnresolvedObject&&!(l.UnresolvedObject.version||l.UnresolvedObject?.initialSharedVersion)),r=[...new Set(i.map(l=>Je(l.UnresolvedObject.objectId)))],o=r.length?tl(r,zA):[],s=(await Promise.all(o.map(l=>Rn(n).multiGetObjects({ids:l,options:{showOwner:!0}})))).flat(),d=new Map(r.map((l,u)=>[l,s[u]])),c=Array.from(d).filter(([l,u])=>u.error).map(([l,u])=>JSON.stringify(u.error));if(c.length)throw new Error(`The following input objects are invalid: ${c.join(", ")}`);let g=s.map(l=>{if(l.error||!l.data)throw new Error(`Failed to fetch object: ${l.error}`);let u=l.data.owner,y=u&&typeof u=="object"&&"Shared"in u?u.Shared.initial_shared_version:null;return{objectId:l.data.objectId,digest:l.data.digest,version:l.data.version,initialSharedVersion:y}}),A=new Map(r.map((l,u)=>[l,g[u]]));for(let[l,u]of a.inputs.entries()){if(!u.UnresolvedObject)continue;let y,C=j(u.UnresolvedObject.objectId),Y=A.get(C);u.UnresolvedObject.initialSharedVersion??Y?.initialSharedVersion?y=Oe.SharedObjectRef({objectId:C,initialSharedVersion:u.UnresolvedObject.initialSharedVersion||Y?.initialSharedVersion,mutable:$A(a,l)}):qA(a,l)&&(y=Oe.ReceivingRef({objectId:C,digest:u.UnresolvedObject.digest??Y?.digest,version:u.UnresolvedObject.version??Y?.version})),a.inputs[a.inputs.indexOf(u)]=y??Oe.ObjectRef({objectId:C,digest:u.UnresolvedObject.digest??Y?.digest,version:u.UnresolvedObject.version??Y?.version})}}async function EA(a,n){let{inputs:i,commands:r}=a,o=[],s=new Set;r.forEach(c=>{if(c.MoveCall){if(c.MoveCall._argumentTypes)return;if(c.MoveCall.arguments.map(l=>l.$kind==="Input"?a.inputs[l.Input]:null).some(l=>l?.UnresolvedPure||l?.UnresolvedObject)){let l=`${c.MoveCall.package}::${c.MoveCall.module}::${c.MoveCall.function}`;s.add(l),o.push(c.MoveCall)}}switch(c.$kind){case"SplitCoins":c.SplitCoins.amounts.forEach(g=>{zd(g,v.U64,a)});break;case"TransferObjects":zd(c.TransferObjects.address,v.Address,a);break}});let d=new Map;if(s.size>0){let c=Rn(n);await Promise.all([...s].map(async g=>{let[A,l,u]=g.split("::"),y=await c.getNormalizedMoveFunction({package:A,module:l,function:u});d.set(g,y.parameters.map(C=>Xd(C)))}))}o.length&&await Promise.all(o.map(async c=>{let g=d.get(`${c.package}::${c.module}::${c.function}`);if(!g)return;let l=g.length>0&&Vd(g.at(-1))?g.slice(0,g.length-1):g;c._argumentTypes=l})),r.forEach(c=>{if(!c.MoveCall)return;let g=c.MoveCall,A=`${g.package}::${g.module}::${g.function}`,l=g._argumentTypes;if(l){if(l.length!==c.MoveCall.arguments.length)throw new Error(`Incorrect number of arguments for ${A}`);l.forEach((u,y)=>{let C=g.arguments[y];if(C.$kind!=="Input")return;let Y=i[C.Input];if(!Y.UnresolvedPure&&!Y.UnresolvedObject)return;let W=Y.UnresolvedPure?.value??Y.UnresolvedObject?.objectId,F=xa(u.body);if(F){C.type="pure",i[i.indexOf(Y)]=Oe.Pure(F.serialize(W));return}if(typeof W!="string")throw new Error(`Expect the argument to be an object id string, got ${JSON.stringify(W,null,2)}`);C.type="object";let w=Y.UnresolvedPure?{$kind:"UnresolvedObject",UnresolvedObject:{objectId:W}}:Y;i[C.Input]=w})}})}function _A(a){a.inputs.forEach((n,i)=>{if(n.$kind!=="Object"&&n.$kind!=="Pure")throw new Error(`Input at index ${i} has not been resolved. Expected a Pure or Object input, but found ${JSON.stringify(n)}`)})}function zd(a,n,i){if(a.$kind!=="Input")return;let r=i.inputs[a.Input];r.$kind==="UnresolvedPure"&&(i.inputs[a.Input]=Oe.Pure(n.serialize(r.UnresolvedPure.value)))}function $A(a,n){let i=!1;return a.getInputUses(n,(r,o)=>{if(o.MoveCall&&o.MoveCall._argumentTypes){let s=o.MoveCall.arguments.indexOf(r);i=o.MoveCall._argumentTypes[s].ref!=="&"||i}(o.$kind==="MakeMoveVec"||o.$kind==="MergeCoins"||o.$kind==="SplitCoins")&&(i=!0)}),i}function qA(a,n){let i=!1;return a.getInputUses(n,(r,o)=>{if(o.MoveCall&&o.MoveCall._argumentTypes){let s=o.MoveCall.arguments.indexOf(r);i=el(o.MoveCall._argumentTypes[s])||i}}),i}function el(a){return typeof a.body!="object"||!("datatype"in a.body)?!1:a.body.datatype.package==="0x2"&&a.body.datatype.module==="transfer"&&a.body.datatype.type==="Receiving"}function Rn(a){if(!a.client)throw new Error("No sui client passed to Transaction#build, but transaction data was not sufficient to build offline.");return a.client}function tl(a,n){return Array.from({length:Math.ceil(a.length/n)},(i,r)=>a.slice(r*n,r*n+n))}function Ud(a){function n(i){return a(i)}return n.system=()=>n("0x5"),n.clock=()=>n("0x6"),n.random=()=>n("0x8"),n.denyList=()=>n("0x403"),n.option=({type:i,value:r})=>o=>o.moveCall({typeArguments:[i],target:`0x1::option::${r===null?"none":"some"}`,arguments:r===null?[]:[o.object(r)]}),n}var Kd=require("@mysten/bcs");Re();function Qd(a){function n(i,r){if(typeof i=="string")return a(Ji(i).serialize(r));if(i instanceof Uint8Array||(0,Kd.isSerializedBcs)(i))return a(i);throw new Error("tx.pure must be called either a bcs type name, or a serialized bcs value")}return n.u8=i=>a(v.U8.serialize(i)),n.u16=i=>a(v.U16.serialize(i)),n.u32=i=>a(v.U32.serialize(i)),n.u64=i=>a(v.U64.serialize(i)),n.u128=i=>a(v.U128.serialize(i)),n.u256=i=>a(v.U256.serialize(i)),n.bool=i=>a(v.Bool.serialize(i)),n.string=i=>a(v.String.serialize(i)),n.address=i=>a(v.Address.serialize(i)),n.id=n.address,n.vector=(i,r)=>a(v.vector(Ji(i)).serialize(r)),n.option=(i,r)=>a(v.option(Ji(i)).serialize(r)),n}function Ji(a){switch(a){case"u8":return v.u8();case"u16":return v.u16();case"u32":return v.u32();case"u64":return v.u64();case"u128":return v.u128();case"u256":return v.u256();case"bool":return v.bool();case"string":return v.string();case"id":case"address":return v.Address}let n=a.match(/^(vector|option)<(.+)>$/);if(n){let[i,r]=n.slice(1);return i==="vector"?v.vector(Ji(r)):v.option(Ji(r))}throw new Error(`Invalid Pure type name: ${a}`)}var $d=require("@mysten/bcs"),Oa=require("valibot");Re();ze();var Dd=require("@noble/hashes/blake2b");function Ed(a,n){let i=Array.from(`${a}::`).map(o=>o.charCodeAt(0)),r=new Uint8Array(i.length+n.length);return r.set(i),r.set(n,i.length),(0,Dd.blake2b)(r,{dkLen:32})}function _d(a){return j(a).replace("0x","")}var sn=class a{constructor(n){this.version=2,this.sender=n?.sender??null,this.expiration=n?.expiration??null,this.inputs=n?.inputs??[],this.commands=n?.commands??[],this.gasData=n?.gasData??{budget:null,price:null,owner:null,payment:null}}static fromKindBytes(n){let r=v.TransactionKind.parse(n).ProgrammableTransaction;if(!r)throw new Error("Unable to deserialize from bytes.");return a.restore({version:2,sender:null,expiration:null,gasData:{budget:null,owner:null,payment:null,price:null},inputs:r.inputs,commands:r.commands})}static fromBytes(n){let r=v.TransactionData.parse(n)?.V1,o=r.kind.ProgrammableTransaction;if(!r||!o)throw new Error("Unable to deserialize from bytes.");return a.restore({version:2,sender:r.sender,expiration:r.expiration,gasData:r.gasData,inputs:o.inputs,commands:o.commands})}static restore(n){return n.version===2?new a((0,Oa.parse)(Kn,n)):new a((0,Oa.parse)(Kn,Hd(n)))}static getDigestFromBytes(n){let i=Ed("TransactionData",n);return(0,$d.toBase58)(i)}get gasConfig(){return this.gasData}set gasConfig(n){this.gasData=n}build({maxSizeBytes:n=1/0,overrides:i,onlyTransactionKind:r}={}){let o=this.inputs,s=this.commands,d={ProgrammableTransaction:{inputs:o,commands:s}};if(r)return v.TransactionKind.serialize(d,{maxSize:n}).toBytes();let c=i?.expiration??this.expiration,g=i?.sender??this.sender,A={...this.gasData,...i?.gasConfig,...i?.gasData};if(!g)throw new Error("Missing transaction sender");if(!A.budget)throw new Error("Missing gas budget");if(!A.payment)throw new Error("Missing gas payment");if(!A.price)throw new Error("Missing gas price");let l={sender:_d(g),expiration:c||{None:!0},gasData:{payment:A.payment,owner:_d(this.gasData.owner??g),price:BigInt(A.price),budget:BigInt(A.budget)},kind:{ProgrammableTransaction:{inputs:o,commands:s}}};return v.TransactionData.serialize({V1:l},{maxSize:n}).toBytes()}addInput(n,i){let r=this.inputs.length;return this.inputs.push(i),{Input:r,type:n,$kind:"Input"}}getInputUses(n,i){this.mapArguments((r,o)=>(r.$kind==="Input"&&r.Input===n&&i(r,o),r))}mapArguments(n){for(let i of this.commands)switch(i.$kind){case"MoveCall":i.MoveCall.arguments=i.MoveCall.arguments.map(o=>n(o,i));break;case"TransferObjects":i.TransferObjects.objects=i.TransferObjects.objects.map(o=>n(o,i)),i.TransferObjects.address=n(i.TransferObjects.address,i);break;case"SplitCoins":i.SplitCoins.coin=n(i.SplitCoins.coin,i),i.SplitCoins.amounts=i.SplitCoins.amounts.map(o=>n(o,i));break;case"MergeCoins":i.MergeCoins.destination=n(i.MergeCoins.destination,i),i.MergeCoins.sources=i.MergeCoins.sources.map(o=>n(o,i));break;case"MakeMoveVec":i.MakeMoveVec.elements=i.MakeMoveVec.elements.map(o=>n(o,i));break;case"Upgrade":i.Upgrade.ticket=n(i.Upgrade.ticket,i);break;case"$Intent":let r=i.$Intent.inputs;i.$Intent.inputs={};for(let[o,s]of Object.entries(r))i.$Intent.inputs[o]=Array.isArray(s)?s.map(d=>n(d,i)):n(s,i);break;case"Publish":break;default:throw new Error(`Unexpected transaction kind: ${i.$kind}`)}}replaceCommand(n,i){if(!Array.isArray(i)){this.commands[n]=i;return}let r=i.length-1;this.commands.splice(n,1,...i),r!==0&&this.mapArguments(o=>{switch(o.$kind){case"Result":o.Result>n&&(o.Result+=r);break;case"NestedResult":o.NestedResult[0]>n&&(o.NestedResult[0]+=r);break}return o})}getDigest(){let n=this.build({onlyTransactionKind:!1});return a.getDigestFromBytes(n)}snapshot(){return(0,Oa.parse)(Kn,this)}};ze();function Uo(a){if(typeof a=="string")return j(a);if(a.Object)return a.Object.ImmOrOwnedObject?j(a.Object.ImmOrOwnedObject.objectId):a.Object.Receiving?j(a.Object.Receiving.objectId):j(a.Object.SharedObject.objectId);if(a.UnresolvedObject)return j(a.UnresolvedObject.objectId)}var tc=a=>{throw TypeError(a)},Eo=(a,n,i)=>n.has(a)||tc("Cannot "+i),U=(a,n,i)=>(Eo(a,n,"read from private field"),i?i.call(a):n.get(a)),zi=(a,n,i)=>n.has(a)?tc("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(a):n.set(a,i),fn=(a,n,i,r)=>(Eo(a,n,"write to private field"),r?r.call(a,i):n.set(a,i),i),xt=(a,n,i)=>(Eo(a,n,"access private method"),i),Oi,Ui,Yn,_,It,Ua,_o,Qo,$o;function qd(a,n=1/0){let i={$kind:"Result",Result:a},r=[],o=s=>r[s]??(r[s]={$kind:"NestedResult",NestedResult:[a,s]});return new Proxy(i,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(s,d){if(d in s)return Reflect.get(s,d);if(d===Symbol.iterator)return function*(){let g=0;for(;g<n;)yield o(g),g++};if(typeof d=="symbol")return;let c=parseInt(d,10);if(!(Number.isNaN(c)||c<0))return o(c)}})}var nc=Symbol.for("@mysten/transaction");function Ka(a){return!!a&&typeof a=="object"&&a[nc]===!0}var ec={buildPlugins:new Map,serializationPlugins:new Map},Ko=Symbol.for("@mysten/transaction/registry");function xi(){try{let a=globalThis;return a[Ko]||(a[Ko]=ec),a[Ko]}catch{return ec}}var nl=class Do{constructor(){zi(this,It),zi(this,Oi),zi(this,Ui),zi(this,Yn,new Map),zi(this,_),this.object=Ud(i=>{if(typeof i=="function")return this.object(i(this));if(typeof i=="object"&&(0,wt.is)(ne,i))return i;let r=Uo(i),o=U(this,_).inputs.find(s=>r===Uo(s));return o?.Object?.SharedObject&&typeof i=="object"&&i.Object?.SharedObject&&(o.Object.SharedObject.mutable=o.Object.SharedObject.mutable||i.Object.SharedObject.mutable),o?{$kind:"Input",Input:U(this,_).inputs.indexOf(o),type:"object"}:U(this,_).addInput("object",typeof i=="string"?{$kind:"UnresolvedObject",UnresolvedObject:{objectId:j(i)}}:i)});let n=xi();fn(this,_,new sn),fn(this,Ui,[...n.buildPlugins.values()]),fn(this,Oi,[...n.serializationPlugins.values()])}static fromKind(n){let i=new Do;return fn(i,_,sn.fromKindBytes(typeof n=="string"?(0,Qn.fromBase64)(n):n)),i}static from(n){let i=new Do;return Ka(n)?fn(i,_,new sn(n.getData())):typeof n!="string"||!n.startsWith("{")?fn(i,_,sn.fromBytes(typeof n=="string"?(0,Qn.fromBase64)(n):n)):fn(i,_,sn.restore(JSON.parse(n))),i}static registerGlobalSerializationPlugin(n,i){xi().serializationPlugins.set(n,i??n)}static unregisterGlobalSerializationPlugin(n){xi().serializationPlugins.delete(n)}static registerGlobalBuildPlugin(n,i){xi().buildPlugins.set(n,i??n)}static unregisterGlobalBuildPlugin(n){xi().buildPlugins.delete(n)}addSerializationPlugin(n){U(this,Oi).push(n)}addBuildPlugin(n){U(this,Ui).push(n)}addIntentResolver(n,i){if(U(this,Yn).has(n)&&U(this,Yn).get(n)!==i)throw new Error(`Intent resolver for ${n} already exists`);U(this,Yn).set(n,i)}setSender(n){U(this,_).sender=n}setSenderIfNotSet(n){U(this,_).sender||(U(this,_).sender=n)}setExpiration(n){U(this,_).expiration=n?(0,wt.parse)(Ho,n):null}setGasPrice(n){U(this,_).gasConfig.price=String(n)}setGasBudget(n){U(this,_).gasConfig.budget=String(n)}setGasBudgetIfNotSet(n){U(this,_).gasData.budget==null&&(U(this,_).gasConfig.budget=String(n))}setGasOwner(n){U(this,_).gasConfig.owner=n}setGasPayment(n){U(this,_).gasConfig.payment=n.map(i=>(0,wt.parse)(bt,i))}get blockData(){return Oo(U(this,_).snapshot())}getData(){return U(this,_).snapshot()}get[nc](){return!0}get pure(){return Object.defineProperty(this,"pure",{enumerable:!1,value:Qd(n=>(0,Qn.isSerializedBcs)(n)?U(this,_).addInput("pure",{$kind:"Pure",Pure:{bytes:n.toBase64()}}):U(this,_).addInput("pure",(0,wt.is)(ko,n)?(0,wt.parse)(ko,n):n instanceof Uint8Array?Oe.Pure(n):{$kind:"UnresolvedPure",UnresolvedPure:{value:n}}))}),this.pure}get gas(){return{$kind:"GasCoin",GasCoin:!0}}objectRef(...n){return this.object(Oe.ObjectRef(...n))}receivingRef(...n){return this.object(Oe.ReceivingRef(...n))}sharedObjectRef(...n){return this.object(Oe.SharedObjectRef(...n))}add(n){if(typeof n=="function")return n(this);let i=U(this,_).commands.push(n);return qd(i-1)}splitCoins(n,i){let r=$e.SplitCoins(typeof n=="string"?this.object(n):xt(this,It,_o).call(this,n),i.map(s=>typeof s=="number"||typeof s=="bigint"||typeof s=="string"?this.pure.u64(s):xt(this,It,Ua).call(this,s))),o=U(this,_).commands.push(r);return qd(o-1,i.length)}mergeCoins(n,i){return this.add($e.MergeCoins(this.object(n),i.map(r=>this.object(r))))}publish({modules:n,dependencies:i}){return this.add($e.Publish({modules:n,dependencies:i}))}upgrade({modules:n,dependencies:i,package:r,ticket:o}){return this.add($e.Upgrade({modules:n,dependencies:i,package:r,ticket:this.object(o)}))}moveCall({arguments:n,...i}){return this.add($e.MoveCall({...i,arguments:n?.map(r=>xt(this,It,Ua).call(this,r))}))}transferObjects(n,i){return this.add($e.TransferObjects(n.map(r=>this.object(r)),typeof i=="string"?this.pure.address(i):xt(this,It,Ua).call(this,i)))}makeMoveVec({type:n,elements:i}){return this.add($e.MakeMoveVec({type:n,elements:i.map(r=>this.object(r))}))}serialize(){return JSON.stringify(Oo(U(this,_).snapshot()))}async toJSON(n={}){return await this.prepareForSerialization(n),JSON.stringify((0,wt.parse)(Jd,U(this,_).snapshot()),(i,r)=>typeof r=="bigint"?r.toString():r,2)}async sign(n){let{signer:i,...r}=n,o=await this.build(r);return i.signTransaction(o)}async build(n={}){return await this.prepareForSerialization(n),await xt(this,It,Qo).call(this,n),U(this,_).build({onlyTransactionKind:n.onlyTransactionKind})}async getDigest(n={}){return await xt(this,It,Qo).call(this,n),U(this,_).getDigest()}async prepareForSerialization(n){let i=new Set;for(let o of U(this,_).commands)o.$Intent&&i.add(o.$Intent.name);let r=[...U(this,Oi)];for(let o of i)if(!n.supportedIntents?.includes(o)){if(!U(this,Yn).has(o))throw new Error(`Missing intent resolver for ${o}`);r.push(U(this,Yn).get(o))}await xt(this,It,$o).call(this,r,n)}};Oi=new WeakMap;Ui=new WeakMap;Yn=new WeakMap;_=new WeakMap;It=new WeakSet;Ua=function(a){return(0,Qn.isSerializedBcs)(a)?this.pure(a):xt(this,It,_o).call(this,a)};_o=function(a){return typeof a=="function"?(0,wt.parse)(ne,a(this)):(0,wt.parse)(ne,a)};Qo=async function(a){if(!a.onlyTransactionKind&&!U(this,_).sender)throw new Error("Missing transaction sender");await xt(this,It,$o).call(this,[...U(this,Ui),Od],a)};$o=async function(a,n){let i=r=>{if(r>=a.length)return()=>{};let o=a[r];return async()=>{let s=i(r+1),d=!1,c=!1;if(await o(U(this,_),n,async()=>{if(d)throw new Error(`next() was call multiple times in TransactionPlugin ${r}`);d=!0,await s(),c=!0}),!d)throw new Error(`next() was not called in TransactionPlugin ${r}`);if(!c)throw new Error(`next() was not awaited in TransactionPlugin ${r}`)}};await i(0)()};var Gt=nl;var dn=require("valibot");Re();ze();var Qa="CoinWithBalance",ic=ji("0x2::sui::SUI");function re({type:a=ic,balance:n,useGasCoin:i=!0}){return r=>{r.addIntentResolver(Qa,al);let o=a==="gas"?a:ji(a);return r.add($e.Intent({name:Qa,inputs:{},data:{type:o===ic&&i?"gas":o,balance:BigInt(n)}}))}}var il=(0,dn.object)({type:(0,dn.string)(),balance:(0,dn.bigint)()});async function al(a,n,i){let r=new Set,o=new Map;if(!a.sender)throw new Error("Sender must be set to resolve CoinWithBalance");for(let A of a.commands)if(A.$kind==="$Intent"&&A.$Intent.name===Qa){let{type:l,balance:u}=(0,dn.parse)(il,A.$Intent.data);l!=="gas"&&u>0n&&r.add(l),o.set(l,(o.get(l)??0n)+u)}let s=new Set;for(let A of a.inputs)A.Object?.ImmOrOwnedObject&&s.add(A.Object.ImmOrOwnedObject.objectId),A.UnresolvedObject?.objectId&&s.add(A.UnresolvedObject.objectId);let d=new Map,c=Rn(n);await Promise.all([...r].map(async A=>{d.set(A,await rl({coinType:A,balance:o.get(A),client:c,owner:a.sender,usedIds:s}))}));let g=new Map;g.set("gas",{$kind:"GasCoin",GasCoin:!0});for(let[A,l]of a.commands.entries()){if(l.$kind!=="$Intent"||l.$Intent.name!==Qa)continue;let{type:u,balance:y}=l.$Intent.data;if(y===0n){a.replaceCommand(A,$e.MoveCall({target:"0x2::coin::zero",typeArguments:[u]}));continue}let C=[];if(!g.has(u)){let[Y,...W]=d.get(u).map(F=>a.addInput("object",Oe.ObjectRef({objectId:F.coinObjectId,digest:F.digest,version:F.version})));W.length>0&&C.push($e.MergeCoins(Y,W)),g.set(u,Y)}C.push($e.SplitCoins(g.get(u),[a.addInput("pure",Oe.Pure(v.u64().serialize(y)))])),a.replaceCommand(A,C),a.mapArguments(Y=>Y.$kind==="Result"&&Y.Result===A?{$kind:"NestedResult",NestedResult:[A+C.length-1,0]}:Y)}return i()}async function rl({coinType:a,balance:n,client:i,owner:r,usedIds:o}){let s=n,d=[];return c();async function c(g=null){let{data:A,hasNextPage:l,nextCursor:u}=await i.getCoins({owner:r,coinType:a,cursor:g}),y=A.sort((C,Y)=>Number(BigInt(Y.balance)-BigInt(C.balance)));for(let C of y){if(o.has(C.coinObjectId))continue;let Y=BigInt(C.balance);if(d.push(C),s-=Y,s<=0)return d}if(l)return c(u);throw new Error(`Not enough coins of type ${a} to satisfy requested balance`)}}ze();var ol=Symbol.for("@mysten/SuiClient");var Ut=class{get[ol](){return!0}constructor(n){this.transport=n.transport??new La({url:n.url})}async getRpcApiVersion(){return(await this.transport.request({method:"rpc.discover",params:[]})).info.version}async getCoins(n){if(!n.owner||!Ee(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getCoins",params:[n.owner,n.coinType,n.cursor,n.limit]})}async getAllCoins(n){if(!n.owner||!Ee(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getAllCoins",params:[n.owner,n.cursor,n.limit]})}async getBalance(n){if(!n.owner||!Ee(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getBalance",params:[n.owner,n.coinType]})}async getAllBalances(n){if(!n.owner||!Ee(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getAllBalances",params:[n.owner]})}async getCoinMetadata(n){return await this.transport.request({method:"suix_getCoinMetadata",params:[n.coinType]})}async getTotalSupply(n){return await this.transport.request({method:"suix_getTotalSupply",params:[n.coinType]})}async call(n,i){return await this.transport.request({method:n,params:i})}async getMoveFunctionArgTypes(n){return await this.transport.request({method:"sui_getMoveFunctionArgTypes",params:[n.package,n.module,n.function]})}async getNormalizedMoveModulesByPackage(n){return await this.transport.request({method:"sui_getNormalizedMoveModulesByPackage",params:[n.package]})}async getNormalizedMoveModule(n){return await this.transport.request({method:"sui_getNormalizedMoveModule",params:[n.package,n.module]})}async getNormalizedMoveFunction(n){return await this.transport.request({method:"sui_getNormalizedMoveFunction",params:[n.package,n.module,n.function]})}async getNormalizedMoveStruct(n){return await this.transport.request({method:"sui_getNormalizedMoveStruct",params:[n.package,n.module,n.struct]})}async getOwnedObjects(n){if(!n.owner||!Ee(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getOwnedObjects",params:[n.owner,{filter:n.filter,options:n.options},n.cursor,n.limit]})}async getObject(n){if(!n.id||!On(Je(n.id)))throw new Error("Invalid Sui Object id");return await this.transport.request({method:"sui_getObject",params:[n.id,n.options]})}async tryGetPastObject(n){return await this.transport.request({method:"sui_tryGetPastObject",params:[n.id,n.version,n.options]})}async multiGetObjects(n){if(n.ids.forEach(r=>{if(!r||!On(Je(r)))throw new Error(`Invalid Sui Object id ${r}`)}),n.ids.length!==new Set(n.ids).size)throw new Error(`Duplicate object ids in batch call ${n.ids}`);return await this.transport.request({method:"sui_multiGetObjects",params:[n.ids,n.options]})}async queryTransactionBlocks(n){return await this.transport.request({method:"suix_queryTransactionBlocks",params:[{filter:n.filter,options:n.options},n.cursor,n.limit,(n.order||"descending")==="descending"]})}async getTransactionBlock(n){if(!ka(n.digest))throw new Error("Invalid Transaction digest");return await this.transport.request({method:"sui_getTransactionBlock",params:[n.digest,n.options]})}async multiGetTransactionBlocks(n){if(n.digests.forEach(r=>{if(!ka(r))throw new Error(`Invalid Transaction digest ${r}`)}),n.digests.length!==new Set(n.digests).size)throw new Error(`Duplicate digests in batch call ${n.digests}`);return await this.transport.request({method:"sui_multiGetTransactionBlocks",params:[n.digests,n.options]})}async executeTransactionBlock({transactionBlock:n,signature:i,options:r,requestType:o}){let s=await this.transport.request({method:"sui_executeTransactionBlock",params:[typeof n=="string"?n:(0,Ot.toBase64)(n),Array.isArray(i)?i:[i],r]});if(o==="WaitForLocalExecution")try{await this.waitForTransaction({digest:s.digest})}catch{}return s}async signAndExecuteTransaction({transaction:n,signer:i,...r}){let o;n instanceof Uint8Array?o=n:(n.setSenderIfNotSet(i.toSuiAddress()),o=await n.build({client:this}));let{signature:s,bytes:d}=await i.signTransaction(o);return this.executeTransactionBlock({transactionBlock:d,signature:s,...r})}async getTotalTransactionBlocks(){let n=await this.transport.request({method:"sui_getTotalTransactionBlocks",params:[]});return BigInt(n)}async getReferenceGasPrice(){let n=await this.transport.request({method:"suix_getReferenceGasPrice",params:[]});return BigInt(n)}async getStakes(n){if(!n.owner||!Ee(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getStakes",params:[n.owner]})}async getStakesByIds(n){return n.stakedSuiIds.forEach(i=>{if(!i||!On(Je(i)))throw new Error(`Invalid Sui Stake id ${i}`)}),await this.transport.request({method:"suix_getStakesByIds",params:[n.stakedSuiIds]})}async getLatestSuiSystemState(){return await this.transport.request({method:"suix_getLatestSuiSystemState",params:[]})}async queryEvents(n){return await this.transport.request({method:"suix_queryEvents",params:[n.query,n.cursor,n.limit,(n.order||"descending")==="descending"]})}async subscribeEvent(n){return this.transport.subscribe({method:"suix_subscribeEvent",unsubscribe:"suix_unsubscribeEvent",params:[n.filter],onMessage:n.onMessage})}async subscribeTransaction(n){return this.transport.subscribe({method:"suix_subscribeTransaction",unsubscribe:"suix_unsubscribeTransaction",params:[n.filter],onMessage:n.onMessage})}async devInspectTransactionBlock(n){let i;if(Ka(n.transactionBlock))n.transactionBlock.setSenderIfNotSet(n.sender),i=(0,Ot.toBase64)(await n.transactionBlock.build({client:this,onlyTransactionKind:!0}));else if(typeof n.transactionBlock=="string")i=n.transactionBlock;else if(n.transactionBlock instanceof Uint8Array)i=(0,Ot.toBase64)(n.transactionBlock);else throw new Error("Unknown transaction block format.");return await this.transport.request({method:"sui_devInspectTransactionBlock",params:[n.sender,i,n.gasPrice?.toString(),n.epoch]})}async dryRunTransactionBlock(n){return await this.transport.request({method:"sui_dryRunTransactionBlock",params:[typeof n.transactionBlock=="string"?n.transactionBlock:(0,Ot.toBase64)(n.transactionBlock)]})}async getDynamicFields(n){if(!n.parentId||!On(Je(n.parentId)))throw new Error("Invalid Sui Object id");return await this.transport.request({method:"suix_getDynamicFields",params:[n.parentId,n.cursor,n.limit]})}async getDynamicFieldObject(n){return await this.transport.request({method:"suix_getDynamicFieldObject",params:[n.parentId,n.name]})}async getLatestCheckpointSequenceNumber(){let n=await this.transport.request({method:"sui_getLatestCheckpointSequenceNumber",params:[]});return String(n)}async getCheckpoint(n){return await this.transport.request({method:"sui_getCheckpoint",params:[n.id]})}async getCheckpoints(n){return await this.transport.request({method:"sui_getCheckpoints",params:[n.cursor,n?.limit,n.descendingOrder]})}async getCommitteeInfo(n){return await this.transport.request({method:"suix_getCommitteeInfo",params:[n?.epoch]})}async getNetworkMetrics(){return await this.transport.request({method:"suix_getNetworkMetrics",params:[]})}async getAddressMetrics(){return await this.transport.request({method:"suix_getLatestAddressMetrics",params:[]})}async getEpochMetrics(n){return await this.transport.request({method:"suix_getEpochMetrics",params:[n?.cursor,n?.limit,n?.descendingOrder]})}async getAllEpochAddressMetrics(n){return await this.transport.request({method:"suix_getAllEpochAddressMetrics",params:[n?.descendingOrder]})}async getEpochs(n){return await this.transport.request({method:"suix_getEpochs",params:[n?.cursor,n?.limit,n?.descendingOrder]})}async getMoveCallMetrics(){return await this.transport.request({method:"suix_getMoveCallMetrics",params:[]})}async getCurrentEpoch(){return await this.transport.request({method:"suix_getCurrentEpoch",params:[]})}async getValidatorsApy(){return await this.transport.request({method:"suix_getValidatorsApy",params:[]})}async getChainIdentifier(){let n=await this.getCheckpoint({id:"0"}),i=(0,Ot.fromBase58)(n.digest);return(0,Ot.toHex)(i.slice(0,4))}async resolveNameServiceAddress(n){return await this.transport.request({method:"suix_resolveNameServiceAddress",params:[n.name]})}async resolveNameServiceNames({format:n="dot",...i}){let{nextCursor:r,hasNextPage:o,data:s}=await this.transport.request({method:"suix_resolveNameServiceNames",params:[i.address,i.cursor,i.limit]});return{hasNextPage:o,nextCursor:r,data:s.map(d=>Sd(d,n))}}async getProtocolConfig(n){return await this.transport.request({method:"sui_getProtocolConfig",params:[n?.version]})}async waitForTransaction({signal:n,timeout:i=60*1e3,pollInterval:r=2*1e3,...o}){let s=AbortSignal.timeout(i),d=new Promise((c,g)=>{s.addEventListener("abort",()=>g(s.reason))});for(d.catch(()=>{});!s.aborted;){n?.throwIfAborted();try{return await this.getTransactionBlock(o)}catch{await Promise.race([new Promise(g=>setTimeout(g,r)),d])}}throw s.throwIfAborted(),new Error("Unexpected error while waiting for transaction block.")}};var er=require("big.js");var ds=ce(cn());var Kt=ce(cn());fe();function oc(a,n,i){return a.moveCall({target:`${Kt.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:n,arguments:[P(a,i.bridge),P(a,i.coin),it(a,i.receiveAmountMin,"u64")]})}function sc(a,n,i){return a.moveCall({target:`${Kt.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[n],arguments:[P(a,i.bridge),P(a,i.userDeposit),P(a,i.coin)]})}function dc(a,n,i){return a.moveCall({target:`${Kt.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[n],arguments:[P(a,i.bridge),P(a,i.userDeposit),it(a,i.amountLp,"u64")]})}function cc(a,n,i){return a.moveCall({target:`${Kt.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[n],arguments:[P(a,i.bridge),P(a,i.userDeposit)]})}function gc(a,n,i){return a.moveCall({target:`${Kt.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[n],arguments:[P(a,i)]})}function es(a,n,i){return a.moveCall({target:`${Kt.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[n],arguments:[P(a,i.bridge),P(a,i.messenger),P(a,i.wormholeState),P(a,i.theClock),P(a,i.gasOracle),P(a,i.amount),P(a,i.recipient),it(a,i.destinationChainId,"u8"),P(a,i.receiveToken),it(a,i.nonce,"u256"),P(a,i.feeSuiCoin),P(a,i.feeTokenCoin)]})}function Ac(a,n){return a.moveCall({target:`${Kt.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[n],arguments:[]})}function ts(a,n,i){return a.moveCall({target:`${Kt.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[n],arguments:[P(a,i.bridge),P(a,i.messenger),P(a,i.gasOracle),P(a,i.amount),P(a,i.recipient),it(a,i.destinationChainId,"u8"),P(a,i.receiveToken),it(a,i.nonce,"u256"),P(a,i.feeSuiCoin),P(a,i.feeTokenCoin)]})}var yc=ce(is());var uc=ce(is());fe();function as(a,n,i){return a.moveCall({target:`${uc.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[n],arguments:[P(a,i.cctpBridge),P(a,i.gasOracle),P(a,i.tokenMessengerMinterState),P(a,i.messageTransmitterState),P(a,i.treasury),P(a,i.denyList),P(a,i.amount),P(a,i.feeSuiCoin),P(a,i.feeTokenCoin),it(a,i.destinationChainId,"u8"),P(a,i.recipient),P(a,i.recipientWalletAddress)]})}var Cc=ce(os());var bc=ce(os());Re();fe();Re();fe();var ss=class a{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(n,i){this.$fullTypeName=$(this.$typeName,...n),this.$typeArgs=n,this.elements=i}static reified(n){return{typeName:a.$typeName,fullTypeName:$(a.$typeName,L(n)),typeArgs:[L(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs(Ki(n)),fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),new:i=>new a([L(n)],i),kind:"VectorClassReified"}}static get r(){return a.reified}static get bcs(){return v.vector}static fromFields(n,i){return a.reified(n).new(i.map(r=>K(n,r)))}static fromFieldsWithTypes(n,i){return a.reified(n).new(i.map(r=>J(n,r)))}static fromBcs(n,i){return a.fromFields(n,a.bcs(Ki(n)).parse(i))}toJSONField(){return this.elements.map(n=>Bn(this.$typeArgs[0],n))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new(i.map(r=>z(n,r)))}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a vector json object");return a.fromJSONField(n,i.elements)}};function Dn(a){return ss.r(a)}function le(a){return typeof a=="string"?{phantomType:a,kind:"PhantomReified"}:{phantomType:a.fullTypeName,kind:"PhantomReified"}}var ll=v.bytes(32).transform({input:a=>(0,E.fromHEX)(a),output:a=>(0,E.toHEX)(a)});function Ki(a){switch(a){case"bool":return v.bool();case"u8":return v.u8();case"u16":return v.u16();case"u32":return v.u32();case"u64":return v.u64();case"u128":return v.u128();case"u256":return v.u256();case"address":return ll;default:return a.bcs}}function L(a){switch(a){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return a}switch(a.kind){case"PhantomReified":return a.phantomType;case"StructClassReified":return a.fullTypeName;case"VectorClassReified":return a.fullTypeName}throw new Error("unreachable")}function K(a,n){switch(a){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return`0x${n}`}if(a.kind==="VectorClassReified")return a.fromFields(n).elements;switch(a.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(n.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(n.url.bytes)).toString();case"0x2::object::ID":return`0x${n.bytes}`;case"0x2::object::UID":return`0x${n.id.bytes}`;case"0x1::option::Option":return n.vec.length===0?null:a.fromFields(n).vec[0];default:return a.fromFields(n)}}function J(a,n){switch(a){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return n}if(a.kind==="VectorClassReified")return a.fromFieldsWithTypes(n).elements;switch(a.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return n;case"0x2::object::UID":return n.id;case"0x2::balance::Balance":return a.fromFields({value:BigInt(n)});case"0x1::option::Option":return n===null?null:J(a.reifiedTypeArgs[0],n);default:return a.fromFieldsWithTypes(n)}}function ht(a,n,i){if(i.length!==n.length)throw new Error(`provided item has mismatching number of type argments ${a} (expected ${i.length}, got ${n.length}))`);for(let r=0;r<n.length;r++)if(S(n[r])!==S(L(i[r])))throw new Error(`provided item has mismatching type argments ${a} (expected ${L(i[r])}, got ${n[r]}))`)}function Zt(a,n){let{typeArgs:i}=Ge(a.type);ht(a.type,i,n)}function Bn(a,n){let{typeName:i,typeArgs:r}=Ge(a);switch(i){case"bool":return n;case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return n.toString();case"address":case"signer":return n;case"vector":return n.map(o=>Bn(r[0],o));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return n;case"0x1::option::Option":return n===null?null:Bn(r[0],n);default:return n.toJSONField()}}function z(a,n){switch(a){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return n}if(a.kind==="VectorClassReified")return a.fromJSONField(n).elements;switch(a.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return n;case"0x1::option::Option":return n===null?null:z(a.reifiedTypeArgs[0],n);default:return a.fromJSONField(n)}}fe();var Da="0x1";fe();Re();function Ea(a){return a=S(a),a===`${Da}::string::String`}var _a=class a{__StructClass=!0;static get $typeName(){return`${Da}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;bytes;constructor(n,i){this.$fullTypeName=$(a.$typeName,...n),this.$typeArgs=n,this.bytes=i.bytes}static reified(){return{typeName:a.$typeName,fullTypeName:$(a.$typeName),typeArgs:[],isPhantom:a.$isPhantom,reifiedTypeArgs:[],fromFields:n=>a.fromFields(n),fromFieldsWithTypes:n=>a.fromFieldsWithTypes(n),fromBcs:n=>a.fromBcs(n),bcs:a.bcs,fromJSONField:n=>a.fromJSONField(n),fromJSON:n=>a.fromJSON(n),fromSuiParsedData:n=>a.fromSuiParsedData(n),fromSuiObjectData:n=>a.fromSuiObjectData(n),fetch:async(n,i)=>a.fetch(n,i),new:n=>new a([],n),kind:"StructClassReified"}}static get r(){return a.reified()}static phantom(){return le(a.reified())}static get p(){return a.phantom()}static get bcs(){return v.struct("String",{bytes:v.vector(v.u8())})}static fromFields(n){return a.reified().new({bytes:K(Dn("u8"),n.bytes)})}static fromFieldsWithTypes(n){if(!Ea(n.type))throw new Error("not a String type");return a.reified().new({bytes:J(Dn("u8"),n.fields.bytes)})}static fromBcs(n){return a.fromFields(a.bcs.parse(n))}toJSONField(){return{bytes:Bn("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return a.reified().new({bytes:z(Dn("u8"),n.bytes)})}static fromJSON(n){if(n.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return a.fromJSONField(n)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!Ea(n.type))throw new Error(`object at ${n.fields.id} is not a String object`);return a.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!Ea(n.bcs.type))throw new Error("object at is not a String object");return a.fromBcs((0,E.fromB64)(n.bcs.bcsBytes))}if(n.content)return a.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i){let r=await n.getObject({id:i,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching String object at id ${i}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!Ea(r.data.bcs.type))throw new Error(`object at id ${i} is not a String object`);return a.fromSuiObjectData(r.data)}};fe();fe();var gn="0x2";Re();function $a(a){return a=S(a),a===`${gn}::object::ID`}var Wn=class a{__StructClass=!0;static get $typeName(){return`${gn}::object::ID`}static $numTypeParams=0;static $isPhantom=[];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;bytes;constructor(n,i){this.$fullTypeName=$(a.$typeName,...n),this.$typeArgs=n,this.bytes=i.bytes}static reified(){return{typeName:a.$typeName,fullTypeName:$(a.$typeName),typeArgs:[],isPhantom:a.$isPhantom,reifiedTypeArgs:[],fromFields:n=>a.fromFields(n),fromFieldsWithTypes:n=>a.fromFieldsWithTypes(n),fromBcs:n=>a.fromBcs(n),bcs:a.bcs,fromJSONField:n=>a.fromJSONField(n),fromJSON:n=>a.fromJSON(n),fromSuiParsedData:n=>a.fromSuiParsedData(n),fromSuiObjectData:n=>a.fromSuiObjectData(n),fetch:async(n,i)=>a.fetch(n,i),new:n=>new a([],n),kind:"StructClassReified"}}static get r(){return a.reified()}static phantom(){return le(a.reified())}static get p(){return a.phantom()}static get bcs(){return v.struct("ID",{bytes:v.bytes(32).transform({input:n=>(0,E.fromHEX)(n),output:n=>(0,E.toHEX)(n)})})}static fromFields(n){return a.reified().new({bytes:K("address",n.bytes)})}static fromFieldsWithTypes(n){if(!$a(n.type))throw new Error("not a ID type");return a.reified().new({bytes:J("address",n.fields.bytes)})}static fromBcs(n){return a.fromFields(a.bcs.parse(n))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return a.reified().new({bytes:z("address",n.bytes)})}static fromJSON(n){if(n.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return a.fromJSONField(n)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!$a(n.type))throw new Error(`object at ${n.fields.id} is not a ID object`);return a.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!$a(n.bcs.type))throw new Error("object at is not a ID object");return a.fromBcs((0,E.fromB64)(n.bcs.bcsBytes))}if(n.content)return a.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i){let r=await n.getObject({id:i,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching ID object at id ${i}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!$a(r.data.bcs.type))throw new Error(`object at id ${i} is not a ID object`);return a.fromSuiObjectData(r.data)}};function qa(a){return a=S(a),a===`${gn}::object::UID`}var at=class a{__StructClass=!0;static get $typeName(){return`${gn}::object::UID`}static $numTypeParams=0;static $isPhantom=[];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;id;constructor(n,i){this.$fullTypeName=$(a.$typeName,...n),this.$typeArgs=n,this.id=i.id}static reified(){return{typeName:a.$typeName,fullTypeName:$(a.$typeName),typeArgs:[],isPhantom:a.$isPhantom,reifiedTypeArgs:[],fromFields:n=>a.fromFields(n),fromFieldsWithTypes:n=>a.fromFieldsWithTypes(n),fromBcs:n=>a.fromBcs(n),bcs:a.bcs,fromJSONField:n=>a.fromJSONField(n),fromJSON:n=>a.fromJSON(n),fromSuiParsedData:n=>a.fromSuiParsedData(n),fromSuiObjectData:n=>a.fromSuiObjectData(n),fetch:async(n,i)=>a.fetch(n,i),new:n=>new a([],n),kind:"StructClassReified"}}static get r(){return a.reified()}static phantom(){return le(a.reified())}static get p(){return a.phantom()}static get bcs(){return v.struct("UID",{id:Wn.bcs})}static fromFields(n){return a.reified().new({id:K(Wn.reified(),n.id)})}static fromFieldsWithTypes(n){if(!qa(n.type))throw new Error("not a UID type");return a.reified().new({id:J(Wn.reified(),n.fields.id)})}static fromBcs(n){return a.fromFields(a.bcs.parse(n))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return a.reified().new({id:z(Wn.reified(),n.id)})}static fromJSON(n){if(n.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return a.fromJSONField(n)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!qa(n.type))throw new Error(`object at ${n.fields.id} is not a UID object`);return a.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!qa(n.bcs.type))throw new Error("object at is not a UID object");return a.fromBcs((0,E.fromB64)(n.bcs.bcsBytes))}if(n.content)return a.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i){let r=await n.getObject({id:i,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching UID object at id ${i}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!qa(r.data.bcs.type))throw new Error(`object at id ${i} is not a UID object`);return a.fromSuiObjectData(r.data)}};function vt(a,n){return a.moveCall({target:`${bc.PUBLISHED_AT}::bytes32::from_hex`,arguments:[it(a,n,`${_a.$typeName}`)]})}async function St(a,n,i=[]){let r=await a(n),o=i.concat(r.data);return r.hasNextPage&&r.nextCursor?St(a,r.nextCursor,o):o}var En=class extends ve{constructor(i,r){super();this.nodeRpcUrlsConfig=i;this.api=r;this.client=new Ut({url:i.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new h("Method send not implemented.")}async buildRawTransactionSwap(i){let r=i.sourceToken.suiAddresses;if(!r)throw new h("SUI token must contain 'suiAddresses'");(0,ds.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin);let o=ke(this.chainType,i);return await this.buildRawTransactionSwapFromParams(o,r)}async buildRawTransactionSwapFromParams(i,r){let{amount:o,fromAccountAddress:s,fromTokenAddress:d,toTokenAddress:c,minimumReceiveAmount:g}=i,A=new Gt;A.setSender(s);let l={bridge:r.bridgeObjectAddress,coin:re({balance:BigInt(o),type:d}),receiveAmountMin:BigInt(g)},u=oc(A,[d,c],l),y=await St(C=>this.client.getCoins({owner:i.toAccountAddress,coinType:c,cursor:C}));return y.length===0||!y[0]?A.transferObjects([u],i.toAccountAddress):A.mergeCoins(y[0].coinObjectId,[u]),await A.toJSON({client:this.client})}async buildRawTransactionSendFromCustomTx(i,r,o){let s=Gt.from(i);return this.buildRawTransactionSendFromTx(o,s,r)}async buildRawTransactionSend(i){return this.buildRawTransactionSendFromTx(i,new Gt)}async buildRawTransactionSendFromTx(i,r,o){let s=await Me(this.chainType,i,this.api),{messenger:d}=s,c=i.sourceToken.suiAddresses;if(!c)throw new h("SUI token must contain 'suiAddresses'");switch((0,ds.setAddress)(c.bridgeAddress,c.bridgeAddressOrigin),(0,Cc.setAddress)(c.utilsAddress),d){case 1:return this.buildRawTransactionAllbridgeSend(s,c,r,o);case 2:return this.buildRawTransactionWormholeSend(s,c,r,o);case 3:case 4:return this.buildRawTransactionCctpSend(i,s,c,r,o);case 5:throw new Te("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(i,r,o,s){let{amount:d,fromAccountAddress:c,fromTokenAddress:g,toChainId:A,toAccountAddress:l,toTokenAddress:u,fee:y,gasFeePaymentMethod:C,extraGas:Y}=i,W=y;switch(Y&&(W=(0,er.Big)(W).plus(Y).toFixed()),o.setSender(c),C){case"native":{let F=W==="0"?re({balance:BigInt(W),useGasCoin:!1}):re({balance:BigInt(W)}),w={bridge:r.bridgeObjectAddress,messenger:r.allbridgeMessengerObjectAddress,amount:s??re({balance:BigInt(d),type:g}),destinationChainId:A,nonce:Nt(),recipient:vt(o,ct(l)),receiveToken:vt(o,ct(u)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:re({balance:BigInt(0),type:g}),feeSuiCoin:F};ts(o,g,w);break}case"stablecoin":{let F=BigInt(d)-BigInt(W),w,R;if(s){let[V]=o.splitCoins(s,[W]);w=s,R=V}else w=re({balance:F,type:g}),R=re({balance:BigInt(W),type:g});let G={bridge:r.bridgeObjectAddress,messenger:r.allbridgeMessengerObjectAddress,amount:w,destinationChainId:A,nonce:Nt(),recipient:vt(o,ct(l)),receiveToken:vt(o,ct(u)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:R,feeSuiCoin:re({balance:BigInt(0),useGasCoin:!1})};ts(o,g,G);break}case"abr":throw new h("SUI bridge does not support ARB0 payment method");default:return se(C,"Unhandled FeePaymentMethod")}return await o.toJSON({client:this.client})}async buildRawTransactionWormholeSend(i,r,o,s){let{amount:d,fromAccountAddress:c,fromTokenAddress:g,toChainId:A,toAccountAddress:l,toTokenAddress:u,fee:y,gasFeePaymentMethod:C,extraGas:Y}=i,W=y;switch(Y&&(W=(0,er.Big)(W).plus(Y).toFixed()),o.setSender(c),C){case"native":{let F=W==="0"?re({balance:BigInt(W),useGasCoin:!1}):re({balance:BigInt(W)}),w={bridge:r.bridgeObjectAddress,messenger:r.wormholeMessengerObjectAddress,wormholeState:r.wormholeStateObjectAddress,theClock:za,amount:s??re({balance:BigInt(d),type:g}),destinationChainId:A,nonce:Nt(),recipient:vt(o,ct(l)),receiveToken:vt(o,ct(u)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:re({balance:BigInt(0),type:g}),feeSuiCoin:F};es(o,g,w);break}case"stablecoin":{let F=BigInt(d)-BigInt(W),w,R;if(s){let[V]=o.splitCoins(s,[W]);w=s,R=V}else w=re({balance:F,type:g}),R=re({balance:BigInt(W),type:g});let G={bridge:r.bridgeObjectAddress,messenger:r.wormholeMessengerObjectAddress,wormholeState:r.wormholeStateObjectAddress,theClock:za,amount:w,destinationChainId:A,nonce:Nt(),recipient:vt(o,ct(l)),receiveToken:vt(o,ct(u)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:R,feeSuiCoin:re({balance:BigInt(0),useGasCoin:!1})};es(o,g,G);break}case"abr":throw new h("SUI bridge does not support ARB0 payment method");default:return se(C,"Unhandled FeePaymentMethod")}return await o.toJSON({client:this.client})}async buildRawTransactionCctpSend(i,r,o,s,d){let{amount:c,fromAccountAddress:g,fromTokenAddress:A,toChainId:l,toAccountAddress:u,fee:y,gasFeePaymentMethod:C,extraGas:Y}=r;(0,yc.setAddress)(o.cctpAddress,o.cctpAddressOrigin);let W=y;Y&&(W=(0,er.Big)(W).plus(Y).toFixed()),s.setSender(g);let F=vt(s,ct(u)),w;if(i.destinationToken.chainType==="SOLANA"){let R=await Ya(this.chainType,i.toAccountAddress,i.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));w=vt(s,ct(R))}else w=F;switch(C){case"native":{let R=W==="0"?re({balance:BigInt(W),useGasCoin:!1}):re({balance:BigInt(W)}),G={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:d??re({balance:BigInt(c),type:A}),destinationChainId:l,recipient:w,recipientWalletAddress:F,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:re({balance:BigInt(0),type:A}),feeSuiCoin:R};as(s,A,G);break}case"stablecoin":{let R=BigInt(c)-BigInt(W),G,V;if(d){let[Z]=s.splitCoins(d,[W]);G=d,V=Z}else G=re({balance:R,type:A}),V=re({balance:BigInt(W),type:A});let x={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:G,destinationChainId:l,recipient:w,recipientWalletAddress:F,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:V,feeSuiCoin:re({balance:BigInt(0),useGasCoin:!1})};as(s,A,x);break}case"abr":throw new h("SUI bridge does not support ARB0 payment method");default:return se(C,"Unhandled FeePaymentMethod")}return await s.toJSON({client:this.client})}};var vc=require("big.js");var Ic=ce(require("bn.js"));function tr(a){return"0x"+new Ic.default(a).toString("hex")}function hc(a){return new Promise(n=>setTimeout(()=>n(),a))}async function nr(a,n){let i=await a.trx.sign(n);if(!i.signature)throw new un("Transaction was not signed properly");let o=(await a.trx.sendRawTransaction(i)).transaction.txID;return await ul(a,o),{txId:o}}async function ul(a,n,i=1e4){let r=Date.now();for(;;){if(Date.now()-r>i)throw new Sn("Transaction not found");let o=await a.trx.getUnconfirmedTransactionInfo(n);if(!o?.receipt){await hc(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new Sn(`Transaction status is ${o.receipt.result}`)}}var Qi=class extends ve{constructor(i,r){super();this.tronWeb=i;this.api=r}chainType="TRX";async send(i){let r=await Me(this.chainType,i,this.api),o=await this.buildRawTransactionSendFromParams(i,r);return await nr(this.tronWeb,o)}async buildRawTransactionSwap(i){let r=ke(this.chainType,i);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(i){let{amount:r,contractAddress:o,fromAccountAddress:s,fromTokenAddress:d,toAccountAddress:c,toTokenAddress:g,minimumReceiveAmount:A}=i,l=[{type:"uint256",value:r},{type:"bytes32",value:d},{type:"bytes32",value:g},{type:"address",value:c},{type:"uint256",value:A}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",l,"0",s)}async buildRawTransactionSend(i){let r=await Me(this.chainType,i,this.api);return this.buildRawTransactionSendFromParams(i,r)}async buildRawTransactionSendFromParams(i,r){let{amount:o,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:g,toAccountAddress:A,toTokenAddress:l,messenger:u,fee:y,gasFeePaymentMethod:C,extraGas:Y,extraGasDest:W}=r,F=y;Y&&(F=(0,vc.Big)(F).plus(Y).toFixed());let w=Nt().toString(),R,G,V;switch(u){case 3:case 4:switch(C){case"native":{R=[{type:"uint256",value:o},{type:"bytes32",value:A},{type:"uint256",value:g},{type:"uint256",value:0}],G=F;break}case"stablecoin":{R=[{type:"uint256",value:o},{type:"bytes32",value:A},{type:"uint256",value:g},{type:"uint256",value:F}],G="0";break}case"abr":throw new h("TRX bridge does not support ARB0 payment method");default:return se(C,"Unhandled FeePaymentMethod")}V="bridge(uint256,bytes32,uint256,uint256)";break;case 5:switch(C){case"native":{R=[{type:"address",value:i.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:A},{type:"uint256",value:g},{type:"uint256",value:0},{type:"uint256",value:W??"0"},{type:"uint256",value:"10"}],G=F;break}case"stablecoin":{R=[{type:"address",value:i.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:A},{type:"uint256",value:g},{type:"uint256",value:F},{type:"uint256",value:W??"0"},{type:"uint256",value:"10"}],G="0";break}case"abr":throw new h("TRX bridge does not support ARB0 payment method");default:return se(C,"Unhandled FeePaymentMethod")}V="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 1:case 2:switch(C){case"native":{R=[{type:"bytes32",value:c},{type:"uint256",value:o},{type:"bytes32",value:A},{type:"uint256",value:g},{type:"bytes32",value:l},{type:"uint256",value:w},{type:"uint8",value:u},{type:"uint256",value:0}],G=F;break}case"stablecoin":{R=[{type:"bytes32",value:c},{type:"uint256",value:o},{type:"bytes32",value:A},{type:"uint256",value:g},{type:"bytes32",value:l},{type:"uint256",value:w},{type:"uint8",value:u},{type:"uint256",value:F}],G="0";break}case"abr":throw new h("TRX bridge does not support ARB0 payment method");default:return se(C,"Unhandled FeePaymentMethod")}V="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(s,V,R,G,d)}async buildRawTransaction(i,r,o,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(i,r,{callValue:+s},o,d);if(!c?.result?.result)throw new h("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}};var ir=class{constructor(n,i,r,o){this.api=n;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=o;this.rawTxBuilder=new Ba(n,i,r,o)}rawTxBuilder;async getAllowance(n,i){let r,o;i?(r=n,o=i):o=n;let s=Ni(o.token,o.messenger,o.gasFeePaymentMethod);return await this.tokenService.getAllowance({...o,spender:s},r)}async checkAllowance(n,i){let r,o;i?(r=n,o=i):o=n;let s=Ni(o.token,o.messenger,o.gasFeePaymentMethod);return this.tokenService.checkAllowance({...o,spender:s},r)}async approve(n,i){let r=Ni(i.token,i.messenger,i.gasFeePaymentMethod);return this.tokenService.approve(n,{...i,spender:r})}async send(n,i){return Q(i.amount),O("amount",i.amount,i.sourceToken.decimals),Wa(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,n).send(i)}};function Ni(a,n=1,i="native"){if(i==="abr"){if(a.abrPayer)return a.abrPayer.payerAddress;throw new h("Token must contain 'abrPayer' for ARB0 payment method")}switch(n){case 3:if(a.cctpAddress)return a.cctpAddress;throw new We("Such route does not support CCTP protocol");case 4:if(a.cctpV2Address)return a.cctpV2Address;throw new We("Such route does not support CCTP V2 protocol");case 5:if(a.oftBridgeAddress)return a.oftBridgeAddress;throw new Te("Such route does not support OFT protocol");case 1:case 2:return a.bridgeAddress}}function Wa(a,n,i,r,o){switch(k.getChainProperty(a).chainType){case"EVM":{if(o)return new Fi(o,n,i);{let s=i.getNodeRpcUrl(a);return new Fi(new fc.Web3(s),n,i)}}case"TRX":{if(o)return new Qi(o,n);{let s=i.getNodeRpcUrl(a);return new Qi(new Rc.TronWeb({fullHost:s,solidityNode:s,eventServer:s}),n)}}case"SOLANA":return new Na(i.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:r.wormholeMessengerProgramId,solanaLookUpTable:r.solanaLookUpTable,cctpParams:r.cctpParams,jupiterParams:{jupiterUrl:r.jupiterUrl,jupiterApiKeyHeader:r.jupiterApiKeyHeader,jupiterMaxAccounts:r.jupiterMaxAccounts}},n);case"SRB":return new Ga(i,r,n);case"SUI":return new En(i,n);case"ALG":if(o){let s=o,d=cs.AlgorandClient.fromClients({algod:s});return new Wi(d,n)}else{let s=i.getNodeRpcUrl(a),d=cs.AlgorandClient.fromConfig({algodConfig:{server:s}});return new Wi(d,n)}case"STX":{let s=i.getNodeRpcUrl(a);return new Za(s,r,n)}}}var ys=require("@algorandfoundation/algokit-utils"),Mc=require("big.js");var pl=(a,n)=>a!==null&&Object.prototype.hasOwnProperty.call(a,n),Yc="__cache__",gs=function(a){return typeof a!="string"?Yc+JSON.stringify(a):Yc+a},As=class{constructor(n={defaultTtl:60*1e3}){this.cache={},this.defaultTtl=n.defaultTtl||60*1e3}put(n,i,r){let o=(r?r.ttl:void 0)||this.defaultTtl,s=(r?r.callback:void 0)||function(){},d=gs(n),c=this.cache[d];c&&clearTimeout(c.handle);let g=setTimeout(()=>this.remove(n),o);this.cache[d]={handle:g,data:i,callback:s}}get(n){let i=this.cache[gs(n)];return i&&i.data}remove(n){let i=gs(n),r=this.cache[i];r&&(clearTimeout(r.handle),delete this.cache[i],r.callback(n,r.data))}clear(){for(let n in this.cache)pl(this.cache,n)&&clearTimeout(this.cache[n].handle);this.cache={}}size(){return Object.keys(this.cache).length}},Qt=As;var Pc=require("tronweb"),ti=require("web3");var Vt=require("big.js");function Bc(a,n,i,r,o){let s=X(a,3),d=(0,Vt.Big)(s),c=(0,Vt.Big)(i),g=(0,Vt.Big)(r).plus(o),A,l;if(c.eq(0)||g.eq(0)){let y=d.div(2);A=(0,Vt.Big)(r).plus(y),l=(0,Vt.Big)(o).plus(y)}else A=(0,Vt.Big)(r).plus(d.mul(r).div(g)),l=(0,Vt.Big)(o).plus(d.mul(o).div(g));return(0,Vt.Big)(Ms(n,A.toFixed(),l.toFixed())).minus(c).toFixed()}function Wc(a){let n=X(a,3);return(0,Vt.Big)(n).round().toFixed()}var Dt=require("algosdk");var Tc=require("@algorandfoundation/algokit-utils/types/app-arc56"),Di=require("@algorandfoundation/algokit-utils/types/app-client"),ml=require("@algorandfoundation/algokit-utils/types/app-factory"),Fc=require("algosdk"),ar={name:"Pool",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"address",name:"router"},{type:"uint64",name:"a"},{type:"uint64",name:"asset"},{type:"uint64",name:"feeShareBP"},{type:"uint64",name:"balanceRatioMinBP"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInToApplication",args:[],returns:{type:"void"},actions:{create:[],call:["OptIn"]},readonly:!1,events:[],recommendations:{}},{name:"closeOutOfApplication",args:[{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["CloseOut"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"optInAsset",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,desc:"Opt-in the application account to the ASA stored in `this.asset`.\nThis performs an inner axfer of 0 to the app's own address.\nCall once after deploy (or whenever you change the asset).",events:[],recommendations:{}},{name:"deposit",args:[{type:"axfer",name:"assetTransferRef"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp","OptIn"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"withdraw",args:[{type:"uint64",name:"amountLp",desc:"The Withdrawn amount"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"swapToVUsd",args:[{type:"address",name:"user",desc:"The address of the sender."},{type:"uint64",name:"amount",desc:"The amount of tokens to swap."},{type:"bool",name:"zeroFee",desc:`When true it allows to swap without incurring any fees. It is intended for use with service
1
+ "use strict";var ag=Object.create;var ga=Object.defineProperty;var rg=Object.getOwnPropertyDescriptor;var og=Object.getOwnPropertyNames;var sg=Object.getPrototypeOf,dg=Object.prototype.hasOwnProperty;var Gn=(a,n)=>()=>(a&&(n=a(a=0)),n);var Lr=(a,n)=>()=>(n||a((n={exports:{}}).exports,n),n.exports),cg=(a,n)=>{for(var i in n)ga(a,i,{get:n[i],enumerable:!0})},Bs=(a,n,i,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of og(n))!dg.call(a,o)&&o!==i&&ga(a,o,{get:()=>n[o],enumerable:!(r=rg(n,o))||r.enumerable});return a};var ce=(a,n,i)=>(i=a!=null?ag(sg(a)):{},Bs(n||!a||!a.__esModule?ga(i,"default",{value:a,enumerable:!0}):i,a)),gg=a=>Bs(ga({},"__esModule",{value:!0}),a);function ka(a){try{return(0,ja.fromBase58)(a).length===Xg}catch{return!1}}function Ee(a){return Pg(a)&&Lg(a)===Li}function On(a){return Ee(a)}function Mg(a){return a.includes("::")?go(a):a}function go(a){let[n,i]=a.split("::"),r=a.slice(n.length+i.length+4),o=r.includes("<")?r.slice(0,r.indexOf("<")):r,s=r.includes("<")?(0,ja.splitGenericParameters)(r.slice(r.indexOf("<")+1,r.lastIndexOf(">"))).map(d=>Mg(d.trim())):[];return{address:j(n),module:i,name:o,typeParams:s}}function ji(a){let{address:n,module:i,name:r,typeParams:o}=typeof a=="string"?go(a):a,s=o?.length>0?`<${o.map(d=>typeof d=="string"?d:ji(d)).join(",")}>`:"";return`${n}::${i}::${r}${s}`}function j(a,n=!1){let i=a.toLowerCase();return!n&&i.startsWith("0x")&&(i=i.slice(2)),`0x${i.padStart(Li*2,"0")}`}function ze(a,n=!1){return j(a,n)}function Pg(a){return/^(0x|0X)?[a-fA-F0-9]+$/.test(a)&&a.length%2===0}function Lg(a){return/^(0x|0X)/.test(a)?(a.length-2)/2:a.length/2}var ja,Xg,Li,xe=Gn(()=>{ja=require("@mysten/bcs"),Xg=32;Li=32});var Yd,jg,kg,kt,Ao=Gn(()=>{Yd=require("@mysten/bcs");xe();jg=/^vector<(.+)>$/,kg=/^([^:]+)::([^:]+)::([^<]+)(<(.+)>)?/,kt=class a{static parseFromStr(n,i=!1){if(n==="address")return{address:null};if(n==="bool")return{bool:null};if(n==="u8")return{u8:null};if(n==="u16")return{u16:null};if(n==="u32")return{u32:null};if(n==="u64")return{u64:null};if(n==="u128")return{u128:null};if(n==="u256")return{u256:null};if(n==="signer")return{signer:null};let r=n.match(jg);if(r)return{vector:a.parseFromStr(r[1],i)};let o=n.match(kg);if(o)return{struct:{address:i?j(o[1]):o[1],module:o[2],name:o[3],typeParams:o[5]===void 0?[]:a.parseStructTypeArgs(o[5],i)}};throw new Error(`Encountered unexpected token when parsing type args for ${n}`)}static parseStructTypeArgs(n,i=!1){return(0,Yd.splitGenericParameters)(n).map(r=>a.parseFromStr(r,i))}static tagToString(n){if("bool"in n)return"bool";if("u8"in n)return"u8";if("u16"in n)return"u16";if("u32"in n)return"u32";if("u64"in n)return"u64";if("u128"in n)return"u128";if("u256"in n)return"u256";if("address"in n)return"address";if("signer"in n)return"signer";if("vector"in n)return`vector<${a.tagToString(n.vector)}>`;if("struct"in n){let i=n.struct,r=i.typeParams.map(a.tagToString).join(", ");return`${i.address}::${i.module}::${i.name}${r?`<${r}>`:""}`}throw new Error("Invalid TypeTag")}}});function Hg(a){return y.bcs.u64({name:"unsafe_u64",...a}).transform({input:n=>n,output:n=>Number(n)})}function Jg(a){return y.bcs.enum("Option",{None:null,Some:a})}function No(a){return y.bcs.struct(`IntentMessage<${a.name}>`,{intent:Fo,value:a})}var y,ae,_e,Oe,lo,uo,po,mo,Ha,pt,bo,yo,Co,Io,ho,vo,Ro,fo,Yo,Bo,Wo,To,Fo,wo,Go,Zo,So,Bd,zg,Vo,Wd,Td,Xo=Gn(()=>{y=require("@mysten/bcs");xe();Ao();ae=y.bcs.bytes(Li).transform({validate:a=>{let n=typeof a=="string"?a:(0,y.toHex)(a);if(!n||!Ee(j(n)))throw new Error(`Invalid Sui address ${n}`)},input:a=>typeof a=="string"?(0,y.fromHex)(j(a)):a,output:a=>j((0,y.toHex)(a))}),_e=y.bcs.vector(y.bcs.u8()).transform({name:"ObjectDigest",input:a=>(0,y.fromBase58)(a),output:a=>(0,y.toBase58)(new Uint8Array(a)),validate:a=>{if((0,y.fromBase58)(a).length!==32)throw new Error("ObjectDigest must be 32 bytes")}}),Oe=y.bcs.struct("SuiObjectRef",{objectId:ae,version:y.bcs.u64(),digest:_e}),lo=y.bcs.struct("SharedObjectRef",{objectId:ae,initialSharedVersion:y.bcs.u64(),mutable:y.bcs.bool()}),uo=y.bcs.enum("ObjectArg",{ImmOrOwnedObject:Oe,SharedObject:lo,Receiving:Oe}),po=y.bcs.enum("CallArg",{Pure:y.bcs.struct("Pure",{bytes:y.bcs.vector(y.bcs.u8()).transform({input:a=>typeof a=="string"?(0,y.fromBase64)(a):a,output:a=>(0,y.toBase64)(new Uint8Array(a))})}),Object:uo}),mo=y.bcs.enum("TypeTag",{bool:null,u8:null,u64:null,u128:null,address:null,signer:null,vector:y.bcs.lazy(()=>mo),struct:y.bcs.lazy(()=>vo),u16:null,u32:null,u256:null}),Ha=mo.transform({input:a=>typeof a=="string"?kt.parseFromStr(a,!0):a,output:a=>kt.tagToString(a)}),pt=y.bcs.enum("Argument",{GasCoin:null,Input:y.bcs.u16(),Result:y.bcs.u16(),NestedResult:y.bcs.tuple([y.bcs.u16(),y.bcs.u16()])}),bo=y.bcs.struct("ProgrammableMoveCall",{package:ae,module:y.bcs.string(),function:y.bcs.string(),typeArguments:y.bcs.vector(Ha),arguments:y.bcs.vector(pt)}),yo=y.bcs.enum("Command",{MoveCall:bo,TransferObjects:y.bcs.struct("TransferObjects",{objects:y.bcs.vector(pt),address:pt}),SplitCoins:y.bcs.struct("SplitCoins",{coin:pt,amounts:y.bcs.vector(pt)}),MergeCoins:y.bcs.struct("MergeCoins",{destination:pt,sources:y.bcs.vector(pt)}),Publish:y.bcs.struct("Publish",{modules:y.bcs.vector(y.bcs.vector(y.bcs.u8()).transform({input:a=>typeof a=="string"?(0,y.fromBase64)(a):a,output:a=>(0,y.toBase64)(new Uint8Array(a))})),dependencies:y.bcs.vector(ae)}),MakeMoveVec:y.bcs.struct("MakeMoveVec",{type:Jg(Ha).transform({input:a=>a===null?{None:!0}:{Some:a},output:a=>a.Some??null}),elements:y.bcs.vector(pt)}),Upgrade:y.bcs.struct("Upgrade",{modules:y.bcs.vector(y.bcs.vector(y.bcs.u8()).transform({input:a=>typeof a=="string"?(0,y.fromBase64)(a):a,output:a=>(0,y.toBase64)(new Uint8Array(a))})),dependencies:y.bcs.vector(ae),package:ae,ticket:pt})}),Co=y.bcs.struct("ProgrammableTransaction",{inputs:y.bcs.vector(po),commands:y.bcs.vector(yo)}),Io=y.bcs.enum("TransactionKind",{ProgrammableTransaction:Co,ChangeEpoch:null,Genesis:null,ConsensusCommitPrologue:null}),ho=y.bcs.enum("TransactionExpiration",{None:null,Epoch:Hg()}),vo=y.bcs.struct("StructTag",{address:ae,module:y.bcs.string(),name:y.bcs.string(),typeParams:y.bcs.vector(mo)}),Ro=y.bcs.struct("GasData",{payment:y.bcs.vector(Oe),owner:ae,price:y.bcs.u64(),budget:y.bcs.u64()}),fo=y.bcs.struct("TransactionDataV1",{kind:Io,sender:ae,gasData:Ro,expiration:ho}),Yo=y.bcs.enum("TransactionData",{V1:fo}),Bo=y.bcs.enum("IntentScope",{TransactionData:null,TransactionEffects:null,CheckpointSummary:null,PersonalMessage:null}),Wo=y.bcs.enum("IntentVersion",{V0:null}),To=y.bcs.enum("AppId",{Sui:null}),Fo=y.bcs.struct("Intent",{scope:Bo,version:Wo,appId:To});wo=y.bcs.enum("CompressedSignature",{ED25519:y.bcs.fixedArray(64,y.bcs.u8()),Secp256k1:y.bcs.fixedArray(64,y.bcs.u8()),Secp256r1:y.bcs.fixedArray(64,y.bcs.u8()),ZkLogin:y.bcs.vector(y.bcs.u8())}),Go=y.bcs.enum("PublicKey",{ED25519:y.bcs.fixedArray(32,y.bcs.u8()),Secp256k1:y.bcs.fixedArray(33,y.bcs.u8()),Secp256r1:y.bcs.fixedArray(33,y.bcs.u8()),ZkLogin:y.bcs.vector(y.bcs.u8())}),Zo=y.bcs.struct("MultiSigPkMap",{pubKey:Go,weight:y.bcs.u8()}),So=y.bcs.struct("MultiSigPublicKey",{pk_map:y.bcs.vector(Zo),threshold:y.bcs.u16()}),Bd=y.bcs.struct("MultiSig",{sigs:y.bcs.vector(wo),bitmap:y.bcs.u16(),multisig_pk:So}),zg=y.bcs.vector(y.bcs.u8()).transform({input:a=>typeof a=="string"?(0,y.fromBase64)(a):a,output:a=>(0,y.toBase64)(new Uint8Array(a))}),Vo=y.bcs.struct("SenderSignedTransaction",{intentMessage:No(Yo),txSignatures:y.bcs.vector(zg)}),Wd=y.bcs.vector(Vo,{name:"SenderSignedData"}),Td=y.bcs.struct("PasskeyAuthenticator",{authenticatorData:y.bcs.vector(y.bcs.u8()),clientDataJson:y.bcs.string(),userSignature:y.bcs.vector(y.bcs.u8())})});var I,xg,Og,Fd,Ug,Kg,Qg,Nd,wd,Un,Dg,Mo,Eg,_g,$g,qg,eA,tA,Gd,Zd=Gn(()=>{I=require("@mysten/bcs");Xo();xg=I.bcs.enum("PackageUpgradeError",{UnableToFetchPackage:I.bcs.struct("UnableToFetchPackage",{packageId:ae}),NotAPackage:I.bcs.struct("NotAPackage",{objectId:ae}),IncompatibleUpgrade:null,DigestDoesNotMatch:I.bcs.struct("DigestDoesNotMatch",{digest:I.bcs.vector(I.bcs.u8())}),UnknownUpgradePolicy:I.bcs.struct("UnknownUpgradePolicy",{policy:I.bcs.u8()}),PackageIDDoesNotMatch:I.bcs.struct("PackageIDDoesNotMatch",{packageId:ae,ticketId:ae})}),Og=I.bcs.struct("ModuleId",{address:ae,name:I.bcs.string()}),Fd=I.bcs.struct("MoveLocation",{module:Og,function:I.bcs.u16(),instruction:I.bcs.u16(),functionName:I.bcs.option(I.bcs.string())}),Ug=I.bcs.enum("CommandArgumentError",{TypeMismatch:null,InvalidBCSBytes:null,InvalidUsageOfPureArg:null,InvalidArgumentToPrivateEntryFunction:null,IndexOutOfBounds:I.bcs.struct("IndexOutOfBounds",{idx:I.bcs.u16()}),SecondaryIndexOutOfBounds:I.bcs.struct("SecondaryIndexOutOfBounds",{resultIdx:I.bcs.u16(),secondaryIdx:I.bcs.u16()}),InvalidResultArity:I.bcs.struct("InvalidResultArity",{resultIdx:I.bcs.u16()}),InvalidGasCoinUsage:null,InvalidValueUsage:null,InvalidObjectByValue:null,InvalidObjectByMutRef:null,SharedObjectOperationNotAllowed:null}),Kg=I.bcs.enum("TypeArgumentError",{TypeNotFound:null,ConstraintNotSatisfied:null}),Qg=I.bcs.enum("ExecutionFailureStatus",{InsufficientGas:null,InvalidGasObject:null,InvariantViolation:null,FeatureNotYetSupported:null,MoveObjectTooBig:I.bcs.struct("MoveObjectTooBig",{objectSize:I.bcs.u64(),maxObjectSize:I.bcs.u64()}),MovePackageTooBig:I.bcs.struct("MovePackageTooBig",{objectSize:I.bcs.u64(),maxObjectSize:I.bcs.u64()}),CircularObjectOwnership:I.bcs.struct("CircularObjectOwnership",{object:ae}),InsufficientCoinBalance:null,CoinBalanceOverflow:null,PublishErrorNonZeroAddress:null,SuiMoveVerificationError:null,MovePrimitiveRuntimeError:I.bcs.option(Fd),MoveAbort:I.bcs.tuple([Fd,I.bcs.u64()]),VMVerificationOrDeserializationError:null,VMInvariantViolation:null,FunctionNotFound:null,ArityMismatch:null,TypeArityMismatch:null,NonEntryFunctionInvoked:null,CommandArgumentError:I.bcs.struct("CommandArgumentError",{argIdx:I.bcs.u16(),kind:Ug}),TypeArgumentError:I.bcs.struct("TypeArgumentError",{argumentIdx:I.bcs.u16(),kind:Kg}),UnusedValueWithoutDrop:I.bcs.struct("UnusedValueWithoutDrop",{resultIdx:I.bcs.u16(),secondaryIdx:I.bcs.u16()}),InvalidPublicFunctionReturnType:I.bcs.struct("InvalidPublicFunctionReturnType",{idx:I.bcs.u16()}),InvalidTransferObject:null,EffectsTooLarge:I.bcs.struct("EffectsTooLarge",{currentSize:I.bcs.u64(),maxSize:I.bcs.u64()}),PublishUpgradeMissingDependency:null,PublishUpgradeDependencyDowngrade:null,PackageUpgradeError:I.bcs.struct("PackageUpgradeError",{upgradeError:xg}),WrittenObjectsTooLarge:I.bcs.struct("WrittenObjectsTooLarge",{currentSize:I.bcs.u64(),maxSize:I.bcs.u64()}),CertificateDenied:null,SuiMoveVerificationTimedout:null,SharedObjectOperationNotAllowed:null,InputObjectDeleted:null,ExecutionCancelledDueToSharedObjectCongestion:I.bcs.struct("ExecutionCancelledDueToSharedObjectCongestion",{congestedObjects:I.bcs.vector(ae)}),AddressDeniedForCoin:I.bcs.struct("AddressDeniedForCoin",{address:ae,coinType:I.bcs.string()}),CoinTypeGlobalPause:I.bcs.struct("CoinTypeGlobalPause",{coinType:I.bcs.string()}),ExecutionCancelledDueToRandomnessUnavailable:null}),Nd=I.bcs.enum("ExecutionStatus",{Success:null,Failed:I.bcs.struct("ExecutionFailed",{error:Qg,command:I.bcs.option(I.bcs.u64())})}),wd=I.bcs.struct("GasCostSummary",{computationCost:I.bcs.u64(),storageCost:I.bcs.u64(),storageRebate:I.bcs.u64(),nonRefundableStorageFee:I.bcs.u64()}),Un=I.bcs.enum("Owner",{AddressOwner:ae,ObjectOwner:ae,Shared:I.bcs.struct("Shared",{initialSharedVersion:I.bcs.u64()}),Immutable:null}),Dg=I.bcs.struct("TransactionEffectsV1",{status:Nd,executedEpoch:I.bcs.u64(),gasUsed:wd,modifiedAtVersions:I.bcs.vector(I.bcs.tuple([ae,I.bcs.u64()])),sharedObjects:I.bcs.vector(Oe),transactionDigest:_e,created:I.bcs.vector(I.bcs.tuple([Oe,Un])),mutated:I.bcs.vector(I.bcs.tuple([Oe,Un])),unwrapped:I.bcs.vector(I.bcs.tuple([Oe,Un])),deleted:I.bcs.vector(Oe),unwrappedThenDeleted:I.bcs.vector(Oe),wrapped:I.bcs.vector(Oe),gasObject:I.bcs.tuple([Oe,Un]),eventsDigest:I.bcs.option(_e),dependencies:I.bcs.vector(_e)}),Mo=I.bcs.tuple([I.bcs.u64(),_e]),Eg=I.bcs.enum("ObjectIn",{NotExist:null,Exist:I.bcs.tuple([Mo,Un])}),_g=I.bcs.enum("ObjectOut",{NotExist:null,ObjectWrite:I.bcs.tuple([_e,Un]),PackageWrite:Mo}),$g=I.bcs.enum("IDOperation",{None:null,Created:null,Deleted:null}),qg=I.bcs.struct("EffectsObjectChange",{inputState:Eg,outputState:_g,idOperation:$g}),eA=I.bcs.enum("UnchangedSharedKind",{ReadOnlyRoot:Mo,MutateDeleted:I.bcs.u64(),ReadDeleted:I.bcs.u64(),Cancelled:I.bcs.u64(),PerEpochConfig:null}),tA=I.bcs.struct("TransactionEffectsV2",{status:Nd,executedEpoch:I.bcs.u64(),gasUsed:wd,transactionDigest:_e,gasObjectIndex:I.bcs.option(I.bcs.u32()),eventsDigest:I.bcs.option(_e),dependencies:I.bcs.vector(_e),lamportVersion:I.bcs.u64(),changedObjects:I.bcs.vector(I.bcs.tuple([ae,qg])),unchangedSharedObjects:I.bcs.vector(I.bcs.tuple([ae,eA])),auxDataDigest:I.bcs.option(_e)}),Gd=I.bcs.enum("TransactionEffects",{V1:Dg,V2:tA})});var mt,nA,v,Re=Gn(()=>{mt=require("@mysten/bcs");Xo();Zd();Ao();nA=require("@mysten/bcs"),v={...mt.bcs,U8:mt.bcs.u8(),U16:mt.bcs.u16(),U32:mt.bcs.u32(),U64:mt.bcs.u64(),U128:mt.bcs.u128(),U256:mt.bcs.u256(),ULEB128:mt.bcs.uleb128(),Bool:mt.bcs.bool(),String:mt.bcs.string(),Address:ae,AppId:To,Argument:pt,CallArg:po,CompressedSignature:wo,GasData:Ro,Intent:Fo,IntentMessage:No,IntentScope:Bo,IntentVersion:Wo,MultiSig:Bd,MultiSigPkMap:Zo,MultiSigPublicKey:So,ObjectArg:uo,ObjectDigest:_e,ProgrammableMoveCall:bo,ProgrammableTransaction:Co,PublicKey:Go,SenderSignedData:Wd,SenderSignedTransaction:Vo,SharedObjectRef:lo,StructTag:vo,SuiObjectRef:Oe,Command:yo,TransactionData:Yo,TransactionDataV1:fo,TransactionExpiration:ho,TransactionKind:Io,TypeTag:Ha,TransactionEffects:Gd,PasskeyAuthenticator:Td}});function sl(a,n=["<",">"]){let[i,r]=n,o=[],s="",d=0;for(let c=0;c<a.length;c++){let g=a[c];if(g===i&&d++,g===r&&d--,d===0&&g===","){o.push(s.trim()),s="";continue}s+=g}return o.push(s.trim()),o}function Ge(a){if(typeof a!="string")throw new Error(`Illegal type passed as a name of the type: ${a}`);let[n,i]=["<",">"],r=a.indexOf(n),o=Array.from(a).reverse().indexOf(i);if(r===-1&&o===-1)return{typeName:a,typeArgs:[]};if(r===-1||o===-1)throw new Error(`Unclosed generic in name '${a}'`);let s=a.slice(0,r),d=sl(a.slice(r+1,a.length-o-1),[n,i]);return{typeName:s,typeArgs:d}}function ac(a){return!a||typeof a!="object"||Array.isArray(a)?!1:"GasCoin"in a||"Input"in a||"Result"in a||"NestedResult"in a}function P(a,n){return ac(n)?n:a.object(n)}function it(a,n,i){if(ac(n))return P(a,n);function r(A){let{typeName:l,typeArgs:u}=Ge(A);switch(l){case"bool":return v.Bool;case"u8":return v.U8;case"u16":return v.U16;case"u32":return v.U32;case"u64":return v.U64;case"u128":return v.U128;case"u256":return v.U256;case"address":return v.Address;case"0x1::string::String":case"0x1::ascii::String":return v.String;case"0x2::object::ID":return v.Address;case"0x1::option::Option":return v.option(r(u[0]));case"vector":return v.vector(r(u[0]));default:throw new Error(`invalid primitive type ${A}`)}}function o(A){for(let l of A){if(typeof l>"u"||l===null)return!0;if(Array.isArray(l))return o(l)}return!1}function s(A){for(let l of A){if(!Array.isArray(l)){if(l===null)continue;switch(typeof l){case"string":case"number":case"bigint":case"boolean":continue;default:return!1}}return s(l)}return!0}function d(A){for(let l of A){if(!Array.isArray(l))switch(typeof l){case"string":case"number":case"bigint":case"boolean":return!0;default:continue}return d(l)}return!1}let{typeName:c,typeArgs:g}=Ge(i);switch(c){case"0x1::option::Option":if(n===null)return a.pure.option("bool",null);if(s([n]))return a.pure(r(i).serialize(n));if(d([n]))throw new Error("mixing primitive and TransactionArgument values is not supported");return a.moveCall({target:"0x1::option::some",typeArguments:[g[0]],arguments:[it(a,n,g[0])]});case"vector":if(!Array.isArray(n))throw new Error("expected an array for vector type");if(n.length===0)return a.pure(v.vector(v.Bool).serialize([]));if(o(n))throw new Error("the provided array contains undefined or null values");if(s(n))return a.pure(r(i).serialize(n));if(d(n))throw new Error("mixing primitive and TransactionArgument values is not supported");return a.makeMoveVec({type:g[0],elements:n});default:return a.pure(r(i).serialize(n))}}function dl(a){let n=a.split("0x").join("");for(let i=0;i<n.length;i++)if(n[i]!=="0")return`0x${n.substring(i)}`;return"0x0"}function S(a){let{typeName:n,typeArgs:i}=Ge(a);switch(n){case"bool":case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"address":case"signer":return n;case"vector":return`vector<${S(i[0])}>`;default:{let r=n.split("::");r[0]=dl(r[0]);let o=r.join("::");return i.length>0?`${o}<${i.map(s=>S(s)).join(",")}>`:o}}}function $(a,...n){return n.length>0?`${a}<${n.join(", ")}>`:a}var fe=Gn(()=>{"use strict";Re()});var cn=Lr((SC,rc)=>{"use strict";fe();var qo=class a{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return S(a.$PACKAGE_ID)}get PUBLISHED_AT(){return S(a.$PUBLISHED_AT)}get PKG_V1(){return S(a.$PKG_V[1])}setPackageId(n){a.$PACKAGE_ID=n}setPublishedAt(n){a.$PUBLISHED_AT=n}setPkgV(n,i){a.$PKG_V[n]=i}setAddress(n,i){a.$PACKAGE_ID=n,a.$PUBLISHED_AT=n,a.$PKG_V[1]=i||n}},cl=new qo;rc.exports=cl});var is=Lr((PC,lc)=>{"use strict";fe();var ns=class a{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return S(a.$PACKAGE_ID)}get PUBLISHED_AT(){return S(a.$PUBLISHED_AT)}get PKG_V1(){return S(a.$PKG_V[1])}setPackageId(n){a.$PACKAGE_ID=n}setPublishedAt(n){a.$PUBLISHED_AT=n}setPkgV(n,i){a.$PKG_V[n]=i}setAddress(n,i){a.$PACKAGE_ID=n,a.$PUBLISHED_AT=n,a.$PKG_V[1]=i||n}},gl=new ns;lc.exports=gl});var os=Lr((HC,pc)=>{"use strict";fe();var rs=class a{static $PACKAGE_ID="";static $PUBLISHED_AT="";static $PKG_V=[];get PACKAGE_ID(){return S(a.$PACKAGE_ID)}get PUBLISHED_AT(){return S(a.$PUBLISHED_AT)}get PKG_V1(){return S(a.$PKG_V[1])}setPackageId(n){a.$PACKAGE_ID=n}setPublishedAt(n){a.$PUBLISHED_AT=n}setPkgV(n,i){a.$PKG_V[n]=i}setAddress(n,i){a.$PACKAGE_ID=n,a.$PUBLISHED_AT=n,a.$PKG_V[1]=i||n}},Al=new rs;pc.exports=Al});var Ol={};cg(Ol,{AddressStatus:()=>Aa,AllbridgeCoreSdk:()=>Ys,AmountFormat:()=>Bi,AmountNotEnoughError:()=>ln,ArgumentInvalidDecimalsError:()=>mi,CCTPDoesNotSupportedError:()=>We,ChainSymbol:()=>ke,ChainType:()=>D,ErrorCode:()=>Ws,ExtraGasMaxLimitExceededError:()=>pi,FeePaymentMethod:()=>gt,InsufficientPoolLiquidityError:()=>Wt,InvalidAmountError:()=>dt,InvalidGasFeePaymentOptionError:()=>Zn,InvalidMessengerOptionError:()=>ui,InvalidTxError:()=>un,JupiterError:()=>he,Messenger:()=>Ve,MethodNotSupportedError:()=>H,NodeRpcUrlNotInitializedError:()=>bi,OFTDoesNotSupportedError:()=>Te,SdkError:()=>h,SdkRootError:()=>oe,SolanaAutoTxFee:()=>Ta,TimeoutError:()=>Vn,TxTooLargeError:()=>Ci,VerifyTxError:()=>Sn,YieldDoesNotSupportedError:()=>yi,assertYieldIsSupported:()=>Lc,isYieldSupported:()=>ia,mainnet:()=>li,nodeRpcUrlsDefault:()=>lg,nodeUrlsDefault:()=>Ag});module.exports=gg(Ol);var li={coreApiUrl:"https://core.api.allbridgecoreapi.net",coreApiQueryParams:{},coreApiHeaders:{},jupiterUrl:"https://lite-api.jup.ag/swap/v1",wormholeMessengerProgramId:"worm2ZoG2kUd4vFXhvjh93UUH596ayRfgQ2MgjNMTth",solanaLookUpTable:"2JcBAEVnAwVo4u8d61iqgHPrzZuugur7cVTjWubsVLHj",sorobanNetworkPassphrase:"Public Global Stellar Network ; September 2015",tronJsonRpc:"https://api.trongrid.io/jsonrpc",cctpParams:{cctpTransmitterProgramId:"CCTPmbSD7gX1bxKPAmg77w8oFzNFpaQiQUWD43TKaecd",cctpTokenMessengerMinter:"CCTPiPYPc6AsJuwueEnWgSgucamXDZwBd53dQ11YiKX3",cctpDomains:{ETH:0,AVA:1,OPT:2,ARB:3,SOL:5,BAS:6,POL:7,SUI:8}},cachePoolInfoChainSec:20},Ag={solanaRpcUrl:"https://api.mainnet-beta.solana.com",tronRpcUrl:"https://api.trongrid.io"},lg={SOL:"https://api.mainnet-beta.solana.com",TRX:"https://api.trongrid.io",SRB:"https://rpc.stellar.org:443",STLR:"https://horizon.stellar.org",SUI:"https://fullnode.mainnet.sui.io",STX:"https://api.hiro.so"};var cs=require("@algorandfoundation/algokit-utils"),Rc=require("tronweb"),fc=require("web3");var oe=class extends Error{errorCode;constructor(n,i){super(i),this.errorCode=n}},h=class extends oe{constructor(n){super("SdkError",n)}},dt=class extends oe{constructor(n){super("InvalidAmountError",n)}},ln=class extends oe{constructor(n){super("AmountNotEnoughError",n)}},Wt=class extends oe{constructor(n){super("InsufficientPoolLiquidityError",n)}},he=class extends oe{constructor(n){super("JupiterError",n)}},Zn=class extends oe{constructor(n){super("InvalidGasFeePaymentOptionError",n)}},ui=class extends oe{constructor(n){super("InvalidMessengerOptionError",n)}},H=class extends oe{constructor(n){super("MethodNotSupportedError",n)}},Sn=class extends oe{constructor(n){super("VerifyTxError",n)}},un=class extends oe{constructor(n){super("InvalidTxError",n)}},pi=class extends oe{constructor(n){super("ExtraGasMaxLimitExceededError",n)}},mi=class extends oe{constructor(n,i,r){super("ArgumentInvalidDecimalsError",`Argument '${n}' decimals '${i}' cannot be greater than '${r}'`)}},Vn=class extends oe{constructor(n){super("TimeoutError",n)}},bi=class extends oe{constructor(n){super("NodeRpcUrlNotInitializedError",`For chain '${n}' Node RPC URL not initialized`)}},We=class extends oe{constructor(n){super("CCTPDoesNotSupportedError",n)}},Te=class extends oe{constructor(n){super("OFTDoesNotSupportedError",n)}},yi=class extends oe{constructor(n){super("YieldDoesNotSupportedError",n)}},Ci=class extends oe{constructor(){super("TxTooLargeError","Transaction too large: try again later or switch to another messenger or pay relayer fee in native gas currency")}},Ws=(R=>(R.SDK_ERROR="SdkError",R.INVALID_AMOUNT_ERROR="InvalidAmountError",R.AMOUNT_NOT_ENOUGH_ERROR="AmountNotEnoughError",R.INSUFFICIENT_POOL_LIQUIDITY_ERROR="InsufficientPoolLiquidityError",R.JUPITER_ERROR="JupiterError",R.INVALID_GAS_FEE_PAYMENT_OPTION_ERROR="InvalidGasFeePaymentOptionError",R.INVALID_MESSENGER_OPTION_ERROR="InvalidMessengerOptionError",R.METHOD_NOT_SUPPORTED_ERROR="MethodNotSupportedError",R.VERIFY_TX_ERROR="VerifyTxError",R.INVALID_TX_ERROR="InvalidTxError",R.EXTRA_GAS_MAX_LIMIT_EXCEEDED_ERROR="ExtraGasMaxLimitExceededError",R.ARGUMENT_INVALID_DECIMALS_ERROR="ArgumentInvalidDecimalsError",R.TIMEOUT_ERROR="TimeoutError",R.NODE_RPC_URL_NOT_INITIALIZED_ERROR="NodeRpcUrlNotInitializedError",R.CCTP_DOES_NOT_SUPPORTED_ERROR="CCTPDoesNotSupportedError",R.OFT_DOES_NOT_SUPPORTED_ERROR="OFTDoesNotSupportedError",R.YIELD_DOES_NOT_SUPPORTED_ERROR="YieldDoesNotSupportedError",R.TX_TOO_LARGE="TxTooLargeError",R))(Ws||{});var ke=(R=>(R.BSC="BSC",R.ETH="ETH",R.BAS="BAS",R.SOL="SOL",R.TRX="TRX",R.POL="POL",R.ARB="ARB",R.CEL="CEL",R.AVA="AVA",R.SRB="SRB",R.STLR="STLR",R.OPT="OPT",R.SUI="SUI",R.SNC="SNC",R.UNI="UNI",R.LIN="LIN",R.ALG="ALG",R.STX="STX",R))(ke||{}),D=(c=>(c.EVM="EVM",c.SOLANA="SOLANA",c.TRX="TRX",c.SRB="SRB",c.SUI="SUI",c.ALG="ALG",c.STX="STX",c))(D||{});var ug={EVM:18,SOLANA:9,TRX:6,SRB:7,SUI:9,ALG:6,STX:6},pg={BSC:{chainSymbol:"BSC",chainId:"0x38",name:"BNB Chain",chainType:"EVM"},ETH:{chainSymbol:"ETH",chainId:"0x1",name:"Ethereum",chainType:"EVM"},BAS:{chainSymbol:"BAS",chainId:"0x2105",name:"Base",chainType:"EVM"},ARB:{chainSymbol:"ARB",chainId:"0xa4b1",name:"Arbitrum",chainType:"EVM"},AVA:{chainSymbol:"AVA",chainId:"0xa86a",name:"Avalanche",chainType:"EVM"},CEL:{chainSymbol:"CEL",chainId:"0xa4ec",name:"Celo",chainType:"EVM"},POL:{chainSymbol:"POL",chainId:"0x89",name:"Polygon",chainType:"EVM"},OPT:{chainSymbol:"OPT",chainId:"0xa",name:"OP Mainnet",chainType:"EVM"},SNC:{chainSymbol:"SNC",chainId:"0x92",name:"Sonic",chainType:"EVM"},UNI:{chainSymbol:"UNI",chainId:"0x82",name:"Unichain",chainType:"EVM"},LIN:{chainSymbol:"LIN",chainId:"0xe708",name:"Linea",chainType:"EVM"},SOL:{chainSymbol:"SOL",name:"Solana",chainType:"SOLANA"},TRX:{chainSymbol:"TRX",name:"Tron",chainType:"TRX"},SRB:{chainSymbol:"SRB",name:"Stellar",chainType:"SRB"},STLR:{chainSymbol:"STLR",name:"Stellar",chainType:"SRB"},SUI:{chainSymbol:"SUI",name:"Sui",chainType:"SUI"},ALG:{chainSymbol:"ALG",name:"Algorand",chainType:"ALG"},STX:{chainSymbol:"STX",name:"Stacks",chainType:"STX"}},k=(()=>{let a={...pg};return{addChainsProperties(n){a={...a,...n}},getChainProperty(n){let i=a[n];if(!i)throw new h(`Cannot find chain properties for ${n}`);return i},getChainsProperties(){return a},getChainDecimalsByType(n){return ug[n]}}})();var Aa=(d=>(d.OK="OK",d.INVALID="INVALID",d.FORBIDDEN="FORBIDDEN",d.UNINITIALIZED="UNINITIALIZED",d.CONTRACT_ADDRESS="CONTRACT_ADDRESS",d.WRONG_ASSOCIATED_ACCOUNT_OWNER="WRONG_ASSOCIATED_ACCOUNT_OWNER",d))(Aa||{}),jr=(s=>(s.ALLBRIDGE="allbridge",s.WORMHOLE="wormhole",s.CCTP="cctp",s.CCTP_V2="cctpV2",s.OFT="oft",s))(jr||{}),Ve=(s=>(s[s.ALLBRIDGE=1]="ALLBRIDGE",s[s.WORMHOLE=2]="WORMHOLE",s[s.CCTP=3]="CCTP",s[s.CCTP_V2=4]="CCTP_V2",s[s.OFT=5]="OFT",s))(Ve||{});var la=require("big.js");function se(a,n){throw new Error(n??`Unexpected value: ${a}`)}async function Ce(a,n){return await a.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}function Q(a){if((0,la.Big)(a).lte(0))throw new dt("Amount must be greater than zero")}function kr(a){if((0,la.Big)(a).lt(0))throw new dt("Amount must be greater or equal than zero")}function O(a,n,i){let r=(0,la.Big)(n).toFixed(),[o,s]=r.split(".");if(s&&s.length>i)throw new mi(a,s.length,i)}async function ua(a,n,i){return await Promise.race([a,new Promise((r,o)=>{setTimeout(()=>o(new Vn(n)),i)})])}async function Hr(a,n,i,r){if(i<1)throw new Error(`Bad argument: 'maxRetries' must be greater than 0, but ${i} was received.`);let o=0;for(;;)try{return await ua(a(),n,r)}catch{if(++o>=i)throw new Vn(n)}}async function Ts(a,n,i,r=1.5,o=!1){let s=[],d=0,c=await a();if(s.push(c),!n(c))return s;let g=new Date(Date.now()+i*1e3).valueOf(),A=1e3,l=A;for(;Date.now()<g;){let u=s[s.length-1];if(u===void 0||!n(u))break;d++,o&&console.info(`Waiting ${A}ms before trying again (bringing the total wait time to ${l}ms so far, of total ${i*1e3}ms)`),await new Promise(C=>setTimeout(C,A)),A=A*r,new Date(Date.now()+A).valueOf()>g&&(A=g-Date.now(),o&&console.info(`was gonna wait too long; new waitTime: ${A}ms`)),l=A+l;let b=await a(u);s.push(b),o&&n(b)&&console.info(`${d}. Called ${a.name}; ${s.length} prev attempts. Most recent: ${JSON.stringify(s[s.length-1],null,2)}`)}return s}var zs=require("@algorandfoundation/algokit-utils/types/amount"),Mn=ce(require("algosdk"));var Fs=require("@algorandfoundation/algokit-utils/types/app-arc56"),Ii=require("@algorandfoundation/algokit-utils/types/app-client"),mg=require("@algorandfoundation/algokit-utils/types/app-factory"),pa={name:"Bridge",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"byte",name:"chainId"},{type:"uint64",name:"messenger"},{type:"uint64",name:"gasOracle"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInAsset",args:[{type:"uint64",name:"asset"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"swapAndBridge",args:[{type:"pay",name:"paymentRef"},{type:"axfer",name:"assetTransferRef"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"swapAndBridgeWithStable",args:[{type:"axfer",name:"assetTransferRef"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"feeTokenAmount"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]}],recommendations:{}},{name:"receiveTokens",args:[{type:"pay",name:"paymentRef"},{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"uint64",name:"receiveAmountMin"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]}],recommendations:{}},{name:"registerBridge",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"bridgeAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"addBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removeBridgeToken",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"tokenAddress"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawGasTokens",args:[{type:"uint64",name:"amount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"withdrawBridgingFeeInTokens",args:[{type:"uint64",name:"asset"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getBridgingCostInTokens",args:[{type:"byte",name:"destinationChainId"},{type:"uint64",name:"asset"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"hashMessage",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"sourceChainId"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"}],returns:{type:"byte[32]"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"isOtherBridgeTokenSupported",args:[{type:"byte",name:"chainId"},{type:"byte[32]",name:"token"}],returns:{type:"bool"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getTransactionCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getReceiveTokensCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"getSendTransactionStorageCost",args:[],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"swap",args:[{type:"axfer",name:"assetTransferRef",desc:"The token to be swapped."},{type:"uint64",name:"receiveAsset",desc:"The token to receive in exchange for the swapped token."},{type:"address",name:"recipient",desc:"The address to receive the tokens."},{type:"uint64",name:"receiveAmountMin",desc:"The minimum amount of tokens required to receive during the swap."},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAA+g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],recommendations:{}},{name:"addPool",args:[{type:"uint64",name:"poolId",desc:"The address of the `Pool` contract."},{type:"uint64",name:"asset",desc:"The address of the token in the liquidity pool."}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"removePool",args:[{type:"uint64",name:"tokenId"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startSwap",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setStopAuthority",args:[{type:"address",name:"stopAuthority"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setRebalancer",args:[{type:"address",name:"rebalancer"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getGasUsage",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"setGasUsage",args:[{type:"byte",name:"chainId"},{type:"uint64",name:"gasAmount"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setGasOracle",args:[{type:"uint64",name:"gasOracle"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"getTransactionRelayerCost",args:[{type:"byte",name:"chainId"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"transferOwnership",args:[{type:"address",name:"newOwner"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:3,bytes:4},local:{ints:0,bytes:0}},keys:{global:{chainId:{keyType:"AVMString",valueType:"byte",key:"Y2hhaW5JZA=="},messenger:{keyType:"AVMString",valueType:"AVMUint64",key:"bWVzc2VuZ2Vy"},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},rebalancer:{keyType:"AVMString",valueType:"address",key:"cmViYWxhbmNlcg=="},canSwap:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuU3dhcA=="},gasOracle:{keyType:"AVMString",valueType:"AVMUint64",key:"Z2FzT3JhY2xl"},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{},box:{}},maps:{global:{},local:{},box:{processedMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"bQ=="},sentMessages:{keyType:"byte[32]",valueType:"byte[0]",prefix:"cw=="},otherBridges:{keyType:"byte",valueType:"byte[32]",prefix:"Yg=="},otherBridgeTokens:{keyType:"AVMBytes",valueType:"byte[0]",prefix:"dA=="},pools:{keyType:"uint64",valueType:"uint64",prefix:"cA=="},fromGasOracleScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"ZQ=="},bridgingFeeConversionScalingFactor:{keyType:"uint64",valueType:"uint64",prefix:"Zg=="},gasUsage:{keyType:"byte",valueType:"uint64",prefix:"dQ=="}}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[431],errorMessage:"Asset must go to app"},{pc:[877,1323,2099,2412,2424],errorMessage:"Box must have value"},{pc:[1835],errorMessage:"Bridge: amount too low for fee"},{pc:[1842],errorMessage:"Bridge: bridge to the zero address"},{pc:[911],errorMessage:"Bridge: message processed"},{pc:[961],errorMessage:"Bridge: no message"},{pc:[853,2063],errorMessage:"Bridge: not enough fee"},{pc:[843],errorMessage:"Bridge: source not registered"},{pc:[1950],errorMessage:"Bridge: tokens already sent"},{pc:[1915],errorMessage:"Bridge: unknown chain or token"},{pc:[1902],errorMessage:"Bridge: wrong destination chain"},{pc:[953,1256,1308,1995,2146,2289,2395,2469],errorMessage:"Bytes has valid prefix"},{pc:[447],errorMessage:"CloseTo not allowed"},{pc:[137],errorMessage:"OnCompletion must be NoOp"},{pc:[2484],errorMessage:"Only owner"},{pc:[439],errorMessage:"Rekey not allowed"},{pc:[1665],errorMessage:"Router: is not stopAuthority"},{pc:[2311],errorMessage:"Router: no pool"},{pc:[2221],errorMessage:"Router: no receive pool"},{pc:[832,1502,1825],errorMessage:"Router: swap prohibited"},{pc:[1166],errorMessage:"account opted into asset"},{pc:[2006,2319],errorMessage:"application exists"},{pc:[1599],errorMessage:"asset exists"},{pc:[831,858,920,1127,1174,1225,1267,1501,1663,1824,1896,1964,2108,2113,2236,2346,2430,2482],errorMessage:"check GlobalState exists"},{pc:[1956],errorMessage:"index access is out of bounds"},{pc:[958],errorMessage:"invalid number of bytes for arc4.bool"},{pc:[504,642,658,666,711,727,735,791,807,818,1040,1069,1098,1349,1373,1381,1406,1475,1686,1703,1803],errorMessage:"invalid number of bytes for arc4.static_array<arc4.uint8, 32>"},{pc:[520,529,561,674,743,752,779,826,1118,1148,1213,1261,1313,1340,1466,1483,1492,1571,1580,1643,1746,1768,2e3,2151,2294,2400,2474],errorMessage:"invalid number of bytes for arc4.uint64"},{pc:[512,650,719,799,1032,1061,1090,1205,1357,1365,1398,1434,1720,1738,1785],errorMessage:"invalid number of bytes for arc4.uint8"},{pc:[899,2205],errorMessage:"invalid size"},{pc:[634,703,1458],errorMessage:"transaction type is axfer"},{pc:[623,771],errorMessage:"transaction type is pay"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAwIDggMzIgMTU3MDAKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAiY2FuU3dhcCIgIm93bmVyIiAiZ2FzT3JhY2xlIiAicmViYWxhbmNlciIgImNoYWluSWQiICJtZXNzZW5nZXIiICJ0IiAicCIgInN0b3BBdXRob3JpdHkiIDB4MDEgMHgwMCAidSIgMHg0MzQxN2FhMyAweGY3NDc1YjgyIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAzZDU0IDB4MDY4MTAxCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYm56IG1haW5fYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGludGNfMSAvLyAwCiAgICBiemVybwogICAgYnl0ZWMgNCAvLyAicmViYWxhbmNlciIKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUzCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgaW50Y18wIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CgptYWluX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGV4cG9ydCBjbGFzcyBCcmlkZ2UgZXh0ZW5kcyBSb3V0ZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nLCBJQnJpZGdlIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAzMwogICAgcHVzaGJ5dGVzcyAweDY1ZjcwNTczIDB4M2UzODAyN2MgMHhhNDYwMGFlZCAweGRlNGNhZDRhIDB4NGViYTA3MjEgMHhjNjE3ZWQ3MyAweDU3NTMxNTYwIDB4NjM4MDgyNzggMHgwNjUwN2M2YSAweGY1Zjk2ZWIzIDB4NGIwNjJjYTAgMHhjM2NkZDkyYSAvLyBtZXRob2QgIm9wdEluQXNzZXQodWludDY0KXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2UocGF5LGF4ZmVyLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0KXZvaWQiLCBtZXRob2QgInN3YXBBbmRCcmlkZ2VXaXRoU3RhYmxlKGF4ZmVyLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0sYnl0ZVszMl0sdWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZWNlaXZlVG9rZW5zKHBheSx1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSx1aW50NjQpdm9pZCIsIG1ldGhvZCAicmVnaXN0ZXJCcmlkZ2UoYnl0ZSxieXRlWzMyXSl2b2lkIiwgbWV0aG9kICJhZGRCcmlkZ2VUb2tlbihieXRlLGJ5dGVbMzJdKXZvaWQiLCBtZXRob2QgInJlbW92ZUJyaWRnZVRva2VuKGJ5dGUsYnl0ZVszMl0pdm9pZCIsIG1ldGhvZCAid2l0aGRyYXdHYXNUb2tlbnModWludDY0KXZvaWQiLCBtZXRob2QgIndpdGhkcmF3QnJpZGdpbmdGZWVJblRva2Vucyh1aW50NjQpdm9pZCIsIG1ldGhvZCAiZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMoYnl0ZSx1aW50NjQpdWludDY0IiwgbWV0aG9kICJoYXNoTWVzc2FnZSh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlLGJ5dGVbMzJdLGJ5dGVbMzJdKWJ5dGVbMzJdIiwgbWV0aG9kICJpc090aGVyQnJpZGdlVG9rZW5TdXBwb3J0ZWQoYnl0ZSxieXRlWzMyXSlib29sIgogICAgYnl0ZWMgMTMgLy8gbWV0aG9kICJnZXRUcmFuc2FjdGlvbkNvc3QoYnl0ZSl1aW50NjQiCiAgICBwdXNoYnl0ZXNzIDB4MDdkZjg0MjkgMHg4MGM1YzcwZiAweDQxMzRkMDY4IDB4ZWYxNWY4NTUgMHg2YjFlZTIyMyAweDE4NzBhNDkyIDB4MzU1NzMyNGQgMHgwNGIxNjFmMSAweGQyYjM1N2ViIC8vIG1ldGhvZCAiZ2V0UmVjZWl2ZVRva2Vuc0Nvc3QoKXVpbnQ2NCIsIG1ldGhvZCAiZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3QoKXVpbnQ2NCIsIG1ldGhvZCAic3dhcChheGZlcix1aW50NjQsYWRkcmVzcyx1aW50NjQsdWludDY0KXZvaWQiLCBtZXRob2QgImFkZFBvb2wodWludDY0LHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJyZW1vdmVQb29sKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wU3dhcCgpdm9pZCIsIG1ldGhvZCAic3RhcnRTd2FwKCl2b2lkIiwgbWV0aG9kICJzZXRTdG9wQXV0aG9yaXR5KGFkZHJlc3Mpdm9pZCIsIG1ldGhvZCAic2V0UmViYWxhbmNlcihhZGRyZXNzKXZvaWQiCiAgICBieXRlYyAxNCAvLyBtZXRob2QgImdldEdhc1VzYWdlKGJ5dGUpdWludDY0IgogICAgcHVzaGJ5dGVzcyAweDBjYTVhZTdhIDB4Mjc0NzBmMDcgMHhjYmZjNmQwMiAweGUxN2JhZmI0IC8vIG1ldGhvZCAic2V0R2FzVXNhZ2UoYnl0ZSx1aW50NjQpdm9pZCIsIG1ldGhvZCAic2V0R2FzT3JhY2xlKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGJ5dGUpdWludDY0IiwgbWV0aG9kICJ0cmFuc2Zlck93bmVyc2hpcChhZGRyZXNzKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBvcHRJbkFzc2V0IHN3YXBBbmRCcmlkZ2Ugc3dhcEFuZEJyaWRnZVdpdGhTdGFibGUgcmVjZWl2ZVRva2VucyByZWdpc3RlckJyaWRnZSBhZGRCcmlkZ2VUb2tlbiByZW1vdmVCcmlkZ2VUb2tlbiB3aXRoZHJhd0dhc1Rva2VucyB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnMgZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnMgaGFzaE1lc3NhZ2UgaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkIGdldFRyYW5zYWN0aW9uQ29zdCBtYWluX2dldFJlY2VpdmVUb2tlbnNDb3N0X3JvdXRlQDE4IG1haW5fZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3Rfcm91dGVAMTkgc3dhcCBhZGRQb29sIHJlbW92ZVBvb2wgc3RvcFN3YXAgc3RhcnRTd2FwIHNldFN0b3BBdXRob3JpdHkgc2V0UmViYWxhbmNlciBnZXRHYXNVc2FnZSBzZXRHYXNVc2FnZSBzZXRHYXNPcmFjbGUgZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdCB0cmFuc2Zlck93bmVyc2hpcAogICAgZXJyCgptYWluX2dldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgYnl0ZWMgMTUgLy8gMHgxNTFmN2M3NTAwMDAwMDAwMDAwMDNkNTQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9nZXRSZWNlaXZlVG9rZW5zQ29zdF9yb3V0ZUAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDE1IC8vIDB4MTUxZjdjNzUwMDAwMDAwMDAwMDAzZDU0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fY3JlYXRlX05vT3BAMzM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU1CiAgICAvLyBleHBvcnQgY2xhc3MgQnJpZGdlIGV4dGVuZHMgUm91dGVyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZywgSUJyaWRnZSB7CiAgICBwdXNoYnl0ZXMgMHg2NjRjYTQwNCAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYnl0ZSx1aW50NjQsdWludDY0KXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBjcmVhdGVBcHBsaWNhdGlvbgogICAgZXJyCgoKLy8gX3B1eWFfbGliLnV0aWwuZW5zdXJlX2J1ZGdldChyZXF1aXJlZF9idWRnZXQ6IHVpbnQ2NCwgZmVlX3NvdXJjZTogdWludDY0KSAtPiB2b2lkOgplbnN1cmVfYnVkZ2V0OgogICAgcHJvdG8gMiAwCiAgICBmcmFtZV9kaWcgLTIKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgICsKCmVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDE6CiAgICBmcmFtZV9kaWcgMAogICAgZ2xvYmFsIE9wY29kZUJ1ZGdldAogICAgPgogICAgYnogZW5zdXJlX2J1ZGdldF9hZnRlcl93aGlsZUA2CiAgICBpdHhuX2JlZ2luCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgcHVzaGludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCiAgICBpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgogICAgYnl0ZWMgMTYgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQXBwcm92YWxQcm9ncmFtCiAgICBieXRlYyAxNiAvLyAweDA2ODEwMQogICAgaXR4bl9maWVsZCBDbGVhclN0YXRlUHJvZ3JhbQogICAgZnJhbWVfZGlnIC0xCiAgICBzd2l0Y2ggZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDMgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1OgogICAgaXR4bl9zdWJtaXQKICAgIGIgZW5zdXJlX2J1ZGdldF93aGlsZV90b3BAMQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8xQDQ6CiAgICBnbG9iYWwgTWluVHhuRmVlCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgYiBlbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANQoKZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV8wQDM6CiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclR4bjogdWludDY0KSAtPiB1aW50NjQ6CmFtb3VudEZyb21Bc3NldFRyYW5zZmVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIzCiAgICAvLyBleHBvcnQgZnVuY3Rpb24gYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclR4bjogZ3R4bi5Bc3NldFRyYW5zZmVyVHhuKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI0CiAgICAvLyBhc3NlcnQoYXNzZXRUcmFuc2ZlclR4bi5hc3NldFJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgYEFzc2V0IG11c3QgZ28gdG8gYXBwYCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIEFzc2V0IG11c3QgZ28gdG8gYXBwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjcKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLnJla2V5VG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYFJla2V5IG5vdCBhbGxvd2VkYCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIFJla2V5VG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBSZWtleSBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI4CiAgICAvLyBhc3NlcnQoYXNzZXRUcmFuc2ZlclR4bi5hc3NldENsb3NlVG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYENsb3NlVG8gbm90IGFsbG93ZWRgKTsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQ2xvc2VUbyBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI5CiAgICAvLyByZXR1cm4gYXNzZXRUcmFuc2ZlclR4bi5hc3NldEFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YW1vdW50RnJvbVBheW1lbnQocGF5bWVudFR4bjogdWludDY0KSAtPiB1aW50NjQ6CmFtb3VudEZyb21QYXltZW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjMyCiAgICAvLyBleHBvcnQgZnVuY3Rpb24gYW1vdW50RnJvbVBheW1lbnQocGF5bWVudFR4bjogZ3R4bi5QYXltZW50VHhuKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjMzCiAgICAvLyBpZiAocGF5bWVudFR4bi5yZWNlaXZlciAhPT0gR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MpIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0xCiAgICBndHhucyBSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgICE9CiAgICBieiBhbW91bnRGcm9tUGF5bWVudF9hZnRlcl9pZl9lbHNlQDIKICAgIGludGNfMSAvLyAwCiAgICByZXRzdWIKCmFtb3VudEZyb21QYXltZW50X2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czozNQogICAgLy8gaWYgKHBheW1lbnRUeG4ucmVrZXlUbyAhPT0gR2xvYmFsLnplcm9BZGRyZXNzKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICAhPQogICAgYnogYW1vdW50RnJvbVBheW1lbnRfYWZ0ZXJfaWZfZWxzZUA0CiAgICBpbnRjXzEgLy8gMAogICAgcmV0c3ViCgphbW91bnRGcm9tUGF5bWVudF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzYKICAgIC8vIGlmIChwYXltZW50VHhuLmNsb3NlUmVtYWluZGVyVG8gIT09IEdsb2JhbC56ZXJvQWRkcmVzcykgcmV0dXJuIDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIENsb3NlUmVtYWluZGVyVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgIT0KICAgIGJ6IGFtb3VudEZyb21QYXltZW50X2FmdGVyX2lmX2Vsc2VANgogICAgaW50Y18xIC8vIDAKICAgIHJldHN1YgoKYW1vdW50RnJvbVBheW1lbnRfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjM4CiAgICAvLyByZXR1cm4gcGF5bWVudFR4bi5hbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGd0eG5zIEFtb3VudAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmNyZWF0ZUFwcGxpY2F0aW9uW3JvdXRpbmddKCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY5CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbihvd25lcjogQWRkcmVzcywgY2hhaW5JZDogQnl0ZSwgbWVzc2VuZ2VyOiBBcHBsaWNhdGlvbiwgZ2FzT3JhY2xlOiBBcHBsaWNhdGlvbik6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjkKICAgIC8vIHRoaXMub3duZXIudmFsdWUgPSBvd25lcjsKICAgIGRpZyA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTQKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NDIKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgOSAvLyAic3RvcEF1dGhvcml0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTcKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3MQogICAgLy8gdGhpcy5jaGFpbklkLnZhbHVlID0gY2hhaW5JZDsKICAgIHVuY292ZXIgMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3MgogICAgLy8gdGhpcy5tZXNzZW5nZXIudmFsdWUgPSBtZXNzZW5nZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIGNoYWluSWQ6IEJ5dGUsIG1lc3NlbmdlcjogQXBwbGljYXRpb24sIGdhc09yYWNsZTogQXBwbGljYXRpb24pOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc1CiAgICAvLyBvcHRJbkFzc2V0KGFzc2V0OiBBc3NldCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3NgogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc5LTg1CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODIKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjc5LTg0CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3OS04NQogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6ODcKICAgIC8vIGxvZygnQnJpZGdlOiBvcHQtaW4gY29tcGxldGVkJyk7CiAgICBwdXNoYnl0ZXMgIkJyaWRnZTogb3B0LWluIGNvbXBsZXRlZCIKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo3NQogICAgLy8gb3B0SW5Bc3NldChhc3NldDogQXNzZXQpOiB2b2lkIHsKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uuc3dhcEFuZEJyaWRnZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgcHVzaGludCAyIC8vIDIKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4biBHcm91cEluZGV4CiAgICBpbnRjXzAgLy8gMQogICAgLQogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgcHVzaGludCA0IC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDAKICAgIC8vIHRoaXMuX3N3YXBBbmRCcmlkZ2UoYW1vdW50RnJvbVBheW1lbnQocGF5bWVudFJlZiksIGFzc2V0VHJhbnNmZXJSZWYsIHJlY2lwaWVudCwgZGVzdGluYXRpb25DaGFpbklkLCByZWNlaXZlVG9rZW4sIG5vbmNlLCAwLCBidWRnZXQpOwogICAgdW5jb3ZlciA2CiAgICBjYWxsc3ViIGFtb3VudEZyb21QYXltZW50CiAgICBjb3ZlciA2CiAgICBjb3ZlciA2CiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciA3CiAgICBjYWxsc3ViIF9zd2FwQW5kQnJpZGdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjkwCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLnN3YXBBbmRCcmlkZ2VXaXRoU3RhYmxlW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEFuZEJyaWRnZVdpdGhTdGFibGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEwMwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAxMDAwIH0gfSB9KQogICAgdHhuIEdyb3VwSW5kZXgKICAgIGludGNfMCAvLyAxCiAgICAtCiAgICBkdXAKICAgIGd0eG5zIFR5cGVFbnVtCiAgICBwdXNoaW50IDQgLy8gYXhmZXIKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBheGZlcgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExMwogICAgLy8gdGhpcy5fc3dhcEFuZEJyaWRnZSgwLCBhc3NldFRyYW5zZmVyUmVmLCByZWNpcGllbnQsIGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuLCBub25jZSwgZmVlVG9rZW5BbW91bnQsIGJ1ZGdldCk7CiAgICBpbnRjXzEgLy8gMAogICAgY292ZXIgNwogICAgY2FsbHN1YiBfc3dhcEFuZEJyaWRnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMTAwMCB9IH0gfSkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVjZWl2ZVRva2Vuc1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnJlY2VpdmVUb2tlbnM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE5MwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIGludGNfMCAvLyBwYXkKICAgID09CiAgICBhc3NlcnQgLy8gdHJhbnNhY3Rpb24gdHlwZSBpcyBwYXkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgY292ZXIgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNQogICAgZHVwCiAgICBjb3ZlciA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjQKICAgIC8vIGFzc2VydCh0aGlzLmNhblN3YXAudmFsdWUsICdSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZCcpOwogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTMKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NlcnQgLy8gUm91dGVyOiBzd2FwIHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIG90aGVyQnJpZGdlcyA9IEJveE1hcDxCeXRlLCBTdGF0aWNCeXRlczwzMj4+KHsga2V5UHJlZml4OiAnYicgfSk7CiAgICBwdXNoYnl0ZXMgImIiCiAgICBkaWcgNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNAogICAgLy8gYXNzZXJ0KHRoaXMub3RoZXJCcmlkZ2VzKHNvdXJjZUNoYWluSWQpLmV4aXN0cywgJ0JyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkJyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYXNzZXJ0IC8vIEJyaWRnZTogc291cmNlIG5vdCByZWdpc3RlcmVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNgogICAgLy8gY29uc3QgdmFsdWUgPSBhbW91bnRGcm9tUGF5bWVudChwYXltZW50UmVmKTsKICAgIHVuY292ZXIgNwogICAgY2FsbHN1YiBhbW91bnRGcm9tUGF5bWVudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMDcKICAgIC8vIGFzc2VydCh2YWx1ZSA+PSBzdG9yYWdlRmVlLCAnQnJpZGdlOiBub3QgZW5vdWdoIGZlZScpOwogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0OAogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwNwogICAgLy8gYXNzZXJ0KHZhbHVlID49IHN0b3JhZ2VGZWUsICdCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlJyk7CiAgICA+PQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbm90IGVub3VnaCBmZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgc291cmNlQ2hhaW5JZCwgdGhpcy5jaGFpbklkLnZhbHVlLCByZWNlaXZlVG9rZW4sIG5vbmNlKTsKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjaGFpbklkID0gR2xvYmFsU3RhdGU8Qnl0ZT4oKTsKICAgIGJ5dGVjIDUgLy8gImNoYWluSWQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIwOQogICAgLy8gY29uc3QgbWVzc2FnZSA9IHRoaXMuaGFzaE1lc3NhZ2UoYW1vdW50LCByZWNpcGllbnQsIHNvdXJjZUNoYWluSWQsIHRoaXMuY2hhaW5JZC52YWx1ZSwgcmVjZWl2ZVRva2VuLCBub25jZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDgKICAgIGRpZyA4CiAgICB1bmNvdmVyIDgKICAgIHVuY292ZXIgMwogICAgZGlnIDgKICAgIHVuY292ZXIgOAogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjEwCiAgICAvLyBjb25zdCBtZXNzYWdlV2l0aFNlbmRlciA9IGhhc2hXaXRoU2VuZGVyQWRkcmVzcyhtZXNzYWdlLCB0aGlzLm90aGVyQnJpZGdlcyhzb3VyY2VDaGFpbklkKS52YWx1ZS5ieXRlcyk7CiAgICB1bmNvdmVyIDIKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NTIKICAgIC8vIGNvbnN0IGg6IGJ5dGVzID0gb3Aua2VjY2FrMjU2KG9wLmNvbmNhdChtZXNzYWdlLmJ5dGVzLCBzZW5kZXJBZGRyZXNzKSk7CiAgICBkaWcgMQogICAgc3dhcAogICAgY29uY2F0CiAgICBrZWNjYWsyNTYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo1NQogICAgLy8gY29uc3QgZmlyc3QyID0gb3Auc3Vic3RyaW5nKG1lc3NhZ2UuYnl0ZXMsIDAsIDIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDAgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjU3CiAgICAvLyBjb25zdCBsYXN0MzAgPSBvcC5zdWJzdHJpbmcoaCwgMiwgMzIpOwogICAgc3dhcAogICAgc3Vic3RyaW5nIDIgMzIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo2MAogICAgLy8gcmV0dXJuIG5ldyBTdGF0aWNCeXRlczwzMj4ob3AuY29uY2F0KGZpcnN0MiwgbGFzdDMwKSk7CiAgICBjb25jYXQKICAgIGR1cAogICAgY292ZXIgNgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHNpemUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIHByb2Nlc3NlZE1lc3NhZ2VzID0gQm94TWFwPFN0YXRpY0J5dGVzPDMyPiwgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAnbScgfSk7CiAgICBwdXNoYnl0ZXMgIm0iCiAgICBkaWcgMQogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxMgogICAgLy8gYXNzZXJ0KCF0aGlzLnByb2Nlc3NlZE1lc3NhZ2VzKG1lc3NhZ2VXaXRoU2VuZGVyKS5leGlzdHMsICdCcmlkZ2U6IG1lc3NhZ2UgcHJvY2Vzc2VkJyk7CiAgICBkdXAKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgIQogICAgYXNzZXJ0IC8vIEJyaWRnZTogbWVzc2FnZSBwcm9jZXNzZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnByb2Nlc3NlZE1lc3NhZ2VzKG1lc3NhZ2VXaXRoU2VuZGVyKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNy0yMjEKICAgIC8vIGFzc2VydChhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsCiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxOQogICAgLy8gYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIxNy0yMjEKICAgIC8vIGFzc2VydChhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLnJlY2VpdmVkTWVzc2FnZXMsCiAgICAvLyAgIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW21lc3NhZ2VXaXRoU2VuZGVyXSwKICAgIC8vIH0pLnJldHVyblZhbHVlLCAnQnJpZGdlOiBubyBtZXNzYWdlJyk7CiAgICBwdXNoYnl0ZXMgMHgzM2UxNDdhYSAvLyBtZXRob2QgInJlY2VpdmVkTWVzc2FnZXMoYnl0ZVszMl0pYm9vbCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5ib29sCiAgICBpbnRjXzEgLy8gMAogICAgZ2V0Yml0CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBubyBtZXNzYWdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIyMwogICAgLy8gY29uc3QgdG9rZW5JZDogdWludDY0ID0gb3AuZXh0cmFjdFVpbnQ2NChyZWNlaXZlVG9rZW4uYnl0ZXMsIDI0KTsKICAgIHVuY292ZXIgMgogICAgcHVzaGludCAyNCAvLyAyNAogICAgZXh0cmFjdF91aW50NjQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjI1LTIzMAogICAgLy8gY29uc3QgcmVjZWl2ZUFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgQXNzZXQodG9rZW5JZCksCiAgICAvLyAgIHJlY2lwaWVudEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbiwKICAgIC8vICk7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNAogICAgdW5jb3ZlciA0CiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyByZXR1cm4gMTU3MDA7CiAgICBpbnRjIDQgLy8gMTU3MDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjMzCiAgICAvLyBjb25zdCBleHRyYUdhczogdWludDY0ID0gdmFsdWUgLSBzdG9yYWdlRmVlOwogICAgLQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjIzNAogICAgLy8gaWYgKGV4dHJhR2FzID4gMCkgewogICAgYnogcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjM1LTIzOAogICAgLy8gaXR4bi5wYXltZW50KHsKICAgIC8vICAgYW1vdW50OiBleHRyYUdhcywKICAgIC8vICAgcmVjZWl2ZXI6IHJlY2lwaWVudEFkZHJlc3MuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIGRpZyA0CiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBkdXAKICAgIGl0eG5fZmllbGQgQW1vdW50CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKcmVjZWl2ZVRva2Vuc19hZnRlcl9pZl9lbHNlQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDYKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsKICAgIC8vICAgcmVjZWl2ZUFtb3VudCwKICAgIC8vICAgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLAogICAgLy8gICBub25jZSwKICAgIC8vICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciwKICAgIC8vIH0pOwogICAgZGlnIDEKICAgIGl0b2IKICAgIGRpZyA1CiAgICBjb25jYXQKICAgIGRpZyA0CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ0CiAgICAvLyBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0MC0yNDYKICAgIC8vIGVtaXQ8VG9rZW5zUmVjZWl2ZWQ+KHsKICAgIC8vICAgcmVjZWl2ZUFtb3VudCwKICAgIC8vICAgcmVjaXBpZW50OiByZWNpcGllbnRBZGRyZXNzLAogICAgLy8gICBub25jZSwKICAgIC8vICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICBtZXNzYWdlOiBtZXNzYWdlV2l0aFNlbmRlciwKICAgIC8vIH0pOwogICAgY29uY2F0CiAgICBkaWcgMwogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHg0NTgzNmFkNiAvLyBtZXRob2QgIlRva2Vuc1JlY2VpdmVkKHVpbnQ2NCxhZGRyZXNzLGJ5dGVbMzJdLGJ5dGUsYnl0ZVszMl0pIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTkzCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVnaXN0ZXJCcmlkZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpyZWdpc3RlckJyaWRnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjQ5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1MQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyBvdGhlckJyaWRnZXMgPSBCb3hNYXA8Qnl0ZSwgU3RhdGljQnl0ZXM8MzI+Pih7IGtleVByZWZpeDogJ2InIH0pOwogICAgcHVzaGJ5dGVzICJiIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjUyCiAgICAvLyB0aGlzLm90aGVyQnJpZGdlcyhjaGFpbklkKS52YWx1ZSA9IGJyaWRnZUFkZHJlc3M7CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI0OQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmFkZEJyaWRnZVRva2VuW3JvdXRpbmddKCkgLT4gdm9pZDoKYWRkQnJpZGdlVG9rZW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI1NQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNTcKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNjEKICAgIC8vIHJldHVybiBjaGFpbklkLmJ5dGVzLmNvbmNhdCh0b2tlbi5ieXRlcyk7CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NjcKICAgIC8vIG90aGVyQnJpZGdlVG9rZW5zID0gQm94TWFwPGJ5dGVzLCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICd0JyB9KTsKICAgIGJ5dGVjIDcgLy8gInQiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU4CiAgICAvLyB0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGNoYWluSWQsIHRva2VuQWRkcmVzcykpLnZhbHVlID0gbmV3IFN0YXRpY0J5dGVzKCk7CiAgICBwdXNoYnl0ZXMgMHgKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjU1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UucmVtb3ZlQnJpZGdlVG9rZW5bcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVCcmlkZ2VUb2tlbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI2MwogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM2MQogICAgLy8gcmV0dXJuIGNoYWluSWQuYnl0ZXMuY29uY2F0KHRva2VuLmJ5dGVzKTsKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NwogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW5BZGRyZXNzKSkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjYxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdHYXNUb2tlbnNbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhd0dhc1Rva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY5CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyBpdHhuLnBheW1lbnQoeyBhbW91bnQ6IGFtb3VudCwgcmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMgfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzIgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzAKICAgIC8vIGl0eG4ucGF5bWVudCh7IGFtb3VudDogYW1vdW50LCByZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcyB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIFJlY2VpdmVyCiAgICBpdHhuX2ZpZWxkIEFtb3VudAogICAgaW50Y18wIC8vIDEKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2Uud2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zW3JvdXRpbmddKCkgLT4gdm9pZDoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzMKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3NgogICAgLy8gY29uc3QgYXBwQWNjdDogQWNjb3VudCA9IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzOwogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgIGR1cAogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzcKICAgIC8vIGNvbnN0IGJhbGFuY2UgPSBhc3NldC5iYWxhbmNlKGFwcEFjY3QpOwogICAgc3dhcAogICAgYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGFjY291bnQgb3B0ZWQgaW50byBhc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzgKICAgIC8vIGlmIChiYWxhbmNlID4gVWludDY0KDApKSB7CiAgICBieiB3aXRoZHJhd0JyaWRnaW5nRmVlSW5Ub2tlbnNfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI3OS0yODQKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHNlbmRlcjogYXBwQWNjdCwKICAgIC8vICAgeGZlckFzc2V0OiBhc3NldCwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGJhbGFuY2UsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjgzCiAgICAvLyBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBkaWcgMgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyNzktMjg0CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICBzZW5kZXI6IGFwcEFjY3QsCiAgICAvLyAgIHhmZXJBc3NldDogYXNzZXQsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBiYWxhbmNlLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAoKd2l0aGRyYXdCcmlkZ2luZ0ZlZUluVG9rZW5zX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MjczCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuZ2V0QnJpZGdpbmdDb3N0SW5Ub2tlbnNbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRCcmlkZ2luZ0Nvc3RJblRva2VuczoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjg4CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTMKICAgIC8vIGNvbnN0IGJyaWRnZUdhc0Ftb3VudDogdWludDY0ID0gdGhpcy5nZXRHYXNVc2FnZShkZXN0aW5hdGlvbkNoYWluSWQpOwogICAgZGlnIDEKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0R2FzVXNhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6Mjk0LTI5OAogICAgLy8gY29uc3QgbWVzc2VuZ2VyR2FzQW1vdW50OiB1aW50NjQgPSBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLmdldEdhc1VzYWdlLAogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NgogICAgLy8gYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIG1lc3NlbmdlciA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWMgNiAvLyAibWVzc2VuZ2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoyOTYKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI5NC0yOTgKICAgIC8vIGNvbnN0IG1lc3Nlbmdlckdhc0Ftb3VudDogdWludDY0ID0gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogTWVzc2VuZ2VyLnByb3RvdHlwZS5nZXRHYXNVc2FnZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgYnl0ZWMgMTQgLy8gbWV0aG9kICJnZXRHYXNVc2FnZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBkaWcgMwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMC0zMDQKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNELAogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWQsIGJyaWRnZUdhc0Ftb3VudCArIG1lc3Nlbmdlckdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjkKICAgIC8vIGdhc09yYWNsZSA9IEdsb2JhbFN0YXRlPEFwcGxpY2F0aW9uPigpOwogICAgYnl0ZWNfMyAvLyAiZ2FzT3JhY2xlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIGNvdmVyIDIKICAgICsKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAwLTMwNAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWU7CiAgICBwdXNoYnl0ZXMgMHg3YmY3ZDUwYyAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uR2FzQ29zdEluVVNEKGJ5dGUsdWludDY0KXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICB1bmNvdmVyIDMKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozNgogICAgLy8gcHJvdGVjdGVkIGZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZScgfSk7CiAgICBwdXNoYnl0ZXMgImUiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzA0CiAgICAvLyB9KS5yZXR1cm5WYWx1ZSAvIHRoaXMuZnJvbUdhc09yYWNsZVNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzAwLTMwNAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5VU0QsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2Rlc3RpbmF0aW9uQ2hhaW5JZCwgYnJpZGdlR2FzQW1vdW50ICsgbWVzc2VuZ2VyR2FzQW1vdW50XSwKICAgIC8vIH0pLnJldHVyblZhbHVlIC8gdGhpcy5mcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWU7CiAgICAvCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjI4OAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlW3JvdXRpbmddKCkgLT4gdm9pZDoKaGFzaE1lc3NhZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMQogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50OAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDYKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaGFzaE1lc3NhZ2UKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkW3JvdXRpbmddKCkgLT4gdm9pZDoKaXNPdGhlckJyaWRnZVRva2VuU3VwcG9ydGVkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMzQKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjY3CiAgICAvLyBvdGhlckJyaWRnZVRva2VucyA9IEJveE1hcDxieXRlcywgU3RhdGljQnl0ZXM+KHsga2V5UHJlZml4OiAndCcgfSk7CiAgICBieXRlYyA3IC8vICJ0IgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzNgogICAgLy8gcmV0dXJuIHRoaXMub3RoZXJCcmlkZ2VUb2tlbnModGhpcy5fZ2V0T3RoZXJCcmlkZ2VUb2tlbnNLZXkoY2hhaW5JZCwgdG9rZW4pKS5leGlzdHM7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM0CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjIDExIC8vIDB4MDAKICAgIGludGNfMSAvLyAwCiAgICB1bmNvdmVyIDIKICAgIHNldGJpdAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5nZXRUcmFuc2FjdGlvbkNvc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRUcmFuc2FjdGlvbkNvc3Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzQxCiAgICAvLyByZXR1cm4gdGhpcy5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0KGNoYWluSWQpICsgdGhpcy5nZXRTZW5kVHJhbnNhY3Rpb25TdG9yYWdlQ29zdCgpOwogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM1NQogICAgLy8gcmV0dXJuIDE1NzAwOwogICAgaW50YyA0IC8vIDE1NzAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gcmV0dXJuIHRoaXMuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkKSArIHRoaXMuZ2V0U2VuZFRyYW5zYWN0aW9uU3RvcmFnZUNvc3QoKTsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzM5CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGl0b2IKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3dhcFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnN3YXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjgxCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18wIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6ODkKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18xIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MwogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NjQKICAgIC8vIGFzc2VydCh0aGlzLmNhblN3YXAudmFsdWUsICdSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBSb3V0ZXI6IHN3YXAgcHJvaGliaXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo5MQogICAgLy8gY29uc3Qgc2VuZGVyID0gbmV3IEFkZHJlc3MoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjkyCiAgICAvLyBjb25zdCBhbW91bnQgPSBhbW91bnRGcm9tQXNzZXRUcmFuc2Zlcihhc3NldFRyYW5zZmVyUmVmKTsKICAgIGRpZyA0CiAgICBjYWxsc3ViIGFtb3VudEZyb21Bc3NldFRyYW5zZmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjkzCiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgc2VuZGVyLCBhbW91bnQpOwogICAgdW5jb3ZlciA1CiAgICBndHhucyBYZmVyQXNzZXQKICAgIGR1cAogICAgZGlnIDMKICAgIGRpZyAzCiAgICBjYWxsc3ViIHNlbmRBbmRTd2FwVG9WVXNkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjk0CiAgICAvLyBjb25zdCByZWNlaXZlZEFtb3VudCA9IHRoaXMucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZChyZWNlaXZlQXNzZXQsIHJlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbik7CiAgICBkaWcgNgogICAgZGlnIDYKICAgIHVuY292ZXIgMgogICAgdW5jb3ZlciA2CiAgICBjYWxsc3ViIHJlY2VpdmVBbmRTd2FwRnJvbVZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6OTUtMTAyCiAgICAvLyBlbWl0PFN3YXBwZWQ+KHsKICAgIC8vICAgc2VuZGVyLAogICAgLy8gICByZWNpcGllbnQsCiAgICAvLyAgIHRva2VuSWQ6IGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkLAogICAgLy8gICByZWNlaXZlVG9rZW5JZDogcmVjZWl2ZUFzc2V0LmlkLAogICAgLy8gICBhbW91bnQsCiAgICAvLyAgIHJlY2VpdmVkQW1vdW50LAogICAgLy8gfSk7CiAgICB1bmNvdmVyIDMKICAgIHVuY292ZXIgNAogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgdW5jb3ZlciAzCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBzd2FwCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweDE1NDA0NGIzIC8vIG1ldGhvZCAiU3dhcHBlZChhZGRyZXNzLGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjgxCiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDEwMDAgfSB9IH0pCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLmFkZFBvb2xbcm91dGluZ10oKSAtPiB2b2lkOgphZGRQb29sOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTQKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTUKICAgIC8vIHRoaXMucG9vbHMoYXNzZXQpLnZhbHVlID0gcG9vbElkOwogICAgZHVwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE1CiAgICAvLyB0aGlzLnBvb2xzKGFzc2V0KS52YWx1ZSA9IHBvb2xJZDsKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgYm94X3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTYKICAgIC8vIGNvbnN0IHRva2VuRGVjaW1hbHMgPSBhc3NldC5kZWNpbWFsczsKICAgIHN3YXAKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgYXNzZXJ0IC8vIGFzc2V0IGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMTcKICAgIC8vIHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgPSAxMCAqKiAoT1JBQ0xFX1BSSUNFX1BSRUNJU0lPTiAtIHRva2VuRGVjaW1hbHMgKyBDSEFJTl9QUkVDSVNJT04pOwogICAgcHVzaGludCA5IC8vIDkKICAgIHN3YXAKICAgIC0KICAgIGR1cAogICAgcHVzaGludCA2IC8vIDYKICAgICsKICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czozOQogICAgLy8gcHJvdGVjdGVkIGJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IgPSBCb3hNYXA8QXNzZXQsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICdmJyB9KTsKICAgIHB1c2hieXRlcyAiZiIKICAgIGRpZyAzCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE3CiAgICAvLyB0aGlzLmJyaWRnaW5nRmVlQ29udmVyc2lvblNjYWxpbmdGYWN0b3IoYXNzZXQpLnZhbHVlID0gMTAgKiogKE9SQUNMRV9QUklDRV9QUkVDSVNJT04gLSB0b2tlbkRlY2ltYWxzICsgQ0hBSU5fUFJFQ0lTSU9OKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIGJveF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyk7CiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBzd2FwCiAgICBleHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzYKICAgIC8vIHByb3RlY3RlZCBmcm9tR2FzT3JhY2xlU2NhbGluZ0ZhY3RvciA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ2UnIH0pOwogICAgcHVzaGJ5dGVzICJlIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmZyb21HYXNPcmFjbGVTY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSA9IDEwICoqIChPUkFDTEVfUFJJQ0VfUFJFQ0lTSU9OIC0gdG9rZW5EZWNpbWFscyk7CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjExMgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnJlbW92ZVBvb2xbcm91dGluZ10oKSAtPiB2b2lkOgpyZW1vdmVQb29sOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjEKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjQKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxMjQKICAgIC8vIHRoaXMucG9vbHModG9rZW5JZCkuZGVsZXRlKCk7CiAgICBib3hfZGVsCiAgICBwb3AKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTIxCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3RvcFN3YXBbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wU3dhcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NzEKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdSb3V0ZXI6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo0MgogICAgLy8gcHJpdmF0ZSBzdG9wQXV0aG9yaXR5ID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA5IC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo3MQogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1JvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHknKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJvdXRlcjogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6NTMKICAgIC8vIGNhblN3YXAgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsKICAgIGJ5dGVjXzEgLy8gImNhblN3YXAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzMwogICAgLy8gdGhpcy5jYW5Td2FwLnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzEgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTMwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIuc3RhcnRTd2FwW3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnRTd2FwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDEKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MwogICAgLy8gY2FuU3dhcCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOwogICAgYnl0ZWNfMSAvLyAiY2FuU3dhcCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTQyCiAgICAvLyB0aGlzLmNhblN3YXAudmFsdWUgPSB0cnVlOwogICAgaW50Y18wIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjEzOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFN0b3BBdXRob3JpdHlbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRTdG9wQXV0aG9yaXR5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNDgKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1MAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjQyCiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDkgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1MQogICAgLy8gdGhpcy5zdG9wQXV0aG9yaXR5LnZhbHVlID0gc3RvcEF1dGhvcml0eTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE0OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNldFJlYmFsYW5jZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSZWJhbGFuY2VyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNTcKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1OQogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDQgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE2MAogICAgLy8gdGhpcy5yZWJhbGFuY2VyLnZhbHVlID0gcmViYWxhbmNlcjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE1NwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0R2FzVXNhZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldEdhc1VzYWdlCiAgICBpdG9iCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2Uuc2V0R2FzVXNhZ2Vbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjIKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ4CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI0CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICd1JyB9KTsKICAgIGJ5dGVjIDEyIC8vICJ1IgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjUKICAgIC8vIHRoaXMuZ2FzVXNhZ2UoY2hhaW5JZCkudmFsdWUgPSBnYXNBbW91bnQ7CiAgICBzd2FwCiAgICBpdG9iCiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjIyCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5zZXRHYXNPcmFjbGVbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRHYXNPcmFjbGU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjI4CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzEKICAgIC8vIHRoaXMuZ2FzT3JhY2xlLnZhbHVlID0gZ2FzT3JhY2xlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MjgKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3Rbcm91dGluZ10oKSAtPiB2b2lkOgpnZXRUcmFuc2FjdGlvblJlbGF5ZXJDb3N0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNAogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgaXRvYgogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjpPd25hYmxlLnRyYW5zZmVyT3duZXJzaGlwW3JvdXRpbmddKCkgLT4gdm9pZDoKdHJhbnNmZXJPd25lcnNoaXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxNgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE4CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjYKICAgIC8vIHByb3RlY3RlZCBvd25lciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7CiAgICBieXRlY18yIC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5fc3dhcEFuZEJyaWRnZShmZWVGcm9tTmF0aXZlOiB1aW50NjQsIGFzc2V0VHJhbnNmZXJSZWY6IHVpbnQ2NCwgcmVjaXBpZW50OiBieXRlcywgZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgcmVjZWl2ZVRva2VuOiBieXRlcywgbm9uY2U6IGJ5dGVzLCBmZWVUb2tlbkFtb3VudDogdWludDY0LCBidWRnZXQ6IHVpbnQ2NCkgLT4gdm9pZDoKX3N3YXBBbmRCcmlkZ2U6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjExNi0xMjUKICAgIC8vIHByaXZhdGUgX3N3YXBBbmRCcmlkZ2UoCiAgICAvLyAgIGZlZUZyb21OYXRpdmU6IHVpbnQ2NCwKICAgIC8vICAgYXNzZXRUcmFuc2ZlclJlZjogZ3R4bi5Bc3NldFRyYW5zZmVyVHhuLAogICAgLy8gICByZWNpcGllbnQ6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgZGVzdGluYXRpb25DaGFpbklkOiBCeXRlLAogICAgLy8gICByZWNlaXZlVG9rZW46IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgbm9uY2U6IFN0YXRpY0J5dGVzPDMyPiwKICAgIC8vICAgZmVlVG9rZW5BbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgYnVkZ2V0OiB1aW50NjQsCiAgICAvLyApOiB2b2lkIHsKICAgIHByb3RvIDggMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjYKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgZnJhbWVfZGlnIC0xCiAgICBpbnRjXzEgLy8gMAogICAgY2FsbHN1YiBlbnN1cmVfYnVkZ2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjY0CiAgICAvLyBhc3NlcnQodGhpcy5jYW5Td2FwLnZhbHVlLCAnUm91dGVyOiBzd2FwIHByb2hpYml0ZWQnKTsKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUzCiAgICAvLyBjYW5Td2FwID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7CiAgICBieXRlY18xIC8vICJjYW5Td2FwIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo2NAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuU3dhcC52YWx1ZSwgJ1JvdXRlcjogc3dhcCBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vIFJvdXRlcjogc3dhcCBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEyOAogICAgLy8gY29uc3QgYW1vdW50ID0gYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIoYXNzZXRUcmFuc2ZlclJlZik7CiAgICBmcmFtZV9kaWcgLTcKICAgIGNhbGxzdWIgYW1vdW50RnJvbUFzc2V0VHJhbnNmZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGFzc2VydChhbW91bnQgPiBmZWVUb2tlbkFtb3VudCwgJ0JyaWRnZTogYW1vdW50IHRvbyBsb3cgZm9yIGZlZScpOwogICAgZnJhbWVfZGlnIC0yCiAgICA+CiAgICBhc3NlcnQgLy8gQnJpZGdlOiBhbW91bnQgdG9vIGxvdyBmb3IgZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzMAogICAgLy8gYXNzZXJ0KCFyZWNpcGllbnQuYnl0ZXMuZXF1YWxzKGJ6ZXJvKDMyKSksICdCcmlkZ2U6IGJyaWRnZSB0byB0aGUgemVybyBhZGRyZXNzJyk7CiAgICBpbnRjXzMgLy8gMzIKICAgIGJ6ZXJvCiAgICBmcmFtZV9kaWcgLTYKICAgID09CiAgICAhCiAgICBhc3NlcnQgLy8gQnJpZGdlOiBicmlkZ2UgdG8gdGhlIHplcm8gYWRkcmVzcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGZlZUZyb21TdGFibGU6IHVpbnQ2NCA9IHRoaXMuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbihhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgZmVlVG9rZW5BbW91bnQpOwogICAgZnJhbWVfZGlnIC03CiAgICBndHhucyBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY1CiAgICAvLyBpZiAoZmVlVG9rZW5BbW91bnQgPT09IDApIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0yCiAgICBibnogX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaWZfZWxzZUAzCiAgICBpbnRjXzEgLy8gMAoKX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxMzMKICAgIC8vIGNvbnN0IGJyaWRnaW5nRmVlOiB1aW50NjQgPSBmZWVGcm9tTmF0aXZlICsgZmVlRnJvbVN0YWJsZTsKICAgIGZyYW1lX2RpZyAtOAogICAgZGlnIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBlbWl0PEJyaWRnaW5nRmVlRnJvbVRva2Vucz4oeyBmZWVGcm9tTmF0aXZlLCBmZWVGcm9tU3RhYmxlLCBmZWVTdGFibGVUb2tlbkFtb3VudDogZmVlVG9rZW5BbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTgKICAgIGl0b2IKICAgIHVuY292ZXIgMgogICAgaXRvYgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MzZiYWZhZGQgLy8gbWV0aG9kICJCcmlkZ2luZ0ZlZUZyb21Ub2tlbnModWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM2CiAgICAvLyBjb25zdCBhbW91bnRBZnRlckZlZTogdWludDY0ID0gYW1vdW50IC0gZmVlVG9rZW5BbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjEzOAogICAgLy8gY29uc3QgdlVzZEFtb3VudCA9IHRoaXMuc2VuZEFuZFN3YXBUb1ZVc2QoYXNzZXRUcmFuc2ZlclJlZi54ZmVyQXNzZXQsIHNlbmRlciwgYW1vdW50QWZ0ZXJGZWUpOwogICAgZnJhbWVfZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM3CiAgICAvLyBjb25zdCBzZW5kZXIgPSBuZXcgQWRkcmVzcyhUeG4uc2VuZGVyKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTM4CiAgICAvLyBjb25zdCB2VXNkQW1vdW50ID0gdGhpcy5zZW5kQW5kU3dhcFRvVlVzZChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldCwgc2VuZGVyLCBhbW91bnRBZnRlckZlZSk7CiAgICB1bmNvdmVyIDIKICAgIGNhbGxzdWIgc2VuZEFuZFN3YXBUb1ZVc2QKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBhc3NlcnQoZGVzdGluYXRpb25DaGFpbklkICE9PSB0aGlzLmNoYWluSWQudmFsdWUsICdCcmlkZ2U6IHdyb25nIGRlc3RpbmF0aW9uIGNoYWluJyk7CiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gY2hhaW5JZCA9IEdsb2JhbFN0YXRlPEJ5dGU+KCk7CiAgICBieXRlYyA1IC8vICJjaGFpbklkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIGFzc2VydChkZXN0aW5hdGlvbkNoYWluSWQgIT09IHRoaXMuY2hhaW5JZC52YWx1ZSwgJ0JyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4nKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTUKICAgIGRpZyAxCiAgICAhPQogICAgYXNzZXJ0IC8vIEJyaWRnZTogd3JvbmcgZGVzdGluYXRpb24gY2hhaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyByZXR1cm4gY2hhaW5JZC5ieXRlcy5jb25jYXQodG9rZW4uYnl0ZXMpOwogICAgZnJhbWVfZGlnIC01CiAgICBmcmFtZV9kaWcgLTQKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo2NwogICAgLy8gb3RoZXJCcmlkZ2VUb2tlbnMgPSBCb3hNYXA8Ynl0ZXMsIFN0YXRpY0J5dGVzPih7IGtleVByZWZpeDogJ3QnIH0pOwogICAgYnl0ZWMgNyAvLyAidCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTEKICAgIC8vIGFzc2VydCh0aGlzLm90aGVyQnJpZGdlVG9rZW5zKHRoaXMuX2dldE90aGVyQnJpZGdlVG9rZW5zS2V5KGRlc3RpbmF0aW9uQ2hhaW5JZCwgcmVjZWl2ZVRva2VuKSkuZXhpc3RzLCAnQnJpZGdlOiB1bmtub3duIGNoYWluIG9yIHRva2VuJyk7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHVua25vd24gY2hhaW4gb3IgdG9rZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTUzCiAgICAvLyBjb25zdCBtZXNzYWdlID0gdGhpcy5oYXNoTWVzc2FnZShhbW91bnQsIHJlY2lwaWVudCwgdGhpcy5jaGFpbklkLnZhbHVlLCBkZXN0aW5hdGlvbkNoYWluSWQsIHJlY2VpdmVUb2tlbiwgbm9uY2UpOwogICAgZGlnIDEKICAgIGZyYW1lX2RpZyAtNgogICAgdW5jb3ZlciAyCiAgICBmcmFtZV9kaWcgLTUKICAgIGZyYW1lX2RpZyAtNAogICAgZnJhbWVfZGlnIC0zCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6OkJyaWRnZS5oYXNoTWVzc2FnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICBmcmFtZV9kaWcgLTUKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNTUKICAgIC8vIHJldHVybiAxNTcwMDsKICAgIGludGMgNCAvLyAxNTcwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNDEKICAgIC8vIHJldHVybiB0aGlzLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZCkgKyB0aGlzLmdldFNlbmRUcmFuc2FjdGlvblN0b3JhZ2VDb3N0KCk7CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyBzZW50TWVzc2FnZXMgPSBCb3hNYXA8U3RhdGljQnl0ZXM8MzI+LCBTdGF0aWNCeXRlcz4oeyBrZXlQcmVmaXg6ICdzJyB9KTsKICAgIHB1c2hieXRlcyAicyIKICAgIGRpZyAyCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTcyCiAgICAvLyBhc3NlcnQoIXRoaXMuc2VudE1lc3NhZ2VzKG1lc3NhZ2UpLmV4aXN0cywgJ0JyaWRnZTogdG9rZW5zIGFscmVhZHkgc2VudCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBCcmlkZ2U6IHRva2VucyBhbHJlYWR5IHNlbnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc0CiAgICAvLyB0aGlzLnNlbnRNZXNzYWdlcyhtZXNzYWdlKS52YWx1ZSA9IG5ldyBTdGF0aWNCeXRlcygpOwogICAgcHVzaGJ5dGVzIDB4CiAgICBib3hfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE3NgogICAgLy8gY29uc3QgZGVzdGluYXRpb25DaGFpbklkID0gbWVzc2FnZS5hdCgxKTsKICAgIGRpZyAxCiAgICBleHRyYWN0IDEgMSAvLyBvbiBlcnJvcjogaW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc3LTE4MQogICAgLy8gY29uc3QgbWVzc2FnZUNvc3QgPSBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBNZXNzZW5nZXIucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uQ29zdCwKICAgIC8vICAgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbZGVzdGluYXRpb25DaGFpbklkXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBtZXNzZW5nZXIgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjIDYgLy8gIm1lc3NlbmdlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTc5CiAgICAvLyBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNzctMTgxCiAgICAvLyBjb25zdCBtZXNzYWdlQ29zdCA9IGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IE1lc3Nlbmdlci5wcm90b3R5cGUuZ2V0VHJhbnNhY3Rpb25Db3N0LAogICAgLy8gICBhcHBJZDogdGhpcy5tZXNzZW5nZXIudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtkZXN0aW5hdGlvbkNoYWluSWRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBieXRlYyAxMyAvLyBtZXRob2QgImdldFRyYW5zYWN0aW9uQ29zdChieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZHVwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxODUKICAgIC8vIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgZGlnIDEKICAgIGFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKICAgIGFzc2VydCAvLyBhcHBsaWNhdGlvbiBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTg3LTE4OQogICAgLy8gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogTWVzc2VuZ2VyLnByb3RvdHlwZS5zZW5kTWVzc2FnZSwgYXBwSWQ6IHRoaXMubWVzc2VuZ2VyLnZhbHVlLmlkLCBhcmdzOiBbcGF5bWVudFBhcmFtcywgbWVzc2FnZV0sCiAgICAvLyB9KTsKICAgIGl0eG5fYmVnaW4KICAgIGl0eG5fZmllbGQgUmVjZWl2ZXIKICAgIGR1cAogICAgaXR4bl9maWVsZCBBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTgzLTE4NgogICAgLy8gY29uc3QgcGF5bWVudFBhcmFtcyA9IGl0eG4ucGF5bWVudCh7CiAgICAvLyAgIGFtb3VudDogbWVzc2FnZUNvc3QsCiAgICAvLyAgIHJlY2VpdmVyOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5hZGRyZXNzLAogICAgLy8gfSk7CiAgICBpbnRjXzAgLy8gMQogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE4Ny0xODkKICAgIC8vIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IE1lc3Nlbmdlci5wcm90b3R5cGUuc2VuZE1lc3NhZ2UsIGFwcElkOiB0aGlzLm1lc3Nlbmdlci52YWx1ZS5pZCwgYXJnczogW3BheW1lbnRQYXJhbXMsIG1lc3NhZ2VdLAogICAgLy8gfSk7CiAgICBpdHhuX25leHQKICAgIHB1c2hieXRlcyAweGQwMmY1N2Y1IC8vIG1ldGhvZCAic2VuZE1lc3NhZ2UocGF5LGJ5dGVbMzJdKXZvaWQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTYKICAgIC8vIGVtaXQ8UmVjZWl2ZUZlZT4oeyBicmlkZ2VUcmFuc2FjdGlvbkNvc3QsIG1lc3NhZ2VUcmFuc2FjdGlvbkNvc3QgfSk7CiAgICBkaWcgMQogICAgaXRvYgogICAgZGlnIDEKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4NGI1NTQxOWIgLy8gbWV0aG9kICJSZWNlaXZlRmVlKHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTU3CiAgICAvLyBhc3NlcnQoYnJpZGdpbmdGZWUgPj0gYnJpZGdlVHJhbnNhY3Rpb25Db3N0ICsgbWVzc2FnZVRyYW5zYWN0aW9uQ29zdCwgJ0JyaWRnZTogbm90IGVub3VnaCBmZWUnKTsKICAgICsKICAgIHVuY292ZXIgMgogICAgPD0KICAgIGFzc2VydCAvLyBCcmlkZ2U6IG5vdCBlbm91Z2ggZmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjE1OC0xNjUKICAgIC8vIGVtaXQ8VG9rZW5zU2VudD4oewogICAgLy8gICAgIGFtb3VudCwKICAgIC8vICAgICByZWNpcGllbnQsCiAgICAvLyAgICAgZGVzdGluYXRpb25DaGFpbklkLAogICAgLy8gICAgIHJlY2VpdmVUb2tlbiwKICAgIC8vICAgICBub25jZSwKICAgIC8vICAgICBtZXNzZW5nZXI6IEFMTEJSSURHRV9NRVNTRU5HRVIsCiAgICAvLyAgIH0sCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTYKICAgIGNvbmNhdAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNjQKICAgIC8vIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTU4LTE2NQogICAgLy8gZW1pdDxUb2tlbnNTZW50Pih7CiAgICAvLyAgICAgYW1vdW50LAogICAgLy8gICAgIHJlY2lwaWVudCwKICAgIC8vICAgICBkZXN0aW5hdGlvbkNoYWluSWQsCiAgICAvLyAgICAgcmVjZWl2ZVRva2VuLAogICAgLy8gICAgIG5vbmNlLAogICAgLy8gICAgIG1lc3NlbmdlcjogQUxMQlJJREdFX01FU1NFTkdFUiwKICAgIC8vICAgfSwKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czoxNTgtMTY2CiAgICAvLyBlbWl0PFRva2Vuc1NlbnQ+KHsKICAgIC8vICAgICBhbW91bnQsCiAgICAvLyAgICAgcmVjaXBpZW50LAogICAgLy8gICAgIGRlc3RpbmF0aW9uQ2hhaW5JZCwKICAgIC8vICAgICByZWNlaXZlVG9rZW4sCiAgICAvLyAgICAgbm9uY2UsCiAgICAvLyAgICAgbWVzc2VuZ2VyOiBBTExCUklER0VfTUVTU0VOR0VSLAogICAgLy8gICB9LAogICAgLy8gKTsKICAgIHB1c2hieXRlcyAweDIyOWZiYWVjIC8vIG1ldGhvZCAiVG9rZW5zU2VudCh1aW50NjQsYnl0ZVszMl0sYnl0ZSxieXRlWzMyXSxieXRlWzMyXSxieXRlKSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCl9zd2FwQW5kQnJpZGdlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY3CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgZnJhbWVfZGlnIDEKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzkKICAgIC8vIHByb3RlY3RlZCBicmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAnZicgfSk7CiAgICBwdXNoYnl0ZXMgImYiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY3CiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIGZyYW1lX2RpZyAtMgogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNjctMzcxCiAgICAvLyBjb25zdCBmZWU6IHVpbnQ2NCA9IHRoaXMuYnJpZGdpbmdGZWVDb252ZXJzaW9uU2NhbGluZ0ZhY3Rvcihhc3NldCkudmFsdWUgKiBmZWVUb2tlbkFtb3VudCAvIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IEdhc09yYWNsZS5wcm90b3R5cGUuZ2V0UHJpY2UsCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW3RoaXMuY2hhaW5JZC52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzY5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozNzAKICAgIC8vIGFyZ3M6IFt0aGlzLmNoYWluSWQudmFsdWVdLAogICAgaW50Y18xIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNoYWluSWQgPSBHbG9iYWxTdGF0ZTxCeXRlPigpOwogICAgYnl0ZWMgNSAvLyAiY2hhaW5JZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjM2Ny0zNzEKICAgIC8vIGNvbnN0IGZlZTogdWludDY0ID0gdGhpcy5icmlkZ2luZ0ZlZUNvbnZlcnNpb25TY2FsaW5nRmFjdG9yKGFzc2V0KS52YWx1ZSAqIGZlZVRva2VuQW1vdW50IC8gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRQcmljZSwKICAgIC8vICAgYXBwSWQ6IHRoaXMuZ2FzT3JhY2xlLnZhbHVlLmlkLAogICAgLy8gICBhcmdzOiBbdGhpcy5jaGFpbklkLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgcHVzaGJ5dGVzIDB4MWRiNzBjZGQgLy8gbWV0aG9kICJnZXRQcmljZShieXRlKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbklECiAgICBwdXNoaW50IDYgLy8gYXBwbAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18xIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgaXR4biBMYXN0TG9nCiAgICBkdXAKICAgIGV4dHJhY3QgNCAwCiAgICBzd2FwCiAgICBleHRyYWN0IDAgNAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICA9PQogICAgYXNzZXJ0IC8vIEJ5dGVzIGhhcyB2YWxpZCBwcmVmaXgKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBjb25zdCBmZWVGcm9tU3RhYmxlOiB1aW50NjQgPSB0aGlzLl9jb252ZXJ0QnJpZGdpbmdGZWVJblRva2Vuc1RvTmF0aXZlVG9rZW4oYXNzZXRUcmFuc2ZlclJlZi54ZmVyQXNzZXQsIGZlZVRva2VuQW1vdW50KTsKICAgIGIgX3N3YXBBbmRCcmlkZ2VfYWZ0ZXJfaW5saW5lZF9zbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjpCcmlkZ2UuX2NvbnZlcnRCcmlkZ2luZ0ZlZUluVG9rZW5zVG9OYXRpdmVUb2tlbkA1CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlKGFtb3VudDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCBzb3VyY2VDaGFpbklkOiBieXRlcywgZGVzdGluYXRpb25DaGFpbklkOiBieXRlcywgcmVjZWl2ZVRva2VuOiBieXRlcywgbm9uY2U6IGJ5dGVzKSAtPiBieXRlczoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czo6QnJpZGdlLmhhc2hNZXNzYWdlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMDctMzE1CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIC8vIGhhc2hNZXNzYWdlKAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjaXBpZW50OiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIHNvdXJjZUNoYWluSWQ6IEJ5dGUsCiAgICAvLyAgIGRlc3RpbmF0aW9uQ2hhaW5JZDogQnl0ZSwKICAgIC8vICAgcmVjZWl2ZVRva2VuOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyAgIG5vbmNlOiBTdGF0aWNCeXRlczwzMj4sCiAgICAvLyApOiBTdGF0aWNCeXRlczwzMj4gewogICAgcHJvdG8gNiAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gY29uc3QgYW1vdW50MzIgPSBiemVybygyNCkuY29uY2F0KG9wLml0b2IoYW1vdW50KSk7CiAgICBwdXNoaW50IDI0IC8vIDI0CiAgICBiemVybwogICAgZnJhbWVfZGlnIC02CiAgICBpdG9iCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE3CiAgICAvLyBjb25zdCBzb3VyY2VDaGFpbklkMzIgPSBiemVybygzMSkuY29uY2F0KHNvdXJjZUNoYWluSWQuYnl0ZXMpOwogICAgcHVzaGludCAzMSAvLyAzMQogICAgYnplcm8KICAgIGZyYW1lX2RpZyAtNAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxOC0zMTkKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgc3dhcAogICAgZnJhbWVfZGlnIC01CiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzE4LTMyMAogICAgLy8gY29uc3QgcGFja2VkID0gYW1vdW50MzIKICAgIC8vICAgLmNvbmNhdChyZWNpcGllbnQuYnl0ZXMpCiAgICAvLyAgIC5jb25jYXQoc291cmNlQ2hhaW5JZDMyKQogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMxOC0zMjEKICAgIC8vIGNvbnN0IHBhY2tlZCA9IGFtb3VudDMyCiAgICAvLyAgIC5jb25jYXQocmVjaXBpZW50LmJ5dGVzKQogICAgLy8gICAuY29uY2F0KHNvdXJjZUNoYWluSWQzMikKICAgIC8vICAgLmNvbmNhdChyZWNlaXZlVG9rZW4uYnl0ZXMpCiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTgtMzIyCiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzIzCiAgICAvLyAuY29uY2F0KEFMTEJSSURHRV9NRVNTRU5HRVIuYnl0ZXMpOwogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9icmlkZ2UuY29udHJhY3QuYWxnby50czozMTgtMzIzCiAgICAvLyBjb25zdCBwYWNrZWQgPSBhbW91bnQzMgogICAgLy8gICAuY29uY2F0KHJlY2lwaWVudC5ieXRlcykKICAgIC8vICAgLmNvbmNhdChzb3VyY2VDaGFpbklkMzIpCiAgICAvLyAgIC5jb25jYXQocmVjZWl2ZVRva2VuLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KG5vbmNlLmJ5dGVzKQogICAgLy8gICAuY29uY2F0KEFMTEJSSURHRV9NRVNTRU5HRVIuYnl0ZXMpOwogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyNQogICAgLy8gY29uc3QgaGFzaCA9IG9wLmtlY2NhazI1NihwYWNrZWQpOyAvLyAzMiBieXRlcwogICAga2VjY2FrMjU2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyOAogICAgLy8gY29uc3Qgd2l0aFNyYyA9IG9wLnNldEJ5dGUoaGFzaCwgMCwgb3AuYnRvaShzb3VyY2VDaGFpbklkLmJ5dGVzKSk7CiAgICBmcmFtZV9kaWcgLTQKICAgIGJ0b2kKICAgIGludGNfMSAvLyAwCiAgICBzd2FwCiAgICBzZXRieXRlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2JyaWRnZS5jb250cmFjdC5hbGdvLnRzOjMyOQogICAgLy8gY29uc3Qgd2l0aERzdCA9IG9wLnNldEJ5dGUod2l0aFNyYywgMSwgb3AuYnRvaShkZXN0aW5hdGlvbkNoYWluSWQuYnl0ZXMpKTsKICAgIGZyYW1lX2RpZyAtMwogICAgYnRvaQogICAgaW50Y18wIC8vIDEKICAgIHN3YXAKICAgIHNldGJ5dGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvYnJpZGdlLmNvbnRyYWN0LmFsZ28udHM6MzMxCiAgICAvLyByZXR1cm4gbmV3IFN0YXRpY0J5dGVzPDMyPih3aXRoRHN0KTsKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBzaXplCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjpSb3V0ZXIucmVjZWl2ZUFuZFN3YXBGcm9tVlVzZChhc3NldDogdWludDY0LCByZWNpcGllbnQ6IGJ5dGVzLCB2VXNkQW1vdW50OiB1aW50NjQsIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCkgLT4gdWludDY0OgpyZWNlaXZlQW5kU3dhcEZyb21WVXNkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjMtMTY4CiAgICAvLyBwcm90ZWN0ZWQgcmVjZWl2ZUFuZFN3YXBGcm9tVlVzZCgKICAgIC8vICAgYXNzZXQ6IEFzc2V0LAogICAgLy8gICByZWNpcGllbnQ6IEFkZHJlc3MsCiAgICAvLyAgIHZVc2RBbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgcmVjZWl2ZUFtb3VudE1pbjogdWludDY0LAogICAgLy8gKTogdWludDY0IHsKICAgIHByb3RvIDQgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjkKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKGFzc2V0KS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZnJhbWVfZGlnIC00CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjM0CiAgICAvLyBwb29scyA9IEJveE1hcDxBc3NldCwgdWludDY0Pih7IGtleVByZWZpeDogJ3AnIH0pOwogICAgYnl0ZWMgOCAvLyAicCIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNjkKICAgIC8vIGFzc2VydCh0aGlzLnBvb2xzKGFzc2V0KS5leGlzdHMsICdSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHJlY2VpdmUgcG9vbAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzAKICAgIC8vIGNvbnN0IHBvb2xJZCA9IHRoaXMucG9vbHMoYXNzZXQpLnZhbHVlOwogICAgYm94X2dldAogICAgcG9wCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE3MS0xNzUKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBQb29sLnByb3RvdHlwZS5zd2FwRnJvbVZVc2QsCiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGZyYW1lX2RpZyAtMgogICAgaXRvYgogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo1MgogICAgLy8gcHJpdmF0ZSByZWJhbGFuY2VyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oeyBpbml0aWFsVmFsdWU6IG5ldyBBZGRyZXNzKGJ6ZXJvKDApKSB9KTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyA0IC8vICJyZWJhbGFuY2VyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxNzQKICAgIC8vIGFyZ3M6IFtyZWNpcGllbnQsIHZVc2RBbW91bnQsIHJlY2VpdmVBbW91bnRNaW4sIHJlY2lwaWVudCA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTMKICAgID09CiAgICBieXRlYyAxMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTcxLTE3NQogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IFBvb2wucHJvdG90eXBlLnN3YXBGcm9tVlVzZCwKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3JlY2lwaWVudCwgdlVzZEFtb3VudCwgcmVjZWl2ZUFtb3VudE1pbiwgcmVjaXBpZW50ID09PSB0aGlzLnJlYmFsYW5jZXIudmFsdWVdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBwdXNoYnl0ZXMgMHgwZDFiNGMwNiAvLyBtZXRob2QgInN3YXBGcm9tVlVzZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsYm9vbCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgdW5jb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgc3dhcAogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uSUQKICAgIHB1c2hpbnQgNiAvLyBhcHBsCiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzEgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICBpdHhuIExhc3RMb2cKICAgIGR1cAogICAgZXh0cmFjdCA0IDAKICAgIHN3YXAKICAgIGV4dHJhY3QgMCA0CiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgID09CiAgICBhc3NlcnQgLy8gQnl0ZXMgaGFzIHZhbGlkIHByZWZpeAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czo6Um91dGVyLnNlbmRBbmRTd2FwVG9WVXNkKGFzc2V0OiB1aW50NjQsIHVzZXI6IGJ5dGVzLCBhbW91bnQ6IHVpbnQ2NCkgLT4gdWludDY0OgpzZW5kQW5kU3dhcFRvVlVzZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTc5CiAgICAvLyBwcm90ZWN0ZWQgc2VuZEFuZFN3YXBUb1ZVc2QoYXNzZXQ6IEFzc2V0LCB1c2VyOiBBZGRyZXNzLCBhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAzIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTgwCiAgICAvLyBhc3NlcnQodGhpcy5wb29scyhhc3NldCkuZXhpc3RzLCAnUm91dGVyOiBubyBwb29sJyk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MzQKICAgIC8vIHBvb2xzID0gQm94TWFwPEFzc2V0LCB1aW50NjQ+KHsga2V5UHJlZml4OiAncCcgfSk7CiAgICBieXRlYyA4IC8vICJwIgogICAgc3dhcAogICAgY29uY2F0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4MAogICAgLy8gYXNzZXJ0KHRoaXMucG9vbHMoYXNzZXQpLmV4aXN0cywgJ1JvdXRlcjogbm8gcG9vbCcpOwogICAgZHVwCiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGFzc2VydCAvLyBSb3V0ZXI6IG5vIHBvb2wKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTgxCiAgICAvLyBjb25zdCBwb29sSWQgPSB0aGlzLnBvb2xzKGFzc2V0KS52YWx1ZTsKICAgIGJveF9nZXQKICAgIHBvcAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE4NgogICAgLy8gYXNzZXRSZWNlaXZlcjogQXBwbGljYXRpb24ocG9vbElkKS5hZGRyZXNzLAogICAgZHVwCiAgICBhcHBfcGFyYW1zX2dldCBBcHBBZGRyZXNzCiAgICBhc3NlcnQgLy8gYXBwbGljYXRpb24gZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyAtMQogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgZnJhbWVfZGlnIC0zCiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg3CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxODMtMTg4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IGFzc2V0LAogICAgLy8gICBhc3NldEFtb3VudDogYW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBBcHBsaWNhdGlvbihwb29sSWQpLmFkZHJlc3MsCiAgICAvLyB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxOTAtMTk0CiAgICAvLyByZXR1cm4gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogUG9vbC5wcm90b3R5cGUuc3dhcFRvVlVzZCwKICAgIC8vICAgYXBwSWQ6IHBvb2xJZCwKICAgIC8vICAgYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIC8vIH0pLnJldHVyblZhbHVlOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yb3V0ZXIuYWxnby50czoxOTMKICAgIC8vIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGludGNfMSAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjUyCiAgICAvLyBwcml2YXRlIHJlYmFsYW5jZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPih7IGluaXRpYWxWYWx1ZTogbmV3IEFkZHJlc3MoYnplcm8oMCkpIH0pOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDQgLy8gInJlYmFsYW5jZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3JvdXRlci5hbGdvLnRzOjE5MwogICAgLy8gYXJnczogW3VzZXIsIGFtb3VudCwgdXNlciA9PT0gdGhpcy5yZWJhbGFuY2VyLnZhbHVlXSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgID09CiAgICBieXRlYyAxMSAvLyAweDAwCiAgICBpbnRjXzEgLy8gMAogICAgdW5jb3ZlciAyCiAgICBzZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcm91dGVyLmFsZ28udHM6MTkwLTE5NAogICAgLy8gcmV0dXJuIGFiaUNhbGwoewogICAgLy8gICBtZXRob2Q6IFBvb2wucHJvdG90eXBlLnN3YXBUb1ZVc2QsCiAgICAvLyAgIGFwcElkOiBwb29sSWQsCiAgICAvLyAgIGFyZ3M6IFt1c2VyLCBhbW91bnQsIHVzZXIgPT09IHRoaXMucmViYWxhbmNlci52YWx1ZV0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGQ5NzhhZDE0IC8vIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25BcmdzCiAgICBzd2FwCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZShjaGFpbklkOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjpHYXNVc2FnZS5nZXRHYXNVc2FnZToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTctMTgKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0R2FzVXNhZ2UoY2hhaW5JZDogQnl0ZSk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTAKICAgIC8vIGdhc1VzYWdlID0gQm94TWFwPEJ5dGUsIHVpbnQ2ND4oeyBrZXlQcmVmaXg6ICd1JyB9KTsKICAgIGJ5dGVjIDEyIC8vICJ1IgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MTkKICAgIC8vIHJldHVybiB0aGlzLmdhc1VzYWdlKGNoYWluSWQpLnZhbHVlOwogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGJ0b2kKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6Okdhc1VzYWdlLmdldFRyYW5zYWN0aW9uUmVsYXllckNvc3QoY2hhaW5JZDogYnl0ZXMpIC0+IHVpbnQ2NDoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo6R2FzVXNhZ2UuZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzQtMzUKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gZ2V0VHJhbnNhY3Rpb25SZWxheWVyQ29zdChjaGFpbklkOiBCeXRlKTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czoxMAogICAgLy8gZ2FzVXNhZ2UgPSBCb3hNYXA8Qnl0ZSwgdWludDY0Pih7IGtleVByZWZpeDogJ3UnIH0pOwogICAgYnl0ZWMgMTIgLy8gInUiCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czozNgogICAgLy8gY29uc3QgZ2FzQW1vdW50ID0gdGhpcy5nYXNVc2FnZShjaGFpbklkKS52YWx1ZTsKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM3LTQxCiAgICAvLyByZXR1cm4gYWJpQ2FsbCh7CiAgICAvLyAgIG1ldGhvZDogR2FzT3JhY2xlLnByb3RvdHlwZS5nZXRUcmFuc2FjdGlvbkdhc0Nvc3RJbk5hdGl2ZVRva2VuLAogICAgLy8gICBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICAvLyAgIGFyZ3M6IFtjaGFpbklkLCBnYXNBbW91bnRdLAogICAgLy8gfSkucmV0dXJuVmFsdWU7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjM5CiAgICAvLyBhcHBJZDogdGhpcy5nYXNPcmFjbGUudmFsdWUuaWQsCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9nYXMtdXNhZ2UuYWxnby50czo5CiAgICAvLyBnYXNPcmFjbGUgPSBHbG9iYWxTdGF0ZTxBcHBsaWNhdGlvbj4oKTsKICAgIGJ5dGVjXzMgLy8gImdhc09yYWNsZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzkKICAgIC8vIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL2dhcy11c2FnZS5hbGdvLnRzOjQwCiAgICAvLyBhcmdzOiBbY2hhaW5JZCwgZ2FzQW1vdW50XSwKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvZ2FzLXVzYWdlLmFsZ28udHM6MzctNDEKICAgIC8vIHJldHVybiBhYmlDYWxsKHsKICAgIC8vICAgbWV0aG9kOiBHYXNPcmFjbGUucHJvdG90eXBlLmdldFRyYW5zYWN0aW9uR2FzQ29zdEluTmF0aXZlVG9rZW4sCiAgICAvLyAgIGFwcElkOiB0aGlzLmdhc09yYWNsZS52YWx1ZS5pZCwKICAgIC8vICAgYXJnczogW2NoYWluSWQsIGdhc0Ftb3VudF0sCiAgICAvLyB9KS5yZXR1cm5WYWx1ZTsKICAgIHB1c2hieXRlcyAweGMyYWZjY2QxIC8vIG1ldGhvZCAiZ2V0VHJhbnNhY3Rpb25HYXNDb3N0SW5OYXRpdmVUb2tlbihieXRlLHVpbnQ2NCl1aW50NjQiCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgZnJhbWVfZGlnIC0xCiAgICBpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwogICAgaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKICAgIGl0eG5fZmllbGQgQXBwbGljYXRpb25JRAogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMSAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIGl0eG4gTGFzdExvZwogICAgZHVwCiAgICBleHRyYWN0IDQgMAogICAgc3dhcAogICAgZXh0cmFjdCAwIDQKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgPT0KICAgIGFzc2VydCAvLyBCeXRlcyBoYXMgdmFsaWQgcHJlZml4CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzEgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjXzIgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTMKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLCAnT25seSBvd25lcicpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gT25seSBvd25lcgogICAgcmV0c3ViCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CyAFAQAIINR6JhEEFR98dQdjYW5Td2FwBW93bmVyCWdhc09yYWNsZQpyZWJhbGFuY2VyB2NoYWluSWQJbWVzc2VuZ2VyAXQBcA1zdG9wQXV0aG9yaXR5AQEBAAF1BENBeqME90dbggwVH3x1AAAAAAAAPVQDBoEBMRhAAAkjrycETGcpImcxGRREMRhBAM2CDARl9wVzBD44AnwEpGAK7QTeTK1KBE66ByEExhftcwRXUxVgBGOAgngEBlB8agT1+W6zBEsGLKAEw83ZKicNggkEB9+EKQSAxccPBEE00GgE7xX4VQRrHuIjBBhwpJIENVcyTQQEsWHxBNKzV+snDoIEBAylrnoEJ0cPBwTL/G0CBOF7r7Q2GgCOGwDZARQBZAGpArACzQLqAwYDJANdA+QEHgRCAAYAAQRXBMsFEwUoBTYFPgVPBWAFcgWQBaEFswAnD7AiQycPsCJDgARmTKQENhoAjgEAiACKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJxCyHicQsh+L/40CAAsABLNC/9syALIBQv/1I7IBQv/viYoBAYv/OBQyChJEi/84IDIDEkSL/zgVMgMSRIv/OBKJigEBi/84BzIKE0EAAiOJi/84IDIDE0EAAiOJi/84CTIDE0EAAiOJi/84CIk2GgFJFSUSRDYaAkkVIhJENhoDSRUkEkQXNhoESRUkEkQXKksEZytMZycJTwNnJwVPAmcnBkxnIkM2GgFJFSQSRBeIB3exMgqyFCOyErIRgQSyECOyAbOAGEJyaWRnZTogb3B0LWluIGNvbXBsZXRlZLAiQzEWgQIJSTgQIhJEMRYiCUk4EIEEEkQ2GgFJFSUSRDYaAkkVIhJENhoDSRUlEkQ2GgRJFSUSRDYaBUkVJBJEF08GiP8cTgZOBiNPB4gEYSJDMRYiCUk4EIEEEkQ2GgFJFSUSRDYaAkkVIhJENhoDSRUlEkQ2GgRJFSUSRDYaBUkVJBJEFzYaBkkVJBJEFyNOB4gEHCJDMRYiCUk4ECISRDYaAUkVJBJEFzYaAklOA0kVJRJENhoDSRUiEkQ2GgRJFSUSRDYaBUlOBkkVJRJENhoGSRUkEkQXIyllRESAAWJLBFBJvUUBRE8HiP50SSEED0QjJwVlREsISwhPCE8DSwhPCIgFA08CvkRLAUxQAkxRAAJMUQIgUElOBkkVJRJEgAFtSwFQSb1FARREgAC/sSMnBmVEgAQz4UeqshqyGLIagQayECOyAbO0PklXBABMVwAEKBJESRUiEkQjU0RPAoEYW08DTwRPBIgEz0whBAlJQQAPsUsEsgdJsggishAjsgGzSwEWSwVQSwRQJwpQSwNQgARFg2rWTFCwIkM2GgFJFSISRDYaAkkVJRJEiAWZgAFiTwJQTL8iQzYaAUkVIhJENhoCSRUlEkSIBXxQJwdMUIAAvyJDNhoBSRUiEkQ2GgJJFSUSRIgFX1AnB0xQvEgiQzYaAUkVJBJEF4gFSrEjKmVEsgeyCCKyECOyAbMiQzYaAUkVJBJEF0mIBSsyCklOAkxwAExJTwJEQQAasSMqZUSyFEmyEksCshFLAbIAgQSyECOyAbMiQzYaAUkVIhJENhoCSRUkEkQXSwGIBJ+xIycGZUQnDrIaSwOyGrIYgQayECOyAbO0PklXBABMVwAEKBJESRUkEkQXsSMrZUROAggWgAR799UMshpPA7IashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF0wWgAFlTFC+RBcKFihMULAiQzYaAUkVJBJEFzYaAkkVJRJENhoDSRUiEkQ2GgRJFSISRDYaBUkVJRJENhoGSRUlEkSIAwQoTFCwIkM2GgFJFSISRDYaAkkVJRJEUCcHTFC9RQEnCyNPAlQoTFCwIkM2GgFJFSISRIgD0SEECBYoTFCwIkMxFiIJSTgQgQQSRDYaAUkVJBJEFzYaAkkVJRJENhoDSRUkEkQXNhoESRUkEkQXI4j7kCMpZUREMQBLBIj7v08FOBFJSwNLA4gDB0sGSwZPAk8GiAKiTwNPBFBPAhZQTwMWUE8CFlBMFlCABBVARLNMULAiQzYaAUkVJBJEFzYaAkkVJBJEF4gDfEkWJwhLAVBPAxa/THEBRIEJTAlJgQYIgQpMlIABZksDUEwWv4EKTJSAAWVPAlBMFr8iQzYaAUkVJBJEF4gDPRYnCExQvEgiQzEAIycJZUQSRCkjZyJDiAMjKSJnIkM2GgFJFSUSRIgDEycJTGciQzYaAUkVJRJEiAMCJwRMZyJDNhoBSRUiEkSIAqcWKExQsCJDNhoBSRUiEkQ2GgJJFSQSRBeIAtYnDE8CUEwWvyJDNhoBSRUkEkQXiALAK0xnIkM2GgFJFSISRIgCchYoTFCwIkM2GgFJFSUSRIgCnipMZyJDiggAi/8jiPpNIyllRESL+Yj6fkmL/g1EJa+L+hIURIv5OBGL/kAA7iOL+EsBCIv4Fk8CFlCL/hZQgAQ2uvrdTFCwiwCL/gmLATEATwKIAZUjJwVlRIv7SwETRIv7i/xQJwdMUL1FAURLAYv6TwKL+4v8i/2IAOKL+4gB3yEECIABc0sCUEm9RQEURIAAv0sBVwEBsSMnBmVEJw2yGkyyGkmyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF0sBcghEsbIHSbIIIrIQI7IBtoAE0C9X9bIaTwOyGkyyGIEGshAjsgGzSwEWSwEWUIAES1VBm0xQsAhPAg5EFov6UIv7UIv8UIv9UCcKUIAEIp+67ExQsImLARaAAWZMUL5EF4v+C7EjK2VEIycFZUSABB23DN2yGrIashiBBrIQI7IBs7Q+SVcEAExXAAQoEkRJFSQSRBcKQv7QigYBgRivi/oWUIEfr4v8UEyL+1BMUIv+UIv/UCcKUAKL/BcjTFaL/RciTFZJFSUSRImKBAGL/BYnCExQSb1FAUS+SBexi/4Wi/8WIycEZUSL/RInCyNPAlSABA0bTAayGov9shpPArIaTLIashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF4mKAwGL/RYnCExQSb1FAUS+SBexSXIIRLIUi/+yEov9shGBBLIQI7IBs7GL/xYjJwRlRIv+EicLI08CVIAE2XitFLIai/6yGkyyGrIashiBBrIQI7IBs7Q+SVcEAExXAAQoEkRJFSQSRBeJigEBJwyL/1C+RBeJigEBJwyL/1C+RBexIytlREwWgATCr8zRshqL/7IashqyGIEGshAjsgGztD5JVwQATFcABCgSREkVJBJEF4kxACMqZUQSRIk=",clear:"C4EBQw=="},events:[{name:"BridgingFeeFromTokens",args:[{type:"uint64",name:"feeFromNative"},{type:"uint64",name:"feeFromStable"},{type:"uint64",name:"feeStableTokenAmount"}]},{name:"ReceiveFee",args:[{type:"uint64",name:"bridgeTransactionCost"},{type:"uint64",name:"messageTransactionCost"}]},{name:"TokensSent",args:[{type:"uint64",name:"amount"},{type:"byte[32]",name:"recipient"},{type:"byte",name:"destinationChainId"},{type:"byte[32]",name:"receiveToken"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"}]},{name:"TokensReceived",args:[{type:"uint64",name:"receiveAmount"},{type:"address",name:"recipient"},{type:"byte[32]",name:"nonce"},{type:"byte",name:"messenger"},{type:"byte[32]",name:"message"}]},{name:"Swapped",args:[{type:"address",name:"sender"},{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"receiveTokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"receivedAmount"}]}],templateVariables:{}};var f=class a{static get create(){return{_resolveByMethod(n){switch(n.method){case"createApplication":case"createApplication(address,byte,uint64,uint64)void":return a.create.createApplication(n)}throw new Error("Unknown ' + verb + ' method")},createApplication(n){return{...n,method:"createApplication(address,byte,uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.owner,n.args.chainId,n.args.messenger,n.args.gasOracle]}}}}static optInAsset(n){return{...n,method:"optInAsset(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.asset]}}static swapAndBridge(n){return{...n,method:"swapAndBridge(pay,axfer,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(n.args)?n.args:[n.args.paymentRef,n.args.assetTransferRef,n.args.recipient,n.args.destinationChainId,n.args.receiveToken,n.args.nonce,n.args.budget]}}static swapAndBridgeWithStable(n){return{...n,method:"swapAndBridgeWithStable(axfer,byte[32],byte,byte[32],byte[32],uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetTransferRef,n.args.recipient,n.args.destinationChainId,n.args.receiveToken,n.args.nonce,n.args.feeTokenAmount,n.args.budget]}}static receiveTokens(n){return{...n,method:"receiveTokens(pay,uint64,byte[32],byte,byte[32],byte[32],uint64)void",args:Array.isArray(n.args)?n.args:[n.args.paymentRef,n.args.amount,n.args.recipient,n.args.sourceChainId,n.args.receiveToken,n.args.nonce,n.args.receiveAmountMin]}}static registerBridge(n){return{...n,method:"registerBridge(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.bridgeAddress]}}static addBridgeToken(n){return{...n,method:"addBridgeToken(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.tokenAddress]}}static removeBridgeToken(n){return{...n,method:"removeBridgeToken(byte,byte[32])void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.tokenAddress]}}static withdrawGasTokens(n){return{...n,method:"withdrawGasTokens(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.amount]}}static withdrawBridgingFeeInTokens(n){return{...n,method:"withdrawBridgingFeeInTokens(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.asset]}}static getBridgingCostInTokens(n){return{...n,method:"getBridgingCostInTokens(byte,uint64)uint64",args:Array.isArray(n.args)?n.args:[n.args.destinationChainId,n.args.asset]}}static hashMessage(n){return{...n,method:"hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",args:Array.isArray(n.args)?n.args:[n.args.amount,n.args.recipient,n.args.sourceChainId,n.args.destinationChainId,n.args.receiveToken,n.args.nonce]}}static isOtherBridgeTokenSupported(n){return{...n,method:"isOtherBridgeTokenSupported(byte,byte[32])bool",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.token]}}static getTransactionCost(n){return{...n,method:"getTransactionCost(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static getReceiveTokensCost(n){return{...n,method:"getReceiveTokensCost()uint64",args:Array.isArray(n.args)?n.args:[]}}static getSendTransactionStorageCost(n){return{...n,method:"getSendTransactionStorageCost()uint64",args:Array.isArray(n.args)?n.args:[]}}static swap(n){return{...n,method:"swap(axfer,uint64,address,uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetTransferRef,n.args.receiveAsset,n.args.recipient,n.args.receiveAmountMin,n.args.budget]}}static addPool(n){return{...n,method:"addPool(uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.poolId,n.args.asset]}}static removePool(n){return{...n,method:"removePool(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.tokenId]}}static stopSwap(n){return{...n,method:"stopSwap()void",args:Array.isArray(n.args)?n.args:[]}}static startSwap(n){return{...n,method:"startSwap()void",args:Array.isArray(n.args)?n.args:[]}}static setStopAuthority(n){return{...n,method:"setStopAuthority(address)void",args:Array.isArray(n.args)?n.args:[n.args.stopAuthority]}}static setRebalancer(n){return{...n,method:"setRebalancer(address)void",args:Array.isArray(n.args)?n.args:[n.args.rebalancer]}}static getGasUsage(n){return{...n,method:"getGasUsage(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static setGasUsage(n){return{...n,method:"setGasUsage(byte,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.chainId,n.args.gasAmount]}}static setGasOracle(n){return{...n,method:"setGasOracle(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.gasOracle]}}static getTransactionRelayerCost(n){return{...n,method:"getTransactionRelayerCost(byte)uint64",args:Array.isArray(n.args)?n.args:[n.args.chainId]}}static transferOwnership(n){return{...n,method:"transferOwnership(address)void",args:Array.isArray(n.args)?n.args:[n.args.newOwner]}}};var ma=class a{appClient;constructor(n){this.appClient=n instanceof Ii.AppClient?n:new Ii.AppClient({...n,appSpec:pa})}decodeReturnValue(n,i){return i!==void 0?(0,Fs.getArc56ReturnValue)(i,this.appClient.getABIMethod(n),pa.structs):void 0}static async fromCreatorAndName(n){return new a(await Ii.AppClient.fromCreatorAndName({...n,appSpec:pa}))}static async fromNetwork(n){return new a(await Ii.AppClient.fromNetwork({...n,appSpec:pa}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:n=>this.appClient.params.bare.clearState(n),optInAsset:n=>this.appClient.params.call(f.optInAsset(n)),swapAndBridge:n=>this.appClient.params.call(f.swapAndBridge(n)),swapAndBridgeWithStable:n=>this.appClient.params.call(f.swapAndBridgeWithStable(n)),receiveTokens:n=>this.appClient.params.call(f.receiveTokens(n)),registerBridge:n=>this.appClient.params.call(f.registerBridge(n)),addBridgeToken:n=>this.appClient.params.call(f.addBridgeToken(n)),removeBridgeToken:n=>this.appClient.params.call(f.removeBridgeToken(n)),withdrawGasTokens:n=>this.appClient.params.call(f.withdrawGasTokens(n)),withdrawBridgingFeeInTokens:n=>this.appClient.params.call(f.withdrawBridgingFeeInTokens(n)),getBridgingCostInTokens:n=>this.appClient.params.call(f.getBridgingCostInTokens(n)),hashMessage:n=>this.appClient.params.call(f.hashMessage(n)),isOtherBridgeTokenSupported:n=>this.appClient.params.call(f.isOtherBridgeTokenSupported(n)),getTransactionCost:n=>this.appClient.params.call(f.getTransactionCost(n)),getReceiveTokensCost:(n={args:[]})=>this.appClient.params.call(f.getReceiveTokensCost(n)),getSendTransactionStorageCost:(n={args:[]})=>this.appClient.params.call(f.getSendTransactionStorageCost(n)),swap:n=>this.appClient.params.call(f.swap(n)),addPool:n=>this.appClient.params.call(f.addPool(n)),removePool:n=>this.appClient.params.call(f.removePool(n)),stopSwap:(n={args:[]})=>this.appClient.params.call(f.stopSwap(n)),startSwap:(n={args:[]})=>this.appClient.params.call(f.startSwap(n)),setStopAuthority:n=>this.appClient.params.call(f.setStopAuthority(n)),setRebalancer:n=>this.appClient.params.call(f.setRebalancer(n)),getGasUsage:n=>this.appClient.params.call(f.getGasUsage(n)),setGasUsage:n=>this.appClient.params.call(f.setGasUsage(n)),setGasOracle:n=>this.appClient.params.call(f.setGasOracle(n)),getTransactionRelayerCost:n=>this.appClient.params.call(f.getTransactionRelayerCost(n)),transferOwnership:n=>this.appClient.params.call(f.transferOwnership(n))};createTransaction={clearState:n=>this.appClient.createTransaction.bare.clearState(n),optInAsset:n=>this.appClient.createTransaction.call(f.optInAsset(n)),swapAndBridge:n=>this.appClient.createTransaction.call(f.swapAndBridge(n)),swapAndBridgeWithStable:n=>this.appClient.createTransaction.call(f.swapAndBridgeWithStable(n)),receiveTokens:n=>this.appClient.createTransaction.call(f.receiveTokens(n)),registerBridge:n=>this.appClient.createTransaction.call(f.registerBridge(n)),addBridgeToken:n=>this.appClient.createTransaction.call(f.addBridgeToken(n)),removeBridgeToken:n=>this.appClient.createTransaction.call(f.removeBridgeToken(n)),withdrawGasTokens:n=>this.appClient.createTransaction.call(f.withdrawGasTokens(n)),withdrawBridgingFeeInTokens:n=>this.appClient.createTransaction.call(f.withdrawBridgingFeeInTokens(n)),getBridgingCostInTokens:n=>this.appClient.createTransaction.call(f.getBridgingCostInTokens(n)),hashMessage:n=>this.appClient.createTransaction.call(f.hashMessage(n)),isOtherBridgeTokenSupported:n=>this.appClient.createTransaction.call(f.isOtherBridgeTokenSupported(n)),getTransactionCost:n=>this.appClient.createTransaction.call(f.getTransactionCost(n)),getReceiveTokensCost:(n={args:[]})=>this.appClient.createTransaction.call(f.getReceiveTokensCost(n)),getSendTransactionStorageCost:(n={args:[]})=>this.appClient.createTransaction.call(f.getSendTransactionStorageCost(n)),swap:n=>this.appClient.createTransaction.call(f.swap(n)),addPool:n=>this.appClient.createTransaction.call(f.addPool(n)),removePool:n=>this.appClient.createTransaction.call(f.removePool(n)),stopSwap:(n={args:[]})=>this.appClient.createTransaction.call(f.stopSwap(n)),startSwap:(n={args:[]})=>this.appClient.createTransaction.call(f.startSwap(n)),setStopAuthority:n=>this.appClient.createTransaction.call(f.setStopAuthority(n)),setRebalancer:n=>this.appClient.createTransaction.call(f.setRebalancer(n)),getGasUsage:n=>this.appClient.createTransaction.call(f.getGasUsage(n)),setGasUsage:n=>this.appClient.createTransaction.call(f.setGasUsage(n)),setGasOracle:n=>this.appClient.createTransaction.call(f.setGasOracle(n)),getTransactionRelayerCost:n=>this.appClient.createTransaction.call(f.getTransactionRelayerCost(n)),transferOwnership:n=>this.appClient.createTransaction.call(f.transferOwnership(n))};send={clearState:n=>this.appClient.send.bare.clearState(n),optInAsset:async n=>{let i=await this.appClient.send.call(f.optInAsset(n));return{...i,return:i.return}},swapAndBridge:async n=>{let i=await this.appClient.send.call(f.swapAndBridge(n));return{...i,return:i.return}},swapAndBridgeWithStable:async n=>{let i=await this.appClient.send.call(f.swapAndBridgeWithStable(n));return{...i,return:i.return}},receiveTokens:async n=>{let i=await this.appClient.send.call(f.receiveTokens(n));return{...i,return:i.return}},registerBridge:async n=>{let i=await this.appClient.send.call(f.registerBridge(n));return{...i,return:i.return}},addBridgeToken:async n=>{let i=await this.appClient.send.call(f.addBridgeToken(n));return{...i,return:i.return}},removeBridgeToken:async n=>{let i=await this.appClient.send.call(f.removeBridgeToken(n));return{...i,return:i.return}},withdrawGasTokens:async n=>{let i=await this.appClient.send.call(f.withdrawGasTokens(n));return{...i,return:i.return}},withdrawBridgingFeeInTokens:async n=>{let i=await this.appClient.send.call(f.withdrawBridgingFeeInTokens(n));return{...i,return:i.return}},getBridgingCostInTokens:async n=>{let i=await this.appClient.send.call(f.getBridgingCostInTokens(n));return{...i,return:i.return}},hashMessage:async n=>{let i=await this.appClient.send.call(f.hashMessage(n));return{...i,return:i.return}},isOtherBridgeTokenSupported:async n=>{let i=await this.appClient.send.call(f.isOtherBridgeTokenSupported(n));return{...i,return:i.return}},getTransactionCost:async n=>{let i=await this.appClient.send.call(f.getTransactionCost(n));return{...i,return:i.return}},getReceiveTokensCost:async(n={args:[]})=>{let i=await this.appClient.send.call(f.getReceiveTokensCost(n));return{...i,return:i.return}},getSendTransactionStorageCost:async(n={args:[]})=>{let i=await this.appClient.send.call(f.getSendTransactionStorageCost(n));return{...i,return:i.return}},swap:async n=>{let i=await this.appClient.send.call(f.swap(n));return{...i,return:i.return}},addPool:async n=>{let i=await this.appClient.send.call(f.addPool(n));return{...i,return:i.return}},removePool:async n=>{let i=await this.appClient.send.call(f.removePool(n));return{...i,return:i.return}},stopSwap:async(n={args:[]})=>{let i=await this.appClient.send.call(f.stopSwap(n));return{...i,return:i.return}},startSwap:async(n={args:[]})=>{let i=await this.appClient.send.call(f.startSwap(n));return{...i,return:i.return}},setStopAuthority:async n=>{let i=await this.appClient.send.call(f.setStopAuthority(n));return{...i,return:i.return}},setRebalancer:async n=>{let i=await this.appClient.send.call(f.setRebalancer(n));return{...i,return:i.return}},getGasUsage:async n=>{let i=await this.appClient.send.call(f.getGasUsage(n));return{...i,return:i.return}},setGasUsage:async n=>{let i=await this.appClient.send.call(f.setGasUsage(n));return{...i,return:i.return}},setGasOracle:async n=>{let i=await this.appClient.send.call(f.setGasOracle(n));return{...i,return:i.return}},getTransactionRelayerCost:async n=>{let i=await this.appClient.send.call(f.getTransactionRelayerCost(n));return{...i,return:i.return}},transferOwnership:async n=>{let i=await this.appClient.send.call(f.transferOwnership(n));return{...i,return:i.return}}};clone(n){return new a(this.appClient.clone(n))}async getBridgingCostInTokens(n){return(await this.appClient.send.call(f.getBridgingCostInTokens(n))).return}async hashMessage(n){return(await this.appClient.send.call(f.hashMessage(n))).return}async isOtherBridgeTokenSupported(n){return(await this.appClient.send.call(f.isOtherBridgeTokenSupported(n))).return}async getTransactionCost(n){return(await this.appClient.send.call(f.getTransactionCost(n))).return}async getReceiveTokensCost(n={args:[]}){return(await this.appClient.send.call(f.getReceiveTokensCost(n))).return}async getSendTransactionStorageCost(n={args:[]}){return(await this.appClient.send.call(f.getSendTransactionStorageCost(n))).return}async getGasUsage(n){return(await this.appClient.send.call(f.getGasUsage(n))).return}async getTransactionRelayerCost(n){return(await this.appClient.send.call(f.getTransactionRelayerCost(n))).return}state={global:{getAll:async()=>{let n=await this.appClient.state.global.getAll();return{chainId:n.chainId,messenger:n.messenger,stopAuthority:n.stopAuthority,rebalancer:n.rebalancer,canSwap:n.canSwap,gasOracle:n.gasOracle,owner:n.owner}},chainId:async()=>await this.appClient.state.global.getValue("chainId"),messenger:async()=>await this.appClient.state.global.getValue("messenger"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),rebalancer:async()=>await this.appClient.state.global.getValue("rebalancer"),canSwap:async()=>await this.appClient.state.global.getValue("canSwap"),gasOracle:async()=>await this.appClient.state.global.getValue("gasOracle"),owner:async()=>await this.appClient.state.global.getValue("owner")},box:{getAll:async()=>{let n=await this.appClient.state.box.getAll();return{}},processedMessages:{getMap:async()=>await this.appClient.state.box.getMap("processedMessages"),value:async n=>await this.appClient.state.box.getMapValue("processedMessages",n)},sentMessages:{getMap:async()=>await this.appClient.state.box.getMap("sentMessages"),value:async n=>await this.appClient.state.box.getMapValue("sentMessages",n)},otherBridges:{getMap:async()=>await this.appClient.state.box.getMap("otherBridges"),value:async n=>await this.appClient.state.box.getMapValue("otherBridges",n)},otherBridgeTokens:{getMap:async()=>await this.appClient.state.box.getMap("otherBridgeTokens"),value:async n=>await this.appClient.state.box.getMapValue("otherBridgeTokens",n)},pools:{getMap:async()=>await this.appClient.state.box.getMap("pools"),value:async n=>await this.appClient.state.box.getMapValue("pools",n)},fromGasOracleScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("fromGasOracleScalingFactor"),value:async n=>await this.appClient.state.box.getMapValue("fromGasOracleScalingFactor",n)},bridgingFeeConversionScalingFactor:{getMap:async()=>await this.appClient.state.box.getMap("bridgingFeeConversionScalingFactor"),value:async n=>await this.appClient.state.box.getMapValue("bridgingFeeConversionScalingFactor",n)},gasUsage:{getMap:async()=>await this.appClient.state.box.getMap("gasUsage"),value:async n=>await this.appClient.state.box.getMapValue("gasUsage",n)}}};newGroup(){let n=this,i=this.algorand.newGroup(),r=Promise.resolve(),o=[];return{optInAsset(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.optInAsset(s))),o.push(void 0),this},swapAndBridge(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.swapAndBridge(s))),o.push(void 0),this},swapAndBridgeWithStable(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.swapAndBridgeWithStable(s))),o.push(void 0),this},receiveTokens(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.receiveTokens(s))),o.push(void 0),this},registerBridge(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.registerBridge(s))),o.push(void 0),this},addBridgeToken(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.addBridgeToken(s))),o.push(void 0),this},removeBridgeToken(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.removeBridgeToken(s))),o.push(void 0),this},withdrawGasTokens(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.withdrawGasTokens(s))),o.push(void 0),this},withdrawBridgingFeeInTokens(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.withdrawBridgingFeeInTokens(s))),o.push(void 0),this},getBridgingCostInTokens(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.getBridgingCostInTokens(s))),o.push(d=>n.decodeReturnValue("getBridgingCostInTokens(byte,uint64)uint64",d)),this},hashMessage(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.hashMessage(s))),o.push(d=>n.decodeReturnValue("hashMessage(uint64,byte[32],byte,byte,byte[32],byte[32])byte[32]",d)),this},isOtherBridgeTokenSupported(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.isOtherBridgeTokenSupported(s))),o.push(d=>n.decodeReturnValue("isOtherBridgeTokenSupported(byte,byte[32])bool",d)),this},getTransactionCost(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.getTransactionCost(s))),o.push(d=>n.decodeReturnValue("getTransactionCost(byte)uint64",d)),this},getReceiveTokensCost(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.getReceiveTokensCost(s))),o.push(d=>n.decodeReturnValue("getReceiveTokensCost()uint64",d)),this},getSendTransactionStorageCost(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.getSendTransactionStorageCost(s))),o.push(d=>n.decodeReturnValue("getSendTransactionStorageCost()uint64",d)),this},swap(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.swap(s))),o.push(void 0),this},addPool(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.addPool(s))),o.push(void 0),this},removePool(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.removePool(s))),o.push(void 0),this},stopSwap(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.stopSwap(s))),o.push(void 0),this},startSwap(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.startSwap(s))),o.push(void 0),this},setStopAuthority(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setStopAuthority(s))),o.push(void 0),this},setRebalancer(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setRebalancer(s))),o.push(void 0),this},getGasUsage(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.getGasUsage(s))),o.push(d=>n.decodeReturnValue("getGasUsage(byte)uint64",d)),this},setGasUsage(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setGasUsage(s))),o.push(void 0),this},setGasOracle(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setGasOracle(s))),o.push(void 0),this},getTransactionRelayerCost(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.getTransactionRelayerCost(s))),o.push(d=>n.decodeReturnValue("getTransactionRelayerCost(byte)uint64",d)),this},transferOwnership(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.transferOwnership(s))),o.push(void 0),this},clearState(s){return r=r.then(()=>i.addAppCall(n.params.clearState(s))),this},addTransaction(s,d){return r=r.then(()=>i.addTransaction(s,d)),this},async composer(){return await r,i},async simulate(s){await r;let d=await(s?i.simulate(s):i.simulate());return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}},async send(s){await r;let d=await i.send(s);return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}}}}};var Ns=require("@algorandfoundation/algokit-utils/types/app-arc56"),hi=require("@algorandfoundation/algokit-utils/types/app-client"),bg=require("@algorandfoundation/algokit-utils/types/app-factory"),ba={name:"PaddingUtil",structs:{},methods:[{name:"createApplication",args:[],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],networks:{},state:{schema:{global:{ints:0,bytes:0},local:{ints:0,bytes:0}},keys:{global:{},local:{},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:["NoOp"]},sourceInfo:{approval:{sourceInfo:[{pc:[27],errorMessage:"OnCompletion must be NoOp && can only call when creating"},{pc:[37],errorMessage:"OnCompletion must be NoOp && can only call when not creating"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3BhZGRpbmctdXRpbC5jb250cmFjdC5hbGdvLnRzOjQKICAgIC8vIGV4cG9ydCBjbGFzcyBQYWRkaW5nVXRpbCBleHRlbmRzIENvbnRyYWN0IGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9wYWRkaW5nQDUKICAgIHB1c2hieXRlcyAweGI4NDQ3YjM2IC8vIG1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAwCiAgICBtYXRjaCBtYWluX2NyZWF0ZUFwcGxpY2F0aW9uX3JvdXRlQDMKICAgIGVycgoKbWFpbl9jcmVhdGVBcHBsaWNhdGlvbl9yb3V0ZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wYWRkaW5nLXV0aWwuY29udHJhY3QuYWxnby50czo2CiAgICAvLyBjcmVhdGVBcHBsaWNhdGlvbigpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICAmJgogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBtdXN0IGJlIE5vT3AgJiYgY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCgptYWluX3BhZGRpbmdANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcGFkZGluZy11dGlsLmNvbnRyYWN0LmFsZ28udHM6OQogICAgLy8gQGJhcmVtZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CzEbQQAZgAS4RHs2NhoAjgEAAQAxGRQxGBQQRIEBQzEZFDEYEESBAUM=",clear:"C4EBQw=="},events:[],templateVariables:{}};var ya=class a{appClient;constructor(n){this.appClient=n instanceof hi.AppClient?n:new hi.AppClient({...n,appSpec:ba})}decodeReturnValue(n,i){return i!==void 0?(0,Ns.getArc56ReturnValue)(i,this.appClient.getABIMethod(n),ba.structs):void 0}static async fromCreatorAndName(n){return new a(await hi.AppClient.fromCreatorAndName({...n,appSpec:ba}))}static async fromNetwork(n){return new a(await hi.AppClient.fromNetwork({...n,appSpec:ba}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={clearState:n=>this.appClient.params.bare.clearState(n),bare:n=>this.appClient.params.bare.call(n)};createTransaction={clearState:n=>this.appClient.createTransaction.bare.clearState(n),bare:n=>this.appClient.createTransaction.bare.call(n)};send={clearState:n=>this.appClient.send.bare.clearState(n),bare:n=>this.appClient.send.bare.call(n)};clone(n){return new a(this.appClient.clone(n))}state={};newGroup(){let n=this,i=this.algorand.newGroup(),r=Promise.resolve(),o=[];return{bare(s){return r=r.then(()=>i.addAppCall(n.params.bare(s))),this},clearState(s){return r=r.then(()=>i.addAppCall(n.params.clearState(s))),this},addTransaction(s,d){return r=r.then(()=>i.addTransaction(s,d)),this},async composer(){return await r,i},async simulate(s){await r;let d=await(s?i.simulate(s):i.simulate());return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}},async send(s){await r;let d=await i.send(s);return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}}}}};var ws=require("@algorandfoundation/algokit-utils"),Xn=ce(require("algosdk"));function $t(a){return(a*1e3).microAlgos()}async function Jr(a,n,i){let r=new Xn.AtomicTransactionComposer,o=(0,Xn.makeBasicAccountTransactionSigner)({addr:n,sk:new Uint8Array(64)});a.forEach(c=>{r.addTransaction({txn:c,signer:o})});let d=(await(0,ws.populateAppCallResources)(r,i)).buildGroup().map(c=>c.txn);return qt(...d)}function qt(...a){return a.map(i=>Xn.default.encodeUnsignedTransaction(i)).map(i=>Buffer.from(i).toString("hex"))}async function Ca(a,n,i){typeof a=="string"&&(a=BigInt(a));let o=(await i.account.getInformation(n)).assets;return o?o.find(({assetId:d})=>d===a)!==void 0:!1}async function Ia(a,n,i){typeof a=="string"&&(a=BigInt(a));let o=(await i.account.getInformation(n)).appsLocalState;return o?o.find(({id:d})=>d===a)!==void 0:!1}var ve=class{};var Ls=require("@solana/web3.js"),fi=require("@stacks/transactions"),js=require("@stellar/stellar-sdk"),va=ce(require("algosdk")),be=require("big.js"),Or=ce(require("randombytes")),xr=require("tronweb"),ks=require("web3");var N=require("big.js"),ha=ce(require("bn.js"));function zr(a,n){return(0,N.Big)(100).minus((0,N.Big)(100).times(n).div(a)).toNumber()}function pn(a,n){return Me(a,n,3).round(0,N.Big.roundDown)}function Xe(a,n){return Me(a,3,n)}function Me(a,n,i){let r=(0,N.Big)(i).minus(n).toNumber();return(0,N.Big)(a).times(vi(r))}function vi(a){return(0,N.Big)(10).pow(a)}function X(a,n){return(0,N.Big)(a).times(vi(n))}function M(a,n){let i=(0,N.Big)(a);return i.eq(0)?(0,N.Big)(0):(0,N.Big)(i).div(vi(n))}function me(a){return M((0,N.Big)(a.tokenBalance).minus(a.vUsdBalance).toFixed(),3).div(2).toFixed()}function Tt(a,{feeShare:n,decimals:i},r){let o=(0,N.Big)(a);if(o.lte(0))return"0";let s=o.times(n),d=o.minus(s),c=pn(d,i),g=(0,N.Big)(r.tokenBalance).plus(c),A=Ft(g,r.aValue,r.dValue);return(0,N.Big)(r.vUsdBalance).minus(A).round(0,N.Big.roundDown).toFixed()}function Ri(a,{feeShare:n,decimals:i},r){let o=(0,N.Big)(a);if(o.lte(0))return(0,N.Big)(0).toFixed();let s=o.plus(r.vUsdBalance),d=Ft(s,r.aValue,r.dValue),c=Xe((0,N.Big)(r.tokenBalance).minus(d),i),g=(0,N.Big)(c).times(n);return(0,N.Big)(c).minus(g).round(0,N.Big.roundDown).toFixed()}function Gs(a,n){let i=(0,N.Big)(a);if(i.lte(0))return n;let r=i.plus(n.vUsdBalance),o=Ft(r,n.aValue,n.dValue);return{aValue:n.aValue,dValue:n.dValue,tokenBalance:o.toFixed(0),vUsdBalance:r.toFixed(0)}}function Zs(a,{feeShare:n,decimals:i},r){if((0,N.Big)(a).lte(0))return(0,N.Big)(0);let o=(0,N.Big)(r.vUsdBalance).minus(a);if(o.lte(0))throw new Wt;let s=Ft(o,r.aValue,r.dValue),d=(0,N.Big)(s).minus(r.tokenBalance),c=Xe(d,i),g=(0,N.Big)(n).div((0,N.Big)(1).minus(n)),A=(0,N.Big)(c).times(g).round(0,N.Big.roundUp);return(0,N.Big)(c).plus(A).round(0,N.Big.roundDown)}function Ss(a,{feeShare:n,decimals:i},r){if((0,N.Big)(a).lte(0))return(0,N.Big)(0);let o=(0,N.Big)(n).div((0,N.Big)(1).minus(n)),s=(0,N.Big)(a).times(o).round(0,N.Big.roundUp),d=(0,N.Big)(a).plus(s),c=pn(d,i),g=(0,N.Big)(r.tokenBalance).minus(c);if(g.lte(0))throw new Wt;let A=Ft(g,r.aValue,r.dValue);return(0,N.Big)(A).minus(r.vUsdBalance).round(0,N.Big.roundDown)}function Ft(a,n,i){let r=(0,N.Big)(4).times(n).times((0,N.Big)(i).minus(a)).minus(i),o=(0,N.Big)(i).pow(3),s=r.pow(2),d=(0,N.Big)(a).times((0,N.Big)(a).times(s).plus((0,N.Big)(4).times(n).times(o))).sqrt().round(0,N.Big.roundDown),c=(0,N.Big)(8).times(n).times(a),g=r.times(a).plus(d).div(c).round(0,N.Big.roundDown);return g.eq(0)?(0,N.Big)(0):g.plus(1)}function Vs(a,n,i,r){let o=new ha.default(a),s=new ha.default(i),d=new ha.default(n);return o.mul(s).shrn(r).sub(d).toString()}function Xs(a){return(0,N.Big)(a).gt(0)?`${Number((0,N.Big)(a).times(100).toFixed(2)).toLocaleString()}%`:"N/A"}function Ms(a,n,i){let r=(0,N.Big)(n).times(i),o=(0,N.Big)(n).plus(i),s=(0,N.Big)(8).times(a).times(r).times(o),d=r.times((0,N.Big)(16).times(a).minus(4)).div(3),c=s.times(s),g=d.times(d).times(d),A=c.plus(g),l=(0,N.Big)(A).sqrt(),u=(0,N.Big)(Math.cbrt(+s.plus(l).toFixed())),b=(0,N.Big)(Math.cbrt(+s.minus(l).toFixed()));return u.plus(b).toFixed()}function Mt(a,n,i){let r;switch(n){case"EVM":{r=Ps(a);break}case"SOLANA":{r=new Ls.PublicKey(a).toBuffer();break}case"TRX":{r=Ig(a);break}case"SRB":{r=new js.Address(a).toBuffer();break}case"SUI":{r=Ps(a);break}case"ALG":{r=yg(a);break}case"STX":{r=Cg(a);break}}switch(i){case"EVM":return"0x"+r.toString("hex");case"SOLANA":return Array.from(r);case"TRX":return r;case"SRB":return r.toJSON().data;case"SUI":return"0x"+r.toString("hex");case"ALG":return r;case"STX":return r}}function ct(a){return a.replace(/^0x/i,"")}function Ur(a){return Buffer.from(a.replace(/^0x/i,""),"hex")}function Ps(a){let i=Ur(a);return Buffer.concat([Buffer.alloc(32-i.length,0),i],32)}function yg(a){if(va.default.isValidAddress(a))return Buffer.from(va.Address.fromString(a).publicKey);if(/^\d+$/.test(a)){let n=BigInt(a).toString(16);return n=n.padStart(64,"0"),Buffer.from(n,"hex")}throw new h(`Unexpected Alg address: ${a}`)}function Cg(a){if(a.includes(".")){let[i,r]=(0,fi.parseContractId)(a);if(!i||!r)throw new h(`Unexpected Alg address: ${a}`);let o=Buffer.from((0,fi.createAddress)(i).hash160,"hex"),s=ks.Web3.utils.keccak256(Buffer.concat([o,Buffer.from(r)]));return Ur(s)}let n=Buffer.from((0,fi.createAddress)(a).hash160,"hex");return Hs(n,32)}function Ig(a){let n=Yi(a),i=Ur(n);return Hs(i,32)}function Yi(a){let n=xr.utils.crypto.decodeBase58Address(a);return n?xr.utils.bytes.byteArray2hexStr(n).replace(/^41/,"0x"):""}function Hs(a,n){if(a.length>=n)return a;let i=Buffer.alloc(n,0);return a.copy(i,n-a.length),i}function en(){return(0,Or.default)(32)}function Nt(){let a=(0,Or.default)(32).readBigInt64BE();return a<0?a*-1n:a}function He(a,n){let i={},r=n.sourceToken;switch(i.amount=X(n.amount,r.decimals).toFixed(),i.contractAddress=r.bridgeAddress,i.fromAccountAddress=n.fromAccountAddress,a){case"SUI":{if(!r.originTokenAddress)throw new h("SUI sourceToken must contain 'originTokenAddress'");i.fromTokenAddress=r.originTokenAddress;break}case"ALG":{i.fromTokenAddress=r.tokenAddress;break}default:i.fromTokenAddress=Mt(r.tokenAddress,a,a)}switch(i.toAccountAddress=n.toAccountAddress,a){case"SUI":{if(!n.destinationToken.originTokenAddress)throw new h("SUI destinationToken must contain 'originTokenAddress'");i.toTokenAddress=n.destinationToken.originTokenAddress;break}case"ALG":{i.toTokenAddress=n.destinationToken.tokenAddress;break}default:i.toTokenAddress=Mt(n.destinationToken.tokenAddress,a,a)}return i.minimumReceiveAmount=n.minimumReceiveAmount?X(n.minimumReceiveAmount,n.destinationToken.decimals).toFixed():"0",i}async function Pe(a,n,i){let r={};r.fromChainId=n.sourceToken.allbridgeChainId,r.fromChainSymbol=n.sourceToken.chainSymbol;let o=k.getChainProperty(n.destinationToken.chainSymbol).chainType;if(a==="SUI"){if(!n.sourceToken.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");r.fromTokenAddress=n.sourceToken.originTokenAddress}else r.fromTokenAddress=n.sourceToken.tokenAddress;if(r.toChainId=n.destinationToken.allbridgeChainId,r.toTokenAddress=n.destinationToken.tokenAddress,r.gasFeePaymentMethod=n.gasFeePaymentMethod??"native",r.gasFeePaymentMethod==="abr"&&!n.sourceToken.abrPayer)throw new h("Source token must contain 'abrPayer' for ARB0 payment method");let s=n.sourceToken;switch(n.messenger){case 3:if(!s.cctpAddress||!n.destinationToken.cctpAddress)throw new We("Such route does not support CCTP protocol");r.contractAddress=s.cctpAddress;break;case 4:if(!s.cctpV2Address||!n.destinationToken.cctpV2Address)throw new We("Such route does not support CCTP V2 protocol");r.contractAddress=s.cctpV2Address;break;case 5:if(!s.oftBridgeAddress||!n.destinationToken.oftBridgeAddress||s.oftId!==n.destinationToken.oftId)throw new Te("Such route does not support OFT protocol");r.contractAddress=s.oftBridgeAddress;break;case 1:case 2:r.contractAddress=s.bridgeAddress;break}r.messenger=n.messenger,r.fromAccountAddress=n.fromAccountAddress,r.amount=X(n.amount,s.decimals).toFixed();let{fee:d,feeFormat:c}=n;if(!d){let u=(await Kr(n.sourceToken,r.toChainId,r.messenger,i))[r.gasFeePaymentMethod];if(!u)throw new Zn;d=u.int,c="int"}if(c=="float")switch(r.gasFeePaymentMethod){case"native":r.fee=X(d,k.getChainDecimalsByType(s.chainType)).toFixed(0);break;case"stablecoin":r.fee=X(d,s.decimals).toFixed(0);break;case"abr":if(!s.abrPayer)throw new h("Source token must contain 'abrPayer' for ARB0 payment method");r.fee=X(d,s.abrPayer.abrToken.decimals).toFixed(0);break;default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}else r.fee=d;let{extraGas:g,extraGasFormat:A}=n;if(g&&+g>0){let l=await Qr(s,n.destinationToken,r.messenger,i),u,b;switch(r.gasFeePaymentMethod){case"native":u=k.getChainDecimalsByType(s.chainType),b=(0,be.Big)(l.exchangeRate);break;case"stablecoin":u=s.decimals,b=(0,be.Big)(l.exchangeRate).div(l.sourceNativeTokenPrice);break;case"abr":if(!s.abrPayer)throw new h("Source token must contain 'abrPayer' for ARB0 payment method");if(!l.abrExchangeRate)throw new h("Cannot transfer WITH_ARB option");u=s.abrPayer.abrToken.decimals,b=(0,be.Big)(l.exchangeRate).div(l.abrExchangeRate);break;default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}switch(A??"int"){case"float":{r.extraGas=X(g,u).toFixed(0);let C=b.mul(g);r.extraGasDest=X(C,k.getChainDecimalsByType(n.destinationToken.chainType)).toFixed(0,be.Big.roundDown);break}case"int":{r.extraGas=g;let C=M(r.extraGas,k.getChainDecimalsByType(s.chainType)),Y=b.mul(C);r.extraGasDest=X(Y,k.getChainDecimalsByType(n.destinationToken.chainType)).toFixed(0,be.Big.roundDown);break}}vg(r.extraGas,r.gasFeePaymentMethod,l)}switch(["SUI","ALG"].includes(a)||(r.fromTokenAddress=Mt(r.fromTokenAddress,a,a)),r.toAccountAddress=Mt(n.toAccountAddress,o,a),r.toTokenAddress=Mt(r.toTokenAddress,o,a),r.gasFeePaymentMethod){case"native":break;case"stablecoin":hg(r.amount,s.decimals,r.fee,r.extraGas);break;case"abr":{let{abrExchangeRate:l}=await i.getReceiveTransactionCost({sourceChainId:r.fromChainId,destinationChainId:r.toChainId,messenger:r.messenger,sourceToken:n.sourceToken.tokenAddress});r.abrExchangeRate=l;break}default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}return r}function hg(a,n,i,r){let o=(0,be.Big)(a).minus(i).minus(r??0);if(o.lte(0))throw new ln(`Amount not enough to pay fee, ${M((0,be.Big)(o).minus(1).neg(),n).toFixed()} stables is missing`)}async function Kr(a,n,i,r){let o=await r.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:n,messenger:i,sourceToken:a.tokenAddress}),s={native:{int:o.fee,float:M(o.fee,k.getChainDecimalsByType(a.chainType)).toFixed()},adminFeeShareWithExtras:o.adminFeeShareWithExtras};if(o.sourceNativeTokenPrice){let c=Me(new be.Big(o.fee).mul(o.sourceNativeTokenPrice),k.getChainDecimalsByType(a.chainType),a.decimals).toFixed(0,be.Big.roundUp);s.stablecoin={int:c,float:M(c,a.decimals).toFixed()}}let d=Ve[i];if(o.abrExchangeRate&&a.abrPayer&&a.abrPayer.payerAvailability[d]){let c=Me(new be.Big(o.fee).mul(o.abrExchangeRate),k.getChainDecimalsByType(a.chainType),a.abrPayer.abrToken.decimals).toFixed(0,be.Big.roundUp);s.abr={int:c,float:M(c,a.abrPayer.abrToken.decimals).toFixed()}}return s}function vg(a,n,i){let r=i.extraGasMax[n];if(!r)throw new Zn(`Impossible to pay extra gas by '${n}' payment method`);let o=r.int;if((0,be.Big)(a).gt(o))throw new pi(`Extra gas ${a} in int format, exceeded limit ${o} for '${n}' payment method`)}async function Qr(a,n,i,r){let o={},s=await r.getReceiveTransactionCost({sourceChainId:a.allbridgeChainId,destinationChainId:n.allbridgeChainId,messenger:i,sourceToken:a.tokenAddress}),d=n.txCostAmount.maxAmount,c=M(d,k.getChainDecimalsByType(n.chainType)).toFixed(),g=(0,be.Big)(c).div(s.exchangeRate).toFixed(k.getChainDecimalsByType(a.chainType),be.Big.roundDown),A=X(g,k.getChainDecimalsByType(a.chainType)).toFixed(0);if(o.native={int:A,float:g},s.sourceNativeTokenPrice){let b=(0,be.Big)(g).mul(s.sourceNativeTokenPrice).toFixed(a.decimals,be.Big.roundDown);o.stablecoin={int:X(b,a.decimals).toFixed(0),float:b}}let l,u=Ve[i];if(s.abrExchangeRate&&a.abrPayer&&a.abrPayer.payerAvailability[u]){l=!0;let b=(0,be.Big)(g).mul(s.abrExchangeRate).toFixed(a.abrPayer.abrToken.decimals,be.Big.roundDown);o.abr={int:X(b,a.abrPayer.abrToken.decimals).toFixed(0),float:b}}return{extraGasMax:o,destinationChain:{gasAmountMax:{int:d,float:c},swap:{int:n.txCostAmount.swap,float:M(n.txCostAmount.swap,k.getChainDecimalsByType(n.chainType)).toFixed()},transfer:{int:n.txCostAmount.transfer,float:M(n.txCostAmount.transfer,k.getChainDecimalsByType(n.chainType)).toFixed()}},exchangeRate:s.exchangeRate,abrExchangeRate:l?s.abrExchangeRate:void 0,sourceNativeTokenPrice:s.sourceNativeTokenPrice}}function Js(a){return a.sourceToken.chainSymbol!==a.destinationToken.chainSymbol}var Wi=class extends ve{constructor(i,r){super();this.algorand=i;this.api=r;i.setDefaultSigner(Mn.default.makeBasicAccountTransactionSigner(Mn.default.mnemonicToSecretKey("tunnel gym elevator pulse motor evolve release orange culture make sister approve winter chair armor grocery distance festival tiger holiday dish wisdom region absorb secret")))}chainType="ALG";send(i){throw new H}async buildRawTransactionSend(i){let r=await Pe(this.chainType,i,this.api);if(!i.sourceToken.bridgeId)throw new h("ALG sourceToken must contain 'bridgeId'");if(!i.sourceToken.paddingUtilId)throw new h("ALG sourceToken must contain 'paddingUtilId'");let o=BigInt(i.sourceToken.bridgeId),s=this.getBridge(o),d=BigInt(i.sourceToken.paddingUtilId),c=this.getPaddingUtil(d),g=Mn.Address.fromString(i.fromAccountAddress),A=BigInt(i.sourceToken.tokenAddress),l=r.toChainId,u=r.toAccountAddress,b=r.toTokenAddress,C=en(),Y=BigInt(r.amount),W=BigInt(r.fee);r.extraGas&&(W=W+BigInt(r.extraGas));let F=this.algorand.newGroup(),w=await this.algorand.createTransaction.assetTransfer({amount:Y,assetId:A,receiver:s.appAddress,sender:g});switch(r.gasFeePaymentMethod){case"native":{let V=await this.algorand.createTransaction.payment({amount:zs.AlgoAmount.MicroAlgo(W),receiver:s.appAddress,sender:g});F.addAppCallMethodCall(await s.params.swapAndBridge({args:{paymentRef:V,assetTransferRef:w,recipient:u,destinationChainId:l,receiveToken:b,nonce:C},sender:g,extraFee:$t(8)}));break}case"stablecoin":{F.addAppCallMethodCall(await s.params.swapAndBridgeWithStable({args:{assetTransferRef:w,recipient:u,destinationChainId:l,receiveToken:b,nonce:C,feeTokenAmount:W},sender:g,extraFee:$t(9)}));let V=await this.algorand.createTransaction.appCall({appId:c.appId,sender:g,note:"padding_1"});F.addTransaction(V);break}case"abr":throw new h("ALG bridge does not support ARB0 payment method");default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}let R=await this.algorand.createTransaction.appCall({appId:c.appId,sender:g,note:"padding"});F.addTransaction(R);let{transactions:G}=await F.buildTransactions();return Jr(G,g,this.algorand.client.algod)}async buildRawTransactionSwap(i){let r=He(this.chainType,i),o=Mn.Address.fromString(i.fromAccountAddress),s=i.toAccountAddress,d=BigInt(i.sourceToken.tokenAddress),c=BigInt(i.destinationToken.tokenAddress),g=BigInt(r.minimumReceiveAmount),A=BigInt(r.amount);if(!i.sourceToken.bridgeId)throw new h("ALG sourceToken must contain 'bridgeId'");if(!i.sourceToken.paddingUtilId)throw new h("ALG sourceToken must contain 'paddingUtilId'");let l=BigInt(i.sourceToken.bridgeId),u=this.getBridge(l),b=BigInt(i.sourceToken.paddingUtilId),C=this.getPaddingUtil(b),Y=this.algorand.newGroup();i.fromAccountAddress===s&&(await Ca(c,s,this.algorand)||Y.addAssetOptIn({sender:o,assetId:c}));let W=this.algorand.createTransaction.assetTransfer({assetId:d,amount:A,sender:o,receiver:u.appAddress});Y.addAppCallMethodCall(await u.params.swap({args:{assetTransferRef:W,recipient:s,receiveAsset:c,receiveAmountMin:g},sender:o,extraFee:$t(4)}));let F=await this.algorand.createTransaction.appCall({appId:C.appId,sender:o});Y.addTransaction(F);let{transactions:w}=await Y.buildTransactions();return Jr(w,o,this.algorand.client.algod)}getBridge(i){return this.algorand.client.getTypedAppClientById(ma,{appId:i})}getPaddingUtil(i){return this.algorand.client.getTypedAppClientById(ya,{appId:i})}};var qr=require("big.js");var Rg={abi:[{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"},{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"},{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"},{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"gas",type:"uint256"}],name:"BridgingFeeFromTokens",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"bridgeTransactionCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"messageTransactionCost",type:"uint256"}],name:"ReceiveFee",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Received",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"bytes32",name:"sendToken",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"sendAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receiveAmount",type:"uint256"}],name:"Swapped",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{indexed:!1,internalType:"bytes32",name:"message",type:"bytes32"}],name:"TokensReceived",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"receiveToken",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"addBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract Pool",name:"pool",type:"address"},{internalType:"bytes32",name:"token",type:"bytes32"}],name:"addPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"canSwap",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"address",name:"tokenAddress",type:"address"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"getMessageGasUsage",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"},{internalType:"enum MessengerProtocol",name:"protocol",type:"uint8"}],name:"hasReceivedMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"message",type:"bytes32"}],name:"hasSentMessage",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"}],name:"hashMessage",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"otherBridgeTokens",outputs:[{internalType:"bool",name:"isSupported",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"otherBridges",outputs:[{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"tokenId",type:"bytes32"}],name:"pools",outputs:[{internalType:"contract Pool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"processedMessages",outputs:[{internalType:"uint256",name:"isProcessed",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"bridgeAddress",type:"bytes32"}],name:"registerBridge",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_chainId",type:"uint256"},{internalType:"bytes32",name:"tokenAddress",type:"bytes32"}],name:"removeBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"messageHash",type:"bytes32"}],name:"sentMessages",outputs:[{internalType:"uint256",name:"isSent",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"contract Messenger",name:"_allbridgeMessenger",type:"address"}],name:"setAllbridgeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"_gasOracle",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_rebalancer",type:"address"}],name:"setRebalancer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract WormholeMessenger",name:"_wormholeMessenger",type:"address"}],name:"setWormholeMessenger",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopSwap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"address",name:"recipient",type:"address"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"}],name:"swap",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"token",type:"bytes32"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"bytes32",name:"receiveToken",type:"bytes32"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"enum MessengerProtocol",name:"messenger",type:"uint8"},{internalType:"uint256",name:"feeTokenAmount",type:"uint256"}],name:"swapAndBridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token",type:"address"}],name:"withdrawBridgingFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGasTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},xs=Rg;var fg={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"address",name:"cctpMessenger_",type:"address"},{internalType:"address",name:"cctpTransmitter_",type:"address"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedExtraGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"RecipientReplaced",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"}],name:"TokensSentExtras",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"nonce",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFee",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"}],name:"TokensSent",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"bytes32",name:"recipientWalletAddress",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"}],name:"bridgeWithWalletAddress",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"originalMessage",type:"bytes"},{internalType:"bytes",name:"originalAttestation",type:"bytes"},{internalType:"bytes32",name:"newRecipient",type:"bytes32"}],name:"changeRecipient",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"gasUsage",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"destinationChainId",type:"uint256"}],name:"getBridgingCostInTokens",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getDomainByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"}],name:"getTransactionCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"sourceChainId",type:"uint256"},{internalType:"uint64",name:"nonce",type:"uint64"}],name:"isMessageProcessed",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"recipient",type:"address"},{internalType:"bytes",name:"message",type:"bytes"},{internalType:"bytes",name:"signature",type:"bytes"}],name:"receiveTokens",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"domain",type:"uint32"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],name:"setGasOracle",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId",type:"uint256"},{internalType:"uint256",name:"gasAmount",type:"uint256"}],name:"setGasUsage",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Os=fg;var Yg={abi:[{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"chainPrecision_",type:"uint256"},{internalType:"contract IGasOracle",name:"gasOracle_",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"uint16",name:"optionType",type:"uint16"}],name:"InvalidOptionType",type:"error"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"bytes32",name:"recipient",type:"bytes32"},{indexed:!1,internalType:"address",name:"tokenAddress",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"destinationChainId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeFromTokens",type:"uint256"},{indexed:!1,internalType:"uint256",name:"relayerFeeWithExtraGas",type:"uint256"},{indexed:!1,internalType:"uint256",name:"receivedRelayerFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"adminFeeTokenAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"extraGasDestinationToken",type:"uint256"}],name:"OftTokensSent",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"ReceivedGas",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"addToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"feeShare",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bytes32",name:"recipient",type:"bytes32"},{internalType:"uint256",name:"destinationChainId",type:"uint256"},{internalType:"uint256",name:"relayerFeeTokenAmount",type:"uint256"},{internalType:"uint256",name:"extraGasInDestinationToken",type:"uint256"},{internalType:"uint256",name:"slippageBP",type:"uint256"}],name:"bridge",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"chainId",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"},{internalType:"uint128",name:"extraGasAmount_",type:"uint128"}],name:"extraGasPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"getEidByChainId",outputs:[{internalType:"uint32",name:"",type:"uint32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"oftAddress",outputs:[{internalType:"address",name:"oftAddress",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint32",name:"eid_",type:"uint32"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"registerBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"destinationChainId_",type:"uint256"}],name:"relayerFee",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"oft_",type:"address"}],name:"removeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress_",type:"address"},{internalType:"uint256",name:"adminFeeShareBP_",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint128",name:"lzGasLimit_",type:"uint128"}],name:"setLzGasLimit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"},{internalType:"uint256",name:"maxExtraGas_",type:"uint256"}],name:"setMaxExtraGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"chainId_",type:"uint256"}],name:"unregisterBridgeDestination",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"contract IERC20",name:"token_",type:"address"}],name:"withdrawFeeInTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount_",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Us=Yg;var Bg={abi:[{inputs:[{internalType:"address",name:"_abrTokenAddress",type:"address"},{internalType:"uint256",name:"_chainPrecision",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"abrToken",outputs:[{internalType:"contract IERC20Metadata",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_tokenAddress",type:"address"},{internalType:"address",name:"_bridge",type:"address"}],name:"approveBridgeToken",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"exchangeRate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_amount",type:"uint256"}],name:"nativeTokensToAbr",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_id",type:"uint256"},{internalType:"address",name:"_target",type:"address"},{internalType:"string",name:"_signature",type:"string"}],name:"registerTarget",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_newExchangeRate",type:"uint256"}],name:"setExchangeRate",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"id",type:"uint256"}],name:"targets",outputs:[{internalType:"address",name:"target",type:"address"},{internalType:"bytes4",name:"selector",type:"bytes4"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_token",type:"address"},{internalType:"uint256",name:"_amount",type:"uint256"},{internalType:"uint256",name:"_abrAmount",type:"uint256"},{internalType:"uint256",name:"_targetId",type:"uint256"},{internalType:"bytes",name:"_params",type:"bytes"}],name:"transferTokensAndCallTarget",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"withdrawGas",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"tokenAddress",type:"address"}],name:"withdrawTokens",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},Ks=Bg;var fa=ce(require("@project-serum/anchor")),$r=require("@solana/web3.js");var Fe=ce(require("@project-serum/anchor")),Ne=require("@solana/web3.js");async function At(a,n){return Fe.utils.token.associatedAddress({mint:n,owner:a})}async function tn(a){let[n]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("config")],a);return n}async function Qs(a,n){let[i]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("lock"),Uint8Array.from(a)],n);return i}async function Ti(a,n){let[i]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("price_v2"),Uint8Array.from([a])],n);return i}async function Pn(a){let n=await tn(a),[i]=await Ne.PublicKey.findProgramAddress([n.toBuffer()],a);return i}async function Ds(a,n){let[i]=await Ne.PublicKey.findProgramAddress([a.toBuffer()],n);return i}async function Ln(a,n){let[i]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("token"),a.toBytes()],n);return i}async function Es(a,n,i){let[r]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("other_bridge_token"),Buffer.from([a]),n],i);return r}async function Dr(a,n){let[i]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("chain_bridge"),Uint8Array.from([a])],n);return i}async function Er(a,n){let[i]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("gas_usage"),Uint8Array.from([a])],n);return i}async function _s(a,n){let[i]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("sent_message"),a],n);return i}async function _r(a,n,i){let[r]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("user_deposit"),n.toBytes(),a.toBytes()],i);return r}async function $s(a,n){let[i]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("cctp_bridge"),a.toBytes()],n);return i}async function qs(a,n){let[i]=await Ne.PublicKey.findProgramAddress([Fe.utils.bytes.utf8.encode("token"),a.toBytes()],n);return i}function ed(a,n){let[i]=Ne.PublicKey.findProgramAddressSync([Fe.utils.bytes.utf8.encode("lock"),n.toBuffer()],a);return i}function td(a,n,i,r){let o=mn("message_transmitter",i),s=mn("token_messenger",r),d=mn("__event_authority",r),c=mn("token_minter",r),g=mn("local_token",r,[n]),A=mn("remote_token_messenger",r,[a.toString()]),l=mn("sender_authority",r);return{messageTransmitterAccount:o,tokenMessenger:s,tokenMessengerEventAuthority:d,tokenMinter:c,localToken:g,remoteTokenMessengerKey:A,authorityPda:l}}function mn(a,n,i=[]){let r=[Buffer.from(Fe.utils.bytes.utf8.encode(a))];for(let s of i)typeof s=="string"?r.push(Buffer.from(Fe.utils.bytes.utf8.encode(s))):Array.isArray(s)||Buffer.isBuffer(s)?r.push(Buffer.from(Uint8Array.from(s))):r.push(Buffer.from(Uint8Array.from(s.toBuffer())));return Ne.PublicKey.findProgramAddressSync(r,n)[0]}var nd=require("@project-serum/anchor"),Ra=require("@solana/web3.js");function nn(a,n){let i=new Ra.Connection(a,"confirmed"),r=new Ra.PublicKey(n);return new nd.AnchorProvider(i,{publicKey:r},{preflightCommitment:"confirmed",commitment:"confirmed"})}async function Ya(a,n,i,r){let o,s=new $r.PublicKey(n),d=new $r.PublicKey(i),c=await At(s,d),g=nn(r,n);fa.setProvider(g);let A=await fa.Spl.token(g).account.token.fetchNullable(c);if(A?.authority.equals(s))o=Mt(c.toBase58(),"SOLANA",a);else{let l=await g.connection.getTokenAccountsByOwner(s,{mint:d});if(l.value.length===0&&!A)o=Mt(c.toBase58(),"SOLANA",a);else if(l.value.length>0){let u=l.value[0];if(!u?.pubkey)throw new h("First token account or its public key is undefined");o=Mt(u.pubkey.toBase58(),"SOLANA",a)}else throw new h("Associated account has wrong owner")}return o}var Fi=class extends ve{constructor(i,r,o){super();this.web3=i;this.api=r;this.nodeRpcUrlsConfig=o}chainType="EVM";async send(i){let r=await this.buildRawTransactionSend(i);return this.sendRawTransaction(r)}async buildRawTransactionSwap(i){let r=He(this.chainType,i);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(i){let{amount:r,contractAddress:o,fromAccountAddress:s,fromTokenAddress:d,toAccountAddress:c,toTokenAddress:g,minimumReceiveAmount:A}=i,u=this.getBridgeContract(o).methods.swap(r,d,g,c,A);return Promise.resolve({from:s,to:o,data:u.encodeABI()})}async buildRawTransactionSend(i){let r=await Pe(this.chainType,i,this.api),{amount:o,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:g,toAccountAddress:A,toTokenAddress:l,messenger:u,fee:b,gasFeePaymentMethod:C,extraGas:Y,extraGasDest:W,abrExchangeRate:F}=r,w="0x"+en().toString("hex"),R,G,V=b;Y&&(V=(0,qr.Big)(V).plus(Y).toFixed()),console.log("@@ raw fee",b),console.log("@@ raw extraGas",Y),console.log("@@ raw totalFee",V);let x;if(C==="abr"){if(!F)throw new h("Cannot find 'abrExchangeRate' for ARB0 payment method");if(!i.sourceToken.abrPayer)throw new h("Source token must contain 'abrPayer' for ARB0 payment method");x=V;let Z=(0,qr.Big)(V).div(F);V=Me(Z,i.sourceToken.abrPayer.abrToken.decimals,k.getChainDecimalsByType(i.sourceToken.chainType)).toFixed(),console.log("@@ WITH_ARB totalAbr",x),console.log("@@ WITH_ARB totalFee",V)}switch(u){case 3:case 4:{let Z=await this.buildRawTransactionCctpSend(i,r,V);R=Z.sendMethod,G=Z.value;break}case 5:{let Z=this.buildRawTransactionOftSend(i,r,V,W);R=Z.sendMethod,G=Z.value;break}case 1:case 2:{let Z=this.getBridgeContract(s);switch(C){case"abr":case"native":{R=Z.methods.swapAndBridge(c,o,A,g,l,w,u,0),G=V;break}case"stablecoin":{R=Z.methods.swapAndBridge(c,o,A,g,l,w,u,V),G="0";break}default:return se(C,"Unhandled FeePaymentMethod")}}break}if(C==="abr"){if(!i.sourceToken.abrPayer)throw new h("Source token must contain 'abrPayer' for ARB0 payment method");let Z=i.sourceToken.abrPayer.payerAddress;if(!x)throw new h("Failed to calculate totalFeeInAbr");let Ie=this.getAbrPayerContract(Z),Ke="0x"+R.encodeABI().slice(10);return R=Ie.methods.transferTokensAndCallTarget(i.sourceToken.tokenAddress,o,x,u,Ke),Promise.resolve({from:d,to:Z,value:"0",data:R.encodeABI()})}return Promise.resolve({from:d,to:s,value:G,data:R.encodeABI()})}async buildRawTransactionCctpSend(i,r,o){let{amount:s,contractAddress:d,toChainId:c,toAccountAddress:g,gasFeePaymentMethod:A}=r,l=this.getCctpBridgeContract(d),u,b;if(i.destinationToken.chainType==="SOLANA"){let C=await Ya(this.chainType,i.toAccountAddress,i.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));switch(A){case"abr":case"native":{u=l.methods.bridgeWithWalletAddress(s,C,g,c,0),b=o;break}case"stablecoin":{u=l.methods.bridgeWithWalletAddress(s,C,g,c,o),b="0";break}default:return se(A,"Unhandled FeePaymentMethod")}}else switch(A){case"abr":case"native":{u=l.methods.bridge(s,g,c,0),b=o;break}case"stablecoin":{u=l.methods.bridge(s,g,c,o),b="0";break}default:return se(A,"Unhandled FeePaymentMethod")}return{sendMethod:u,value:b}}buildRawTransactionOftSend(i,r,o,s){let{amount:d,contractAddress:c,toChainId:g,toAccountAddress:A,gasFeePaymentMethod:l}=r,u=this.getOftBridgeContract(c),b,C;switch(l){case"abr":case"native":{b=u.methods.bridge(i.sourceToken.tokenAddress,d,A,g,0,s??"0","10"),C=o;break}case"stablecoin":{b=u.methods.bridge(i.sourceToken.tokenAddress,d,A,g,o,s??"0","10"),C="0";break}default:return se(l,"Unhandled FeePaymentMethod")}return{sendMethod:b,value:C}}async sendRawTransaction(i){let r=await this.web3.eth.estimateGas(i),o={maxPriorityFeePerGas:null,maxFeePerGas:null},{transactionHash:s}=await this.web3.eth.sendTransaction({...i,gas:r,...o});return{txId:s.toString()}}getBridgeContract(i){return new this.web3.eth.Contract(xs.abi,i)}getCctpBridgeContract(i){return new this.web3.eth.Contract(Os.abi,i)}getOftBridgeContract(i){return new this.web3.eth.Contract(Us.abi,i)}getAbrPayerContract(i){return new this.web3.eth.Contract(Ks.abi,i)}};var Ba=class{constructor(n,i,r,o){this.api=n;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=o}async approve(n,i){let r,o;i?(r=n,o=i):o=n;let s=Ni(o.token,o.messenger,o.gasFeePaymentMethod);return this.tokenService.buildRawTransactionApprove({...o,spender:s},r)}async send(n,i){return Q(n.amount),O("amount",n.amount,n.sourceToken.decimals),Js(n)?Wa(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionSend(n):Wa(n.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionSwap(n)}};var ge=require("@project-serum/anchor"),ee=require("@solana/web3.js"),tt=require("big.js");var wi={version:"0.1.0",name:"bridge",instructions:[{name:"initialize",accounts:[{name:"admin",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"initializePool",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"token",isMut:!0,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializePoolArgs"}}]},{name:"initDepositAccount",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"deposit",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdraw",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"amountLp",type:"u64"}]},{name:"swapAndBridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"messenger",isMut:!1,isSigner:!1},{name:"messengerConfig",isMut:!0,isSigner:!1},{name:"sentMessageAccount",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swapAndBridgeWormhole",accounts:[{name:"user",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"wormholeMessenger",isMut:!1,isSigner:!1},{name:"wormholeMessengerConfig",isMut:!0,isSigner:!1},{name:"wormholeProgram",isMut:!1,isSigner:!1},{name:"bridge",isMut:!0,isSigner:!1},{name:"message",isMut:!0,isSigner:!0},{name:"sequence",isMut:!0,isSigner:!1},{name:"feeCollector",isMut:!0,isSigner:!1},{name:"messengerGasUsage",isMut:!1,isSigner:!1},{name:"clock",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"swap",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"sendMint",isMut:!1,isSigner:!1},{name:"receiveMint",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1},{name:"sendPool",isMut:!0,isSigner:!1},{name:"receivePool",isMut:!0,isSigner:!1},{name:"sendBridgeToken",isMut:!0,isSigner:!1},{name:"receiveBridgeToken",isMut:!0,isSigner:!1},{name:"sendUserToken",isMut:!0,isSigner:!1},{name:"receiveUserToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[{name:"amount",type:"u64"},{name:"receiveAmountMin",type:"u64"}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"receiveAndSwap",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"receiveAndSwapWormhole",accounts:[{name:"user",isMut:!0,isSigner:!1},{name:"payer",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"receivedMessageAccount",isMut:!1,isSigner:!1},{name:"unlock",isMut:!0,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"messengerProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"UnlockArgs"}}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"claimRewards",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setAdmin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAdmin",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"startBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"stopBridge",accounts:[{name:"stopAuthority",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"actionType",type:{defined:"ActionType"}}]},{name:"setRebalancer",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"rebalancer",isMut:!1,isSigner:!1}],args:[]},{name:"setStopAuthority",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"newAuthority",isMut:!1,isSigner:!1},{name:"config",isMut:!0,isSigner:!1}],args:[]},{name:"setAllbridgeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setWormholeMessengerProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"setPoolFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setBalanceRatioMin",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"balanceRatioMinBp",type:"u16"}]},{name:"setPoolAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"addOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!1,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"removeOtherBridgeToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"config",isMut:!0,isSigner:!1},{name:"otherBridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"chainId",type:"u8"},{name:"tokenAddress",type:{array:["u8",32]}}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"adjustTotalLpAmount",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"config",isMut:!1,isSigner:!1},{name:"pool",isMut:!0,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"userDeposit",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1}],args:[]}],accounts:[{name:"chainBridge",type:{kind:"struct",fields:[{name:"address",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"config",type:{kind:"struct",fields:[{name:"admin",type:"publicKey"},{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"rebalancer",type:"publicKey"},{name:"stopAuthority",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"canSwap",type:"bool"},{name:"canDeposit",type:"bool"},{name:"canWithdraw",type:"bool"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"sentTokenAddress",type:"publicKey"},{name:"amount",type:"u64"},{name:"vusdAmount",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"nonce",type:{array:["u8",32]}},{name:"messenger",type:{defined:"Messenger"}},{name:"slot",type:"u64"},{name:"fee",type:"u64"}]}},{name:"otherBridgeToken",type:{kind:"struct",fields:[]}},{name:"pool",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"a",type:"u64"},{name:"d",type:"u64"},{name:"tokenBalance",type:"u64"},{name:"vUsdBalance",type:"u64"},{name:"reserves",type:"u64"},{name:"decimals",type:"u8"},{name:"totalLpAmount",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"accRewardPerShareP",type:"u128"},{name:"adminFeeAmount",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"unlock",type:{kind:"struct",fields:[{name:"hash",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"fee",type:"u64"},{name:"vUsdAmount",type:"u64"},{name:"slot",type:"u64"}]}},{name:"userDeposit",type:{kind:"struct",fields:[{name:"userAddress",type:"publicKey"},{name:"mint",type:"publicKey"},{name:"lpAmount",type:"u64"},{name:"rewardDebt",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainBridgeAddress",type:{array:["u8",32]}},{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"allbridgeMessengerProgramId",type:"publicKey"},{name:"wormholeMessengerProgramId",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"}]}},{name:"InitializePoolArgs",type:{kind:"struct",fields:[{name:"a",type:"u64"},{name:"feeShareBp",type:"u64"},{name:"adminFeeShareBp",type:"u64"},{name:"balanceRatioMinBp",type:"u16"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"vusdAmount",type:"u64"}]}},{name:"UnlockArgs",type:{kind:"struct",fields:[{name:"nonce",type:{array:["u8",32]}},{name:"amount",type:"u64"},{name:"recipient",type:"publicKey"},{name:"sourceChainId",type:"u8"},{name:"receiveToken",type:"publicKey"},{name:"messenger",type:{defined:"Messenger"}},{name:"hash",type:{array:["u8",32]}},{name:"receiveAmountMin",type:"u64"}]}},{name:"RewardError",type:{kind:"enum",variants:[{name:"FeeTooHigh"}]}},{name:"Messenger",type:{kind:"enum",variants:[{name:"None"},{name:"Allbridge"},{name:"Wormhole"}]}},{name:"ActionType",type:{kind:"enum",variants:[{name:"Deposit"},{name:"Withdraw"},{name:"Swap"}]}}],errors:[{code:6e3,name:"AccountAlreadyInitialized",msg:"This account has already been initialized"},{code:6001,name:"AdminAuthorityInvalid",msg:"This instruction requires admin authority"},{code:6002,name:"InvalidSignature",msg:"Provided signature has wrong signer or message"},{code:6003,name:"InvalidHash",msg:"Wrong unlock message hash"},{code:6004,name:"PoolOverflow",msg:"PoolInfo overflow"},{code:6005,name:"ReservesExhausted",msg:"Reserves exhausted"},{code:6006,name:"ZeroAmount",msg:"Zero amount"},{code:6007,name:"ZeroChanges",msg:"Zero changes"},{code:6008,name:"HighVusdAmount",msg:"vUSD amount is too high"},{code:6009,name:"BalanceRatioExceeded",msg:"Balance ratio exceeded"},{code:6010,name:"InsufficientReceivedAmount",msg:"Received insufficient amount"},{code:6011,name:"ForbiddenAction",msg:"ForbiddenAction"},{code:6012,name:"ValueTooHigh",msg:"Value is too high"}]};var id={version:"0.1.0",name:"cctp_bridge",instructions:[{name:"initialize",accounts:[{name:"payer",isMut:!0,isSigner:!0},{name:"admin",isMut:!0,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"rent",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"InitializeArgs"}}]},{name:"bridge",accounts:[{name:"user",isMut:!0,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"messageSentEventData",isMut:!0,isSigner:!0},{name:"lock",isMut:!0,isSigner:!1},{name:"mint",isMut:!0,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1},{name:"cctpMessenger",isMut:!1,isSigner:!1},{name:"messageTransmitterProgram",isMut:!1,isSigner:!1},{name:"messageTransmitterAccount",isMut:!0,isSigner:!1},{name:"tokenMessenger",isMut:!1,isSigner:!1},{name:"tokenMinter",isMut:!1,isSigner:!1},{name:"localToken",isMut:!0,isSigner:!1},{name:"remoteTokenMessengerKey",isMut:!1,isSigner:!1},{name:"authorityPda",isMut:!1,isSigner:!1},{name:"eventAuthority",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"gasPrice",isMut:!1,isSigner:!1},{name:"thisGasPrice",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!1,isSigner:!1},{name:"userToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"BridgeArgs"}}]},{name:"registerChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"payer",isMut:!0,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[{name:"args",type:{defined:"RegisterChainBridgeArgs"}}]},{name:"updateChainBridge",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"chainBridge",isMut:!0,isSigner:!1}],args:[{name:"args",type:{defined:"UpdateChainBridgeArgs"}}]},{name:"setAdminFeeShare",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"feeShareBp",type:"u64"}]},{name:"setGasOracleProgramId",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]},{name:"withdrawGasToken",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"recipient",isMut:!0,isSigner:!1},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"amount",type:"u64"}]},{name:"withdrawAdminFee",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!1,isSigner:!1},{name:"bridgeToken",isMut:!0,isSigner:!1},{name:"adminToken",isMut:!0,isSigner:!1},{name:"bridgeAuthority",isMut:!1,isSigner:!1},{name:"tokenProgram",isMut:!1,isSigner:!1},{name:"systemProgram",isMut:!1,isSigner:!1}],args:[]},{name:"setCctpTokenMessengerMinter",accounts:[{name:"admin",isMut:!1,isSigner:!0},{name:"mint",isMut:!1,isSigner:!1},{name:"cctpBridge",isMut:!0,isSigner:!1}],args:[{name:"newProgramId",type:"publicKey"}]}],accounts:[{name:"cctpBridge",type:{kind:"struct",fields:[{name:"mint",type:"publicKey"},{name:"admin",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"},{name:"gasOracleProgramId",type:"publicKey"},{name:"authorityBumpSeed",type:"u8"},{name:"adminFeeShareBp",type:"u64"},{name:"adminFeeAmount",type:"u64"}]}},{name:"chainBridge",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"}]}},{name:"lock",type:{kind:"struct",fields:[{name:"sender",type:"publicKey"},{name:"amount",type:"u64"},{name:"adminFee",type:"u64"},{name:"relayerFee",type:"u64"},{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"slot",type:"u64"}]}}],types:[{name:"RegisterChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"UpdateChainBridgeArgs",type:{kind:"struct",fields:[{name:"chainId",type:"u8"},{name:"gasUsage",type:"u64"},{name:"domain",type:"u32"},{name:"mint",type:"publicKey"}]}},{name:"BridgeArgs",type:{kind:"struct",fields:[{name:"recipient",type:{array:["u8",32]}},{name:"destinationChainId",type:"u8"},{name:"receiveToken",type:{array:["u8",32]}},{name:"amount",type:"u64"}]}},{name:"InitializeArgs",type:{kind:"struct",fields:[{name:"gasOracleProgramId",type:"publicKey"},{name:"cctpTokenMessengerMinter",type:"publicKey"}]}}],errors:[{code:6e3,name:"ValueTooHigh",msg:"Value is too high"}]};var ad=require("@project-serum/anchor"),rd=ce(require("big.js")),Gi=require("web3");async function jn(a,n){return await ad.Spl.token(n).account.token.fetch(a)}async function od(a,n,i){let r=await n.account.pool.fetch(i),o=r.decimals,s=(0,rd.default)(r.feeShareBp.toString()).div(1e4).toFixed(),d={aValue:r.a.toString(),dValue:r.d.toString(),totalLpAmount:r.totalLpAmount.toString(),tokenBalance:r.tokenBalance.toString(),vUsdBalance:r.vUsdBalance.toString(),accRewardPerShareP:r.accRewardPerShareP.toString()};return Tt(a,{decimals:o,feeShare:s},d)}function sd(a){let n=a.amount,i="0x"+a.recipient.toString("hex"),r=a.sourceChainId,o=a.destinationChainId,s="0x"+a.receiveToken.toString("hex"),d="0x"+a.nonce.toString("hex"),c=1,g="0x"+a.chainBridge.toString("hex"),A=Gi.Web3.utils.encodePacked({t:"uint256",v:n},{t:"bytes32",v:i},{t:"uint256",v:r},{t:"bytes32",v:s},{t:"uint256",v:d},{t:"uint8",v:c});if(!A)throw new h("message cannot be undefined");let l=Gi.Web3.utils.keccak256(Buffer.from(A.replace("0x",""),"hex")),u=Buffer.from(l.replace("0x",""),"hex");u[0]=r,u[1]=o;let b=Gi.Web3.utils.encodePacked({t:"bytes32",v:"0x"+u.toString("hex")},{t:"bytes32",v:g});if(!b)throw new un("messageWithSigner cannot be undefined");let C=Gi.Web3.utils.keccak256(Buffer.from(b.replace("0x",""),"hex")),Y=Buffer.from(C.replace("0x",""),"hex");return Y[0]=u[0],Y[1]=u[1],Y}var De=require("@solana/web3.js"),dd=require("big.js");var eo=require("@solana/web3.js");async function bn(a,n){return await Promise.all(a.message.addressTableLookups.map(async i=>new eo.AddressLookupTableAccount({key:i.accountKey,state:eo.AddressLookupTableAccount.deserialize(await n.getAccountInfo(i.accountKey).then(r=>{if(!r)throw new h("Cannot get AccountInfo");return r.data}))})))}var Ta="AUTO";async function kn(a,n,i){let r=new De.Connection(i,"confirmed"),o=(await r.simulateTransaction(a)).value.unitsConsumed;await gd(a.instructions,o,n,r)}async function cd(a,n,i){let r=new De.Connection(i,"confirmed"),o=await bn(a,r),s=De.TransactionMessage.decompile(a.message,{addressLookupTableAccounts:o});if(a.serialize().length>1232)throw new Ci;await gd(s.instructions,769230,n,r),a.message=s.compileToV0Message(o)}async function gd(a,n,i,r){if(n>0){let o=Wg(n,a);if(i?.solana){let s=i.solana;if(s===Ta)await to(a,r);else if("pricePerUnitInMicroLamports"in s)await to(a,r,s.pricePerUnitInMicroLamports);else{let d=(0,dd.Big)(s.extraFeeInLamports).div(o).mul(vi(6)).toFixed(0);await to(a,r,d)}}}}function Wg(a,n){let i=n.findIndex(s=>s.programId.equals(De.ComputeBudgetProgram.programId)&&De.ComputeBudgetInstruction.decodeInstructionType(s)==="SetComputeUnitLimit"),r=Number((a*1.3).toFixed(0)),o=De.ComputeBudgetProgram.setComputeUnitLimit({units:r});return i>=0?n[i]=o:n.push(o),r.toString()}async function to(a,n,i){let r=a.findIndex(d=>d.programId.equals(De.ComputeBudgetProgram.programId)&&De.ComputeBudgetInstruction.decodeInstructionType(d)==="SetComputeUnitPrice"),o=BigInt(i||await Tg(n)),s=De.ComputeBudgetProgram.setComputeUnitPrice({microLamports:o});return r>=0?a[r]=s:a.push(s),o.toString()}async function Tg(a){let n=await a.getRecentPrioritizationFees(),i=0;for(let r of n)i+=r.prioritizationFee;return(i/n.length).toFixed(0)}var Ad=require("@solana/spl-token"),yn=require("@solana/web3.js"),Hn=ce(require("axios"));var Fa=class{connection;jupiterUrl;apiKeyHeader;maxAccounts;constructor(n,i){this.connection=new yn.Connection(n),this.jupiterUrl=i.jupiterUrl.replace(/\/$/,""),this.apiKeyHeader=i.jupiterApiKeyHeader,this.maxAccounts=i.jupiterMaxAccounts}async getJupiterSwapTx(n,i,r,o){let s;try{let u=o?"ExactOut":"ExactIn",b=`${this.jupiterUrl}/quote?inputMint=${i}&outputMint=${Ad.NATIVE_MINT.toString()}&amount=${r}&swapMode=${u}&slippageBps=100&onlyDirectRoutes=true`;this.maxAccounts&&(b+=`&maxAccounts=${this.maxAccounts}`),s=await Hn.default.get(b,{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(u){throw u instanceof Hn.AxiosError&&u.response&&u.response.data&&u.response.data.error?new he(u.response.data.error):new he("Cannot get route")}let d;if(o&&s?.data?.inAmount)d=s.data.inAmount;else if(o)throw new he("Cannot get inAmount");let c;try{c=await Hn.default.post(`${this.jupiterUrl}/swap`,{quoteResponse:s.data,userPublicKey:n,wrapAndUnwrapSol:!0},{headers:this.apiKeyHeader?{"x-api-key":this.apiKeyHeader}:void 0})}catch(u){throw u instanceof Hn.AxiosError&&u.response&&u.response.data&&u.response.data.error?new he(u.response.data.error):new he("Cannot get swap transaction")}let g;if(c?.data?.swapTransaction)g=c.data.swapTransaction;else throw new he("Cannot get swap transaction");let A=Buffer.from(g,"base64"),l=yn.VersionedTransaction.deserialize(A);return o?{tx:l,amountIn:d}:{tx:l}}async amendJupiterWithSdkTx(n,i){try{let r=await bn(n,this.connection),o=await bn(i,this.connection),s=yn.TransactionMessage.decompile(n.message,{addressLookupTableAccounts:r}),d=yn.TransactionMessage.decompile(i.message,{addressLookupTableAccounts:o});if(d.instructions.shift(),s.instructions.push(...d.instructions),r.push(...o),n.message=s.compileToV0Message(r),i.message.header.numRequiredSignatures===2&&n.signatures.length===1){let c=i.signatures[0];if(!c)throw new h("Signature is undefined");n.signatures.push(c)}return n}catch(r){throw r instanceof Error&&r.message?new he(`Some error occurred during creation final swap and bridge transaction. ${r.message}`):new he("Some error occurred during creation final swap and bridge transaction")}}};var no=1e6,ld=1.1,Na=class extends ve{constructor(i,r,o){super();this.solanaRpcUrl=i;this.params=r;this.api=o;this.jupiterService=new Fa(i,r.jupiterParams)}chainType="SOLANA";jupiterService;async buildRawTransactionSwap(i){let r=He(this.chainType,i);return await this.buildSwapTransaction(r,i.sourceToken.poolAddress,i.destinationToken.poolAddress,i.txFeeParams)}async buildSwapTransaction(i,r,o,s){let{fromAccountAddress:d,amount:c,contractAddress:g,fromTokenAddress:A,toTokenAddress:l,toAccountAddress:u,minimumReceiveAmount:b}=i,C=d,Y=g,W=A,F=l,w=o,R=u,G=new ee.PublicKey(C),V=nn(this.solanaRpcUrl,G.toString()),x=new ge.Program(wi,Y,V),Z=await Pn(x.programId),Ie=await tn(x.programId),de=new ee.PublicKey(W),Ke=await Ln(de,x.programId),qe=new ee.PublicKey(r),Xt=await At(G,de),rt=new ee.PublicKey(R),je=new ee.PublicKey(F),et=await Ln(je,x.programId),ot=new ee.PublicKey(w),Qe=await At(rt,je),Yt=[ge.web3.ComputeBudgetProgram.setComputeUnitLimit({units:no})];try{await jn(Qe,V)}catch{let ig=await ge.Spl.associatedToken(V).methods.create().accounts({mint:je,owner:rt,associatedAccount:Qe}).instruction();Yt.push(ig)}let Bt=await x.methods.swap(new ge.BN(c),new ge.BN(b||0)).accounts({payer:G,config:Ie,bridgeAuthority:Z,user:G,sendBridgeToken:Ke,sendMint:de,sendPool:qe,sendUserToken:Xt,receiveBridgeToken:et,receiveMint:je,receivePool:ot,receiveUserToken:Qe}).preInstructions(Yt).transaction(),st=V.connection;return Bt.recentBlockhash=(await st.getLatestBlockhash()).blockhash,Bt.feePayer=G,await kn(Bt,s,this.solanaRpcUrl),await this.convertToVersionedTransaction(Bt,st)}async buildRawTransactionSend(i){let r=await Pe(this.chainType,i,this.api),o=this.addPoolAddress(i,r),s=o.gasFeePaymentMethod=="stablecoin",d;if(s)try{let{tx:A,solTxSendUpdatedParams:l}=await this.processJup(o,i,!0);d=A,o={...o,...l}}catch{try{let{tx:l,solTxSendUpdatedParams:u}=await this.processJup(o,i,!1);d=l,o={...o,...u}}catch(l){throw l instanceof oe?l:l instanceof Error&&l.message?new he(`Some error occurred during creation Jupiter swap transaction. ${l.message}`):new he("Some error occurred during creation Jupiter swap transaction")}}let c,g;switch(r.messenger){case 1:{let A=await this.prepareSwapAndBridgeData(o);c=await this.buildSwapAndBridgeAllbridgeTransaction(A);break}case 2:{let A=await this.prepareSwapAndBridgeData(o),{transaction:l,messageAccount:u}=await this.buildSwapAndBridgeWormholeTransaction(A);c=l,g=u;break}case 3:case 4:{let A=await this.prepareSwapAndBridgeCctpData(o),{transaction:l,messageSentEventDataKeypair:u}=await this.buildSwapAndBridgeCctpTransaction(i.destinationToken.chainSymbol,A);c=l,g=u;break}case 5:throw new Te("Messenger OFT is not supported yet.")}if(s){if(!d)throw new he("Swap tx is absent");c=await this.jupiterService.amendJupiterWithSdkTx(d,c)}return await cd(c,i.txFeeParams,this.solanaRpcUrl),g&&c.sign([g]),c}async processJup(i,r,o){let{fee:s,extraGas:d,gasFeePaymentMethod:c}=await this.convertStableCoinFeeAndExtraGasToNativeCurrency(r.sourceToken,i),g=o?(0,tt.Big)(s):(0,tt.Big)(i.fee);d&&(g=g.plus(d)),o||(g=g.mul(ld));let{tx:A,amountIn:l}=await this.jupiterService.getJupiterSwapTx(r.fromAccountAddress,r.sourceToken.tokenAddress,g.toFixed(0),o),u;if(o){if(!l)throw new he("Cannot get inAmount");u=(0,tt.Big)(i.amount).minus((0,tt.Big)(l).mul(ld)).toFixed(0)}else u=(0,tt.Big)(i.amount).minus(g).toFixed(0);if((0,tt.Big)(u).lte(0))throw new ln(`Amount not enough to pay fee, ${M((0,tt.Big)(u).minus(1).neg(),r.sourceToken.decimals).toFixed()} stables is missing`);return{tx:A,solTxSendUpdatedParams:{amount:u,fee:s,extraGas:d,gasFeePaymentMethod:c}}}addPoolAddress(i,r){return{...r,poolAddress:i.sourceToken.poolAddress}}async convertStableCoinFeeAndExtraGasToNativeCurrency(i,r){if(r.gasFeePaymentMethod=="stablecoin"){let o=(await this.api.getReceiveTransactionCost({sourceChainId:r.fromChainId,destinationChainId:r.toChainId,messenger:r.messenger,sourceToken:i.tokenAddress})).sourceNativeTokenPrice,s=(0,tt.Big)(r.fee).div(o).mul((0,tt.Big)(10).pow(k.getChainDecimalsByType("SOLANA")-i.decimals)).toFixed(0),d;return r.extraGas&&(d=(0,tt.Big)(r.extraGas).div(o).mul((0,tt.Big)(10).pow(k.getChainDecimalsByType("SOLANA")-i.decimals)).toFixed(0)),{fee:s,extraGas:d,gasFeePaymentMethod:"native"}}return{fee:r.fee,extraGas:r.extraGas,gasFeePaymentMethod:"native"}}getExtraGasInstruction(i,r,o){return ge.web3.SystemProgram.transfer({fromPubkey:r,toPubkey:o,lamports:+i})}async prepareSwapAndBridgeData(i){let{amount:r,contractAddress:o,fromChainId:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:g,toAccountAddress:A,toTokenAddress:l,poolAddress:u,extraGas:b}=i,C=c,Y=d,W=g,F=l,w=A,R=o,G=s,V=nn(this.solanaRpcUrl,Y),x=new ge.Program(wi,R,V),Z=Array.from(en()),Ie=new ee.PublicKey(u),de=await od(r,x,Ie),Ke=await Qs(Z,x.programId),qe=await Pn(x.programId),Xt=await At(new ee.PublicKey(Y),new ee.PublicKey(C)),rt=await Ln(new ee.PublicKey(C),x.programId),je=await Dr(W,x.programId),et=await Es(W,Buffer.from(F),x.programId),ot=await tn(x.programId),Qe=await x.account.config.fetch(ot),Yt=await Ti(W,Qe.gasOracleProgramId),Bt=await Ti(G,Qe.gasOracleProgramId),st=sd({amount:de,recipient:Buffer.from(w),nonce:Buffer.from(Z),receiveToken:Buffer.from(F),destinationChainId:W,sourceChainId:G,chainBridge:(await Pn(x.programId)).toBuffer()}),q={};return q.bridge=x,q.amount=new ge.BN(r),q.vusdAmount=new ge.BN(de),q.nonce=Z,q.recipient=Array.from(w),q.receiveToken=Array.from(F),q.poolAccount=Ie,q.lockAccount=Ke,q.bridgeAuthority=qe,q.userToken=Xt,q.bridgeTokenAccount=rt,q.chainBridgeAccount=je,q.otherBridgeTokenAccount=et,q.userAccount=new ee.PublicKey(Y),q.destinationChainId=W,q.mint=new ee.PublicKey(C),q.config=ot,q.configAccountInfo=Qe,q.gasPrice=Yt,q.thisGasPrice=Bt,q.message=st,b&&(q.extraGasInstruction=this.getExtraGasInstruction(b,q.userAccount,ot)),q}async buildSwapAndBridgeAllbridgeTransaction(i){let{bridge:r,vusdAmount:o,nonce:s,recipient:d,receiveToken:c,poolAccount:g,lockAccount:A,bridgeAuthority:l,userToken:u,bridgeTokenAccount:b,chainBridgeAccount:C,otherBridgeTokenAccount:Y,userAccount:W,destinationChainId:F,mint:w,config:R,configAccountInfo:G,gasPrice:V,thisGasPrice:x,message:Z,extraGasInstruction:Ie}=i,de=G.allbridgeMessengerProgramId,Ke=await Er(F,de),qe=await tn(de),Xt=await _s(Z,de),rt=[];Ie&&rt.push(Ie);let je=await r.methods.swapAndBridge({vusdAmount:o,nonce:s,destinationChainId:F,recipient:d,receiveToken:c}).accounts({mint:w,user:W,config:R,lock:A,pool:g,gasPrice:V,thisGasPrice:x,bridgeAuthority:l,userToken:u,bridgeToken:b,chainBridge:C,messenger:de,messengerGasUsage:Ke,messengerConfig:qe,sentMessageAccount:Xt,otherBridgeToken:Y}).preInstructions([ge.web3.ComputeBudgetProgram.setComputeUnitLimit({units:no})]).postInstructions(rt).transaction(),et=nn(this.solanaRpcUrl,W.toString()).connection;return je.recentBlockhash=(await et.getLatestBlockhash()).blockhash,je.feePayer=W,await this.convertToVersionedTransaction(je,et)}async convertToVersionedTransaction(i,r){let o=await r.getAddressLookupTable(new ee.PublicKey(this.params.solanaLookUpTable)).then(d=>d.value);if(!o)throw new h("Cannot find allbridgeLookupTableAccount");let s=new ge.web3.TransactionMessage({payerKey:i.feePayer,recentBlockhash:i.recentBlockhash,instructions:i.instructions}).compileToV0Message([o]);return new ge.web3.VersionedTransaction(s)}async buildSwapAndBridgeWormholeTransaction(i){let{bridge:r,vusdAmount:o,nonce:s,recipient:d,receiveToken:c,poolAccount:g,lockAccount:A,bridgeAuthority:l,userToken:u,bridgeTokenAccount:b,chainBridgeAccount:C,otherBridgeTokenAccount:Y,userAccount:W,destinationChainId:F,mint:w,config:R,configAccountInfo:G,gasPrice:V,thisGasPrice:x,message:Z,extraGasInstruction:Ie}=i,de=this.params.wormholeMessengerProgramId,[Ke]=ee.PublicKey.findProgramAddressSync([Buffer.from("Bridge")],new ee.PublicKey(de)),[qe]=ee.PublicKey.findProgramAddressSync([Buffer.from("fee_collector")],new ee.PublicKey(de)),[Xt]=ee.PublicKey.findProgramAddressSync([Buffer.from("Sequence"),l.toBuffer()],new ee.PublicKey(de)),rt=await Er(F,G.wormholeMessengerProgramId),je=await tn(G.wormholeMessengerProgramId),et=ee.Keypair.generate(),ot=nn(this.solanaRpcUrl,W.toString()),Qe=await ot.connection.getAccountInfo(Ke);if(Qe==null)throw new h("Cannot fetch wormhole bridge account info");let Yt=new ge.BN(Qe.data.slice(16,24),"le").toString(),Bt=ee.SystemProgram.transfer({fromPubkey:W,toPubkey:qe,lamports:+Yt}),st=[];Ie&&st.push(Ie);let q={mint:w,user:W,config:R,lock:A,pool:g,gasPrice:V,thisGasPrice:x,bridgeAuthority:l,userToken:u,bridgeToken:b,chainBridge:C,otherBridgeToken:Y,messengerGasUsage:rt,wormholeProgram:de,bridge:Ke,message:et.publicKey,wormholeMessenger:G.wormholeMessengerProgramId,sequence:Xt,feeCollector:qe,wormholeMessengerConfig:je,clock:ge.web3.SYSVAR_CLOCK_PUBKEY},ca=await r.methods.swapAndBridgeWormhole({vusdAmount:o,nonce:s,destinationChainId:F,recipient:d,receiveToken:c}).accounts(q).preInstructions([ge.web3.ComputeBudgetProgram.setComputeUnitLimit({units:no}),Bt]).postInstructions(st).signers([et]).transaction();return ca.recentBlockhash=(await ot.connection.getLatestBlockhash()).blockhash,ca.feePayer=W,{transaction:await this.convertToVersionedTransaction(ca,ot.connection),messageAccount:et}}async prepareSwapAndBridgeCctpData(i){let{contractAddress:r,amount:o,fromAccountAddress:s,fromTokenAddress:d,toChainId:c,toAccountAddress:g,toTokenAddress:A,extraGas:l}=i,u=r;if(!u)throw new We("Such route does not support CCTP protocol");let b=4,C=s,Y=A,W=g,F=nn(this.solanaRpcUrl,C),w=new ge.Program(id,u,F),R=new ee.PublicKey(d),G=await $s(R,w.programId),V=new ee.PublicKey(C),x=await w.account.cctpBridge.fetch(G),Z={};return Z.cctpBridge=w,Z.cctpBridgeAccount=G,Z.cctpAddressAccount=new ee.PublicKey(u),Z.amount=new ge.BN(o),Z.recipient=Array.from(W),Z.receiveToken=Array.from(Y),Z.userToken=await At(V,R),Z.bridgeAuthority=await Ds(G,w.programId),Z.bridgeTokenAccount=await qs(R,w.programId),Z.chainBridgeAccount=await Dr(c,w.programId),Z.userAccount=V,Z.destinationChainId=c,Z.mint=R,Z.gasPrice=await Ti(c,x.gasOracleProgramId),Z.thisGasPrice=await Ti(b,x.gasOracleProgramId),Z.provider=F,l&&(Z.extraGasInstruction=this.getExtraGasInstruction(l,Z.userAccount,G)),Z}async buildSwapAndBridgeCctpTransaction(i,r){let{cctpBridge:o,cctpBridgeAccount:s,amount:d,recipient:c,receiveToken:g,bridgeAuthority:A,userToken:l,bridgeTokenAccount:u,chainBridgeAccount:b,userAccount:C,destinationChainId:Y,mint:W,gasPrice:F,thisGasPrice:w,extraGasInstruction:R,provider:G}=r,V=this.params.cctpParams.cctpDomains[i],x=this.params.cctpParams.cctpTransmitterProgramId,Z=this.params.cctpParams.cctpTokenMessengerMinter;if(V==null||!x||!Z)throw new h("CCTP is not configured");let Ie=new ee.PublicKey(x),de=new ee.PublicKey(Z),{messageTransmitterAccount:Ke,tokenMessenger:qe,tokenMessengerEventAuthority:Xt,tokenMinter:rt,localToken:je,remoteTokenMessengerKey:et,authorityPda:ot}=td(V,W,Ie,de),Qe=[];R&&Qe.push(R);let Yt=ee.Keypair.generate(),Bt=ed(o.programId,Yt.publicKey),st=await o.methods.bridge({amount:d,destinationChainId:Y,recipient:c,receiveToken:g}).accounts({mint:W,user:C,cctpBridge:s,messageSentEventData:Yt.publicKey,lock:Bt,cctpMessenger:de,messageTransmitterProgram:Ie,messageTransmitterAccount:Ke,tokenMessenger:qe,tokenMinter:rt,localToken:je,remoteTokenMessengerKey:et,authorityPda:ot,eventAuthority:Xt,bridgeToken:u,gasPrice:F,thisGasPrice:w,chainBridge:b,userToken:l,bridgeAuthority:A}).preInstructions([ge.web3.ComputeBudgetProgram.setComputeUnitLimit({units:2e6})]).postInstructions(Qe).transaction(),q=G.connection;return st.recentBlockhash=(await q.getLatestBlockhash()).blockhash,st.feePayer=C,{transaction:await this.convertToVersionedTransaction(st,q),messageSentEventDataKeypair:Yt}}send(i){throw new H}};var wa=require("@stellar/stellar-sdk"),ud=require("big.js");var t=require("@stellar/stellar-sdk"),Fg=t.contract.Spec,Ng=t.contract.Client;var Zi=class extends Ng{constructor(i){super(new Fg(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABAAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAApnYXNfb3JhY2xlAAAAAAATAAAAAAAAAAxuYXRpdmVfdG9rZW4AAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9hbmRfYnJpZGdlAAAAAAkAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACXJlY2lwaWVudAAAAAAAA+4AAAAgAAAAAAAAABRkZXN0aW5hdGlvbl9jaGFpbl9pZAAAAAQAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAFbm9uY2UAAAAAAAAMAAAAAAAAAApnYXNfYW1vdW50AAAAAAAKAAAAAAAAABBmZWVfdG9rZW5fYW1vdW50AAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOcmVjZWl2ZV90b2tlbnMAAAAAAAgAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAA9zb3VyY2VfY2hhaW5faWQAAAAABAAAAAAAAAANcmVjZWl2ZV90b2tlbgAAAAAAA+4AAAAgAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAAAAAAJZXh0cmFfZ2FzAAAAAAAD6AAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAEc3dhcAAAAAYAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAA+4AAAAgAAAAAAAAAA1yZWNlaXZlX3Rva2VuAAAAAAAD7gAAACAAAAAAAAAACXJlY2lwaWVudAAAAAAAABMAAAAAAAAAEnJlY2VpdmVfYW1vdW50X21pbgAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAJc3RvcF9zd2FwAAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc3RhcnRfc3dhcAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X2dhc19vcmFjbGUAAAAAAAEAAAAAAAAAC25ld19hZGRyZXNzAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAOc2V0X3JlYmFsYW5jZXIAAAAAAAEAAAAAAAAACnJlYmFsYW5jZXIAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X21lc3NlbmdlcgAAAAAAAAEAAAAAAAAACW1lc3NlbmdlcgAAAAAAABMAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc2V0X2dhc191c2FnZQAAAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAJZ2FzX3VzYWdlAAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAPcmVnaXN0ZXJfYnJpZGdlAAAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAAOYnJpZGdlX2FkZHJlc3MAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAQYWRkX2JyaWRnZV90b2tlbgAAAAIAAAAAAAAACGNoYWluX2lkAAAABAAAAAAAAAANdG9rZW5fYWRkcmVzcwAAAAAAA+4AAAAgAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATcmVtb3ZlX2JyaWRnZV90b2tlbgAAAAACAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAIYWRkX3Bvb2wAAAACAAAAAAAAAARwb29sAAAAEwAAAAAAAAAFdG9rZW4AAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAATd2l0aGRyYXdfZ2FzX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAfd2l0aGRyYXdfYnJpZGdpbmdfZmVlX2luX3Rva2VucwAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAVaGFzX3Byb2Nlc3NlZF9tZXNzYWdlAAAAAAAAAQAAAAAAAAAHbWVzc2FnZQAAAAPuAAAAIAAAAAEAAAPpAAAAAQAAAAM=","AAAAAAAAAAAAAAAUaGFzX3JlY2VpdmVkX21lc3NhZ2UAAAABAAAAAAAAAAdtZXNzYWdlAAAAA+4AAAAgAAAAAQAAA+kAAAABAAAAAw==","AAAAAAAAAAAAAAAQZ2V0X3Bvb2xfYWRkcmVzcwAAAAEAAAAAAAAADXRva2VuX2FkZHJlc3MAAAAAAAPuAAAAIAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAKZ2V0X2NvbmZpZwAAAAAAAAAAAAEAAAPpAAAH0AAAAAZCcmlkZ2UAAAAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAUZ2V0X3RyYW5zYWN0aW9uX2Nvc3QAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAANZ2V0X2dhc191c2FnZQAAAAAAAAEAAAAAAAAACGNoYWluX2lkAAAABAAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAOZ2V0X2dhc19vcmFjbGUAAAAAAAAAAAABAAAD6QAAABMAAAAD","AAAAAAAAAAAAAAASZ2V0X2Fub3RoZXJfYnJpZGdlAAAAAAABAAAAAAAAAAhjaGFpbl9pZAAAAAQAAAABAAAD6QAAB9AAAAANQW5vdGhlckJyaWRnZQAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAB1N3YXBwZWQAAAAABgAAAAAAAAAOcmVjZWl2ZV9hbW91bnQAAAAAAAoAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAAEwAAAAAAAAALc2VuZF9hbW91bnQAAAAACgAAAAAAAAAKc2VuZF90b2tlbgAAAAAD7gAAACAAAAAAAAAABnNlbmRlcgAAAAAAEw==","AAAAAQAAAAAAAAAAAAAAClRva2Vuc1NlbnQAAAAAAAUAAAAAAAAABmFtb3VudAAAAAAACgAAAAAAAAAUZGVzdGluYXRpb25fY2hhaW5faWQAAAAEAAAAAAAAAAVub25jZQAAAAAAAAwAAAAAAAAADXJlY2VpdmVfdG9rZW4AAAAAAAPuAAAAIAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAADlRva2Vuc1JlY2VpdmVkAAAAAAAEAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAB21lc3NhZ2UAAAAD7gAAACAAAAAAAAAABW5vbmNlAAAAAAAADAAAAAAAAAAJcmVjaXBpZW50AAAAAAAD7gAAACA=","AAAAAQAAAAAAAAAAAAAAClJlY2VpdmVGZWUAAAAAAAMAAAAAAAAAF2JyaWRnZV90cmFuc2FjdGlvbl9jb3N0AAAAAAoAAAAAAAAACWV4dHJhX2dhcwAAAAAAAAoAAAAAAAAAGG1lc3NhZ2VfdHJhbnNhY3Rpb25fY29zdAAAAAo=","AAAAAQAAAAAAAAAAAAAAFUJyaWRnaW5nRmVlRnJvbVRva2VucwAAAAAAAAIAAAAAAAAAEGZlZV90b2tlbl9hbW91bnQAAAAKAAAAAAAAAANnYXMAAAAACg==","AAAAAQAAAAAAAAAAAAAADUFub3RoZXJCcmlkZ2UAAAAAAAACAAAAAAAAAAdhZGRyZXNzAAAAA+4AAAAgAAAAAAAAAAZ0b2tlbnMAAAAAA+wAAAPuAAAAIAAAAAE=","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAABgAAAGBwcmVjb21wdXRlZCB2YWx1ZXMgb2YgdGhlIHNjYWxpbmcgZmFjdG9yIHJlcXVpcmVkIGZvciBwYXlpbmcgdGhlIGJyaWRnaW5nIGZlZSB3aXRoIHN0YWJsZSB0b2tlbnMAAAAeYnJpZGdpbmdfZmVlX2NvbnZlcnNpb25fZmFjdG9yAAAAAAPsAAAAEwAAAAoAAAAAAAAACGNhbl9zd2FwAAAAAQAAAGxwcmVjb21wdXRlZCB2YWx1ZXMgdG8gZGl2aWRlIGJ5IHRvIGNoYW5nZSB0aGUgcHJlY2lzaW9uIGZyb20gdGhlIEdhcyBPcmFjbGUgcHJlY2lzaW9uIHRvIHRoZSB0b2tlbiBwcmVjaXNpb24AAAAWZnJvbV9nYXNfb3JhY2xlX2ZhY3RvcgAAAAAD7AAAABMAAAAKAAAAAAAAAAltZXNzZW5nZXIAAAAAAAATAAAAAAAAAAVwb29scwAAAAAAA+wAAAPuAAAAIAAAABMAAAAAAAAACnJlYmFsYW5jZXIAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAwAAAAEAAAAAAAAAC090aGVyQnJpZGdlAAAAAAEAAAAEAAAAAQAAAAAAAAALU2VudE1lc3NhZ2UAAAAAAQAAA+4AAAAgAAAAAQAAAAAAAAAPUmVjZWl2ZWRNZXNzYWdlAAAAAAEAAAPuAAAAIA==","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),i);this.options=i}fromJSON={initialize:this.txFromJSON,swap_and_bridge:this.txFromJSON,receive_tokens:this.txFromJSON,swap:this.txFromJSON,stop_swap:this.txFromJSON,start_swap:this.txFromJSON,set_gas_oracle:this.txFromJSON,set_stop_authority:this.txFromJSON,set_rebalancer:this.txFromJSON,set_messenger:this.txFromJSON,set_gas_usage:this.txFromJSON,register_bridge:this.txFromJSON,add_bridge_token:this.txFromJSON,remove_bridge_token:this.txFromJSON,add_pool:this.txFromJSON,withdraw_gas_tokens:this.txFromJSON,withdraw_bridging_fee_in_tokens:this.txFromJSON,has_processed_message:this.txFromJSON,has_received_message:this.txFromJSON,get_pool_address:this.txFromJSON,get_config:this.txFromJSON,get_stop_authority:this.txFromJSON,get_transaction_cost:this.txFromJSON,get_gas_usage:this.txFromJSON,get_admin:this.txFromJSON,get_gas_oracle:this.txFromJSON,get_another_bridge:this.txFromJSON,set_admin:this.txFromJSON,upgrade:this.txFromJSON}};var Ga=class extends ve{constructor(i,r,o){super();this.nodeRpcUrlsConfig=i;this.params=r;this.api=o}chainType="SRB";async buildRawTransactionSend(i){let r=await Pe(this.chainType,i,this.api);return await this.buildRawTransactionSendFromParams(r)}async buildRawTransactionSendFromParams(i){let{amount:r,contractAddress:o,fromAccountAddress:s,fromTokenAddress:d,toChainId:c,toAccountAddress:g,toTokenAddress:A,fee:l,gasFeePaymentMethod:u,extraGas:b}=i,C=l;b&&(C=(0,ud.Big)(C).plus(b).toFixed());let Y=this.getContract(Zi,o,s),W;switch(u){case"native":W=await Y.swap_and_bridge({sender:s,token:wa.Address.contract(Buffer.from(d)).toString(),amount:BigInt(r),recipient:Buffer.from(g),destination_chain_id:+c,receive_token:Buffer.from(A),nonce:Nt(),gas_amount:BigInt(C),fee_token_amount:BigInt(0)});break;case"stablecoin":W=await Y.swap_and_bridge({sender:s,token:wa.Address.contract(Buffer.from(d)).toString(),amount:BigInt(r),recipient:Buffer.from(g),destination_chain_id:+c,receive_token:Buffer.from(A),nonce:Nt(),gas_amount:BigInt(0),fee_token_amount:BigInt(C)});break;case"abr":throw new h("SRB bridge does not support ARB0 payment method");default:return se(u,"Unhandled FeePaymentMethod")}return W.toXDR()}async buildRawTransactionSwap(i){let r=He(this.chainType,i);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(i){let{amount:r,contractAddress:o,fromAccountAddress:s,fromTokenAddress:d,toAccountAddress:c,toTokenAddress:g,minimumReceiveAmount:A}=i;return(await this.getContract(Zi,o,s).swap({sender:s,amount:BigInt(r),token:wa.Address.contract(Buffer.from(d)).toBuffer(),receive_token:Buffer.from(g),recipient:c,receive_amount_min:BigInt(A)})).toXDR()}send(i){throw new H}getContract(i,r,o){let s={publicKey:o,contractId:r,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new i(s)}};var Si=require("@clarigen/core"),md=require("@stacks/network"),Je=require("@stacks/transactions");var lt={bridge:{functions:{assertCanSwap:{name:"assert-can-swap",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertGasOracle:{name:"assert-gas-oracle",access:"private",args:[{name:"gas-oracle-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertMessenger:{name:"assert-messenger",access:"private",args:[{name:"messenger-ref",type:"trait_reference"},{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},convertBridgingFeeInTokensToNative:{name:"convert-bridging-fee-in-tokens-to-native",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"fee-token-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyStopAuthority:{name:"only-stop-authority",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveAndSwapFromVusd:{name:"receive-and-swap-from-vusd",access:"private",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"recipient",type:"principal"},{name:"vusd-amount",type:"uint128"},{name:"receive-amount-min",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},sendAndSwapToVusd:{name:"send-and-swap-to-vusd",access:"private",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},sendTokens:{name:"send-tokens",access:"private",args:[{name:"messenger-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"bridging-fee",type:"uint128"}],outputs:{type:{response:{ok:{tuple:[{name:"bridge-tx-cost",type:"uint128"},{name:"message-tx-cost",type:"uint128"}]},error:"uint128"}}}},addBridgeToken:{name:"add-bridge-token",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},addPool:{name:"add-pool",access:"public",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getTransactionCost:{name:"get-transaction-cost",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"this-chain-id_",type:"uint128"},{name:"gas-oracle",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveTokens:{name:"receive-tokens",access:"public",args:[{name:"messenger-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:"principal"},{name:"source-chain-id",type:"uint128"},{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"receive-amount-min",type:"uint128"},{name:"extra-gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},registerBridge:{name:"register-bridge",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"bridge-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeBridge:{name:"remove-bridge",access:"public",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeBridgeToken:{name:"remove-bridge-token",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeMessenger:{name:"remove-messenger",access:"public",args:[{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setGasUsage:{name:"set-gas-usage",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setMessenger:{name:"set-messenger",access:"public",args:[{name:"messenger-id",type:"uint128"},{name:"new-messenger",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setRebalancer:{name:"set-rebalancer",access:"public",args:[{name:"new-rebalancer",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setStopAuthority:{name:"set-stop-authority",access:"public",args:[{name:"new-authority",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startSwap:{name:"start-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopSwap:{name:"stop-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swap:{name:"swap",access:"public",args:[{name:"amount",type:"uint128"},{name:"send-pool-ref",type:"trait_reference"},{name:"send-ft-ref",type:"trait_reference"},{name:"receive-pool-ref",type:"trait_reference"},{name:"receive-ft-ref",type:"trait_reference"},{name:"recipient",type:"principal"},{name:"receive-amount-min",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swapAndBridge:{name:"swap-and-bridge",access:"public",args:[{name:"pool-ref",type:"trait_reference"},{name:"ft-ref",type:"trait_reference"},{name:"messenger-ref",type:"trait_reference"},{name:"gas-oracle-ref",type:"trait_reference"},{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"},{name:"fee-native-amount",type:"uint128"},{name:"fee-token-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawBridgingFeeInTokens:{name:"withdraw-bridging-fee-in-tokens",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawGasTokens:{name:"withdraw-gas-tokens",access:"public",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getGasOracleAddress:{name:"get-gas-oracle-address",access:"read_only",args:[],outputs:{type:"principal"}},getGasUsage:{name:"get-gas-usage",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getMessenger:{name:"get-messenger",access:"read_only",args:[{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getOtherBridge:{name:"get-other-bridge",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},getOwner:{name:"get-owner",access:"read_only",args:[],outputs:{type:"principal"}},getProcessedMessageStatus:{name:"get-processed-message-status",access:"read_only",args:[{name:"message-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},getRebalancer:{name:"get-rebalancer",access:"read_only",args:[],outputs:{type:"principal"}},getSentMessageStatus:{name:"get-sent-message-status",access:"read_only",args:[{name:"message-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},getStopAuthority:{name:"get-stop-authority",access:"read_only",args:[],outputs:{type:"principal"}},getThisChainId:{name:"get-this-chain-id",access:"read_only",args:[],outputs:{type:"uint128"}},getTokenInfo:{name:"get-token-info",access:"read_only",args:[{name:"token-principal-hash",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:{tuple:[{name:"bridging-fee-conversion-scaling-factor",type:"uint128"},{name:"from-gas-oracle-scaling-factor",type:"uint128"},{name:"pool",type:"principal"},{name:"token",type:"principal"}]},error:"uint128"}}}},isBridgeTokenSupported:{name:"is-bridge-token-supported",access:"read_only",args:[{name:"chain-id_",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}},isSwapEnabled:{name:"is-swap-enabled",access:"read_only",args:[],outputs:{type:"bool"}}},maps:{gasUsageMap:{name:"gas-usage-map",key:"uint128",value:"uint128"},messengers:{name:"messengers",key:"uint128",value:"principal"},otherBridgeTokens:{name:"other-bridge-tokens",key:{tuple:[{name:"chain-id",type:"uint128"},{name:"token-address",type:{buffer:{length:32}}}]},value:"bool"},otherBridges:{name:"other-bridges",key:"uint128",value:{buffer:{length:32}}},processedMessages:{name:"processed-messages",key:{buffer:{length:32}},value:"bool"},sentMessages:{name:"sent-messages",key:{buffer:{length:32}},value:"bool"},tokenInfos:{name:"token-infos",key:{buffer:{length:32}},value:{tuple:[{name:"bridging-fee-conversion-scaling-factor",type:"uint128"},{name:"from-gas-oracle-scaling-factor",type:"uint128"},{name:"pool",type:"principal"},{name:"token",type:"principal"}]}}},variables:{chainPrecision:{name:"chain-precision",type:"uint128",access:"constant"},errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadyProcessed:{name:"err-already-processed",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadySent:{name:"err-already-sent",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errBridgeSourceNotRegistered:{name:"err-bridge-source-not-registered",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositAmountTooSmall:{name:"err-deposit-amount-too-small",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errGasUsageNotSet:{name:"err-gas-usage-not-set",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errMessengerNotRegistered:{name:"err-messenger-not-registered",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNoMessage:{name:"err-no-message",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughFee:{name:"err-not-enough-fee",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSwapProhibited:{name:"err-swap-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errTokenNotSupported:{name:"err-token-not-supported",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongGasOracle:{name:"err-wrong-gas-oracle",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongMessenger:{name:"err-wrong-messenger",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongTokenForPool:{name:"err-wrong-token-for-pool",type:{response:{ok:"none",error:"uint128"}},access:"constant"},oraclePrecision:{name:"oracle-precision",type:"uint128",access:"constant"},canSwap:{name:"can-swap",type:"bool",access:"variable"},gasOraclePrincipal:{name:"gas-oracle-principal",type:{optional:"principal"},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},rebalancer:{name:"rebalancer",type:"principal",access:"variable"},stopAuthority:{name:"stop-authority",type:"principal",access:"variable"},thisChainId:{name:"this-chain-id",type:{optional:"uint128"},access:"variable"}},constants:{canSwap:!1,chainPrecision:6n,errAlreadyInitialized:{isOk:!1,value:1004n},errAlreadyProcessed:{isOk:!1,value:1010n},errAlreadySent:{isOk:!1,value:1005n},errBridgeSourceNotRegistered:{isOk:!1,value:1009n},errDepositAmountTooSmall:{isOk:!1,value:1001n},errGasUsageNotSet:{isOk:!1,value:1008n},errMessengerNotRegistered:{isOk:!1,value:1014n},errNoMessage:{isOk:!1,value:1011n},errNotEnoughFee:{isOk:!1,value:1007n},errNotInitialized:{isOk:!1,value:1006n},errSwapProhibited:{isOk:!1,value:1012n},errTokenNotSupported:{isOk:!1,value:1002n},errUnauthorized:{isOk:!1,value:1000n},errWrongGasOracle:{isOk:!1,value:1013n},errWrongMessenger:{isOk:!1,value:1015n},errWrongTokenForPool:{isOk:!1,value:1003n},gasOraclePrincipal:null,oraclePrecision:18n,owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",rebalancer:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",stopAuthority:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",thisChainId:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"bridge"},ftToken:{functions:{getTokenUri:{name:"get-token-uri",access:"public",args:[],outputs:{type:{response:{ok:{optional:{"string-utf8":{length:19}}},error:"none"}}}},mint:{name:"mint",access:"public",args:[{name:"amount",type:"uint128"},{name:"recipient",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},transfer:{name:"transfer",access:"public",args:[{name:"amount",type:"uint128"},{name:"sender",type:"principal"},{name:"recipient",type:"principal"},{name:"memo",type:{optional:{buffer:{length:34}}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getBalance:{name:"get-balance",access:"read_only",args:[{name:"owner",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"none"}}}},getDecimals:{name:"get-decimals",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"none"}}}},getName:{name:"get-name",access:"read_only",args:[],outputs:{type:{response:{ok:{"string-ascii":{length:13}},error:"none"}}}},getSymbol:{name:"get-symbol",access:"read_only",args:[],outputs:{type:{response:{ok:{"string-ascii":{length:7}},error:"none"}}}},getTotalSupply:{name:"get-total-supply",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"none"}}}}},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[{name:"example-token"}],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"ft-token"},gasOracle:{functions:{setChainData:{name:"set-chain-data",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-price",type:"uint128"},{name:"new-gas-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setGasPrice:{name:"set-gas-price",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-gas-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setPrice:{name:"set-price",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"new-price",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},crossRate:{name:"cross-rate",access:"read_only",args:[{name:"other-chain-id",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getChainData:{name:"get-chain-data",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:{tuple:[{name:"gas-price",type:"uint128"},{name:"price",type:"uint128"}]},error:"uint128"}}}},getGasPrice:{name:"get-gas-price",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getPrice:{name:"get-price",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getTransactionGasCostInNativeToken:{name:"get-transaction-gas-cost-in-native-token",access:"read_only",args:[{name:"other-chain-id",type:"uint128"},{name:"gas-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getTransactionGasCostInUsd:{name:"get-transaction-gas-cost-in-usd",access:"read_only",args:[{name:"other-chain-id",type:"uint128"},{name:"gas-amount",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}}},maps:{chainData:{name:"chain-data",key:"uint128",value:{tuple:[{name:"gas-price",type:"uint128"},{name:"price",type:"uint128"}]}}},variables:{errNotFound:{name:"err-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},oracleScalingFactor:{name:"oracle-scaling-factor",type:"uint128",access:"constant"},contractOwner:{name:"contract-owner",type:"principal",access:"variable"},fromOracleToChainScalingFactor:{name:"from-oracle-to-chain-scaling-factor",type:"uint128",access:"variable"},thisChainId:{name:"this-chain-id",type:"uint128",access:"variable"}},constants:{contractOwner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",errNotFound:{isOk:!1,value:4001n},errUnauthorized:{isOk:!1,value:4000n},fromOracleToChainScalingFactor:1000000000000n,oracleScalingFactor:1000000000000000000n,thisChainId:16n},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"gas-oracle"},gasOracleTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"gas-oracle-trait"},messenger:{functions:{assertGasOracle:{name:"assert-gas-oracle",access:"private",args:[{name:"gas-oracle-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},addSecondaryValidator:{name:"add-secondary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getTransactionCost:{name:"get-transaction-cost",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"this-chain-id_",type:"uint128"},{name:"gas-oracle",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},receiveMessage:{name:"receive-message",access:"public",args:[{name:"message",type:{buffer:{length:32}}},{name:"signature1",type:{buffer:{length:65}}},{name:"signature2",type:{buffer:{length:65}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},removeSecondaryValidator:{name:"remove-secondary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},sendMessage:{name:"send-message",access:"public",args:[{name:"gas-oracle-ref",type:"trait_reference"},{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},setGasUsage:{name:"set-gas-usage",access:"public",args:[{name:"chain-id_",type:"uint128"},{name:"gas",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOtherChainIds:{name:"set-other-chain-ids",access:"public",args:[{name:"value",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setPrimaryValidator:{name:"set-primary-validator",access:"public",args:[{name:"val",type:{buffer:{length:33}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},withdrawGasTokens:{name:"withdraw-gas-tokens",access:"public",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},getGasOracle:{name:"get-gas-oracle",access:"read_only",args:[],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getGasUsage:{name:"get-gas-usage",access:"read_only",args:[{name:"chain-id_",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getOtherChainIds:{name:"get-other-chain-ids",access:"read_only",args:[],outputs:{type:{response:{ok:{buffer:{length:32}},error:"none"}}}},getSentMessageBlock:{name:"get-sent-message-block",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},getThisChainId:{name:"get-this-chain-id",access:"read_only",args:[],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},isMessageReceived:{name:"is-message-received",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"none"}}}}},maps:{gasUsageMap:{name:"gas-usage-map",key:"uint128",value:"uint128"},receivedMessages:{name:"received-messages",key:{buffer:{length:32}},value:"bool"},secondaryValidators:{name:"secondary-validators",key:{buffer:{length:33}},value:"bool"},sentMessagesBlock:{name:"sent-messages-block",key:{buffer:{length:32}},value:"uint128"}},variables:{errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errAlreadySent:{name:"err-already-sent",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errGasUsageNotSet:{name:"err-gas-usage-not-set",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidChainId:{name:"err-invalid-chain-id",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidDestination:{name:"err-invalid-destination",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidPrimary:{name:"err-invalid-primary",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errInvalidSecondary:{name:"err-invalid-secondary",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errMessageNotFound:{name:"err-message-not-found",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBufferLength:{name:"err-wrong-buffer-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongGasOracle:{name:"err-wrong-gas-oracle",type:{response:{ok:"none",error:"uint128"}},access:"constant"},gasOraclePrincipal:{name:"gas-oracle-principal",type:{optional:"principal"},access:"variable"},otherChainIds:{name:"other-chain-ids",type:{buffer:{length:32}},access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},primaryValidator:{name:"primary-validator",type:{buffer:{length:33}},access:"variable"},thisChainId:{name:"this-chain-id",type:{optional:"uint128"},access:"variable"}},constants:{errAlreadyInitialized:{isOk:!1,value:3008n},errAlreadySent:{isOk:!1,value:3003n},errGasUsageNotSet:{isOk:!1,value:3010n},errInvalidChainId:{isOk:!1,value:3002n},errInvalidDestination:{isOk:!1,value:3004n},errInvalidPrimary:{isOk:!1,value:3005n},errInvalidSecondary:{isOk:!1,value:3006n},errMessageNotFound:{isOk:!1,value:3001n},errNotInitialized:{isOk:!1,value:3011n},errUnauthorized:{isOk:!1,value:3000n},errWrongBufferLength:{isOk:!1,value:3009n},errWrongGasOracle:{isOk:!1,value:3007n},gasOraclePrincipal:null,otherChainIds:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",primaryValidator:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),thisChainId:null},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"messenger"},messengerTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"messenger-trait"},pool:{functions:{addRewards:{name:"add-rewards",access:"private",args:[{name:"amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"none"}}}},assertBalanceReatio:{name:"assert-balance-reatio",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanDeposit:{name:"assert-can-deposit",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanSwap:{name:"assert-can-swap",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertCanWithdraw:{name:"assert-can-withdraw",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},assertToken:{name:"assert-token",access:"private",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},depositLp:{name:"deposit-lp",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"to",type:"principal"},{name:"lp-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},leCube_q:{name:"le-cube?",access:"private",args:[{name:"x",type:"uint128"},{name:"n",type:"uint128"}],outputs:{type:"bool"}},newtonStep:{name:"newton-step",access:"private",args:[{name:"n",type:"uint128"},{name:"x",type:"uint128"}],outputs:{type:"uint128"}},onlyBridge:{name:"only-bridge",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyOwner:{name:"only-owner",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},onlyStopAuthority:{name:"only-stop-authority",access:"private",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},refine:{name:"refine",access:"private",args:[{name:"n",type:"uint128"},{name:"x",type:"uint128"}],outputs:{type:"uint128"}},withdrawLp:{name:"withdraw-lp",access:"private",args:[{name:"ft-ref",type:"trait_reference"},{name:"from",type:"principal"},{name:"lp-amount",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},adjustTotalLpAmount:{name:"adjust-total-lp-amount",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},claimAdminFee:{name:"claim-admin-fee",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},claimRewards:{name:"claim-rewards",access:"public",args:[{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},deposit:{name:"deposit",access:"public",args:[{name:"amount",type:"uint128"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},init:{name:"init",access:"public",args:[{name:"token",type:"trait_reference"},{name:"bridge-address",type:"principal"},{name:"fee-share-bp-arg",type:"uint128"},{name:"balance-ratio-min-bp-arg",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},serBalanceRetioMinBp:{name:"ser-balance-retio-min-bp",access:"public",args:[{name:"new-balance-ratio-min-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setAdminFeeSahreBp:{name:"set-admin-fee-sahre-bp",access:"public",args:[{name:"new-admin-fee-share-bp",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setBridge:{name:"set-bridge",access:"public",args:[{name:"new-bridge",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setFeeShare:{name:"set-fee-share",access:"public",args:[{name:"fee-share-bp_",type:"uint128"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setOwner:{name:"set-owner",access:"public",args:[{name:"new-owner",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},setStopAuthority:{name:"set-stop-authority",access:"public",args:[{name:"new-stop-authority",type:"principal"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startDeposit:{name:"start-deposit",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startSwap:{name:"start-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},startWithdraw:{name:"start-withdraw",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopDeposit:{name:"stop-deposit",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopSwap:{name:"stop-swap",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},stopWithdraw:{name:"stop-withdraw",access:"public",args:[],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},swapFromVusd:{name:"swap-from-vusd",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"},{name:"receive-amount-min",type:"uint128"},{name:"zero-fee",type:"bool"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},swapToVusd:{name:"swap-to-vusd",access:"public",args:[{name:"ft-ref",type:"trait_reference"},{name:"user",type:"principal"},{name:"amount",type:"uint128"},{name:"zero-fee",type:"bool"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},withdraw:{name:"withdraw",access:"public",args:[{name:"amount-lp",type:"uint128"},{name:"ft-ref",type:"trait_reference"}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},calcD:{name:"calc-d",access:"read_only",args:[{name:"x",type:"uint128"},{name:"y",type:"uint128"}],outputs:{type:"uint128"}},calcY:{name:"calc-y",access:"read_only",args:[{name:"x",type:"uint128"},{name:"d_",type:"uint128"}],outputs:{type:"uint128"}},cbrt:{name:"cbrt",access:"read_only",args:[{name:"n",type:"uint128"}],outputs:{type:"uint128"}},fromSystemPrecision:{name:"from-system-precision",access:"read_only",args:[{name:"amount",type:"uint128"}],outputs:{type:"uint128"}},getAccRewardPerShareP:{name:"get-acc-reward-per-share-p",access:"read_only",args:[],outputs:{type:"uint128"}},getAdminFeeAmount:{name:"get-admin-fee-amount",access:"read_only",args:[],outputs:{type:"uint128"}},getAdminFeeShareBp:{name:"get-admin-fee-share-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getBalanceRatioMinBp:{name:"get-balance-ratio-min-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getBridge:{name:"get-bridge",access:"read_only",args:[],outputs:{type:{optional:"principal"}}},getCanDeposit:{name:"get-can-deposit",access:"read_only",args:[],outputs:{type:"bool"}},getCanSwap:{name:"get-can-swap",access:"read_only",args:[],outputs:{type:"bool"}},getCanWithdraw:{name:"get-can-withdraw",access:"read_only",args:[],outputs:{type:"bool"}},getD:{name:"get-d",access:"read_only",args:[],outputs:{type:"uint128"}},getFeeShareBp:{name:"get-fee-share-bp",access:"read_only",args:[],outputs:{type:"uint128"}},getLpBalance:{name:"get-lp-balance",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:"uint128"}},getLpTotalSupply:{name:"get-lp-total-supply",access:"read_only",args:[],outputs:{type:"uint128"}},getOwner:{name:"get-owner",access:"read_only",args:[],outputs:{type:"principal"}},getReserves:{name:"get-reserves",access:"read_only",args:[],outputs:{type:"uint128"}},getStopAuthority:{name:"get-stop-authority",access:"read_only",args:[],outputs:{type:"principal"}},getTokenAddress:{name:"get-token-address",access:"read_only",args:[],outputs:{type:{response:{ok:"principal",error:"uint128"}}}},getTokenBalance:{name:"get-token-balance",access:"read_only",args:[],outputs:{type:"uint128"}},getUserRewardDebt:{name:"get-user-reward-debt",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:"uint128"}},getVusdBalance:{name:"get-vusd-balance",access:"read_only",args:[],outputs:{type:"uint128"}},pendingRewards:{name:"pending-rewards",access:"read_only",args:[{name:"user",type:"principal"}],outputs:{type:{response:{ok:"uint128",error:"none"}}}},toSystemPrecision:{name:"to-system-precision",access:"read_only",args:[{name:"amount",type:"uint128"}],outputs:{type:"uint128"}}},maps:{lpBalances:{name:"lp-balances",key:"principal",value:"uint128"},userRewardDebt:{name:"user-reward-debt",key:"principal",value:"uint128"}},variables:{BP:{name:"BP",type:"uint128",access:"constant"},P:{name:"P",type:"uint128",access:"constant"},a:{name:"a",type:"uint128",access:"constant"},errAlreadyInitialized:{name:"err-already-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositAmountTooSmall:{name:"err-deposit-amount-too-small",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errDepositProhibited:{name:"err-deposit-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errLowTokenBalance:{name:"err-low-token-balance",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errLowVusdBalance:{name:"err-low-vusd-balance",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughLp:{name:"err-not-enough-lp",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotEnoughReserves:{name:"err-not-enough-reserves",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errNotInitialized:{name:"err-not-initialized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errPoolBalanceTooBig:{name:"err-pool-balance-too-big",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSlippage:{name:"err-slippage",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errSwapProhibited:{name:"err-swap-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errTooLarge:{name:"err-too-large",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errUnauthorized:{name:"err-unauthorized",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWithdrawProhibited:{name:"err-withdraw-prohibited",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongToken:{name:"err-wrong-token",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errZeroChanges:{name:"err-zero-changes",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errZeroDChanges:{name:"err-zero-d-changes",type:{response:{ok:"none",error:"uint128"}},access:"constant"},maxTokenBalance:{name:"max-token-balance",type:"uint128",access:"constant"},systemPrecision:{name:"system-precision",type:"uint128",access:"constant"},accRewardPerShareP:{name:"acc-reward-per-share-p",type:"uint128",access:"variable"},adminFeeAmount:{name:"admin-fee-amount",type:"uint128",access:"variable"},adminFeeShareBp:{name:"admin-fee-share-bp",type:"uint128",access:"variable"},balanceRatioMinBp:{name:"balance-ratio-min-bp",type:"uint128",access:"variable"},bridge:{name:"bridge",type:{optional:"principal"},access:"variable"},canDeposit:{name:"can-deposit",type:"bool",access:"variable"},canSwap:{name:"can-swap",type:"bool",access:"variable"},canWithdraw:{name:"can-withdraw",type:"bool",access:"variable"},d:{name:"d",type:"uint128",access:"variable"},feeShareBp:{name:"fee-share-bp",type:"uint128",access:"variable"},lpTotalSupply:{name:"lp-total-supply",type:"uint128",access:"variable"},owner:{name:"owner",type:"principal",access:"variable"},reserves:{name:"reserves",type:"uint128",access:"variable"},stopAuthority:{name:"stop-authority",type:"principal",access:"variable"},tokenAmountIncrease:{name:"token-amount-increase",type:"uint128",access:"variable"},tokenAmountReduce:{name:"token-amount-reduce",type:"uint128",access:"variable"},tokenBalance:{name:"token-balance",type:"uint128",access:"variable"},tokenPrincipal:{name:"token-principal",type:{optional:"principal"},access:"variable"},vusdBalance:{name:"vusd-balance",type:"uint128",access:"variable"}},constants:{BP:10000n,P:48n,a:20n,accRewardPerShareP:0n,adminFeeAmount:0n,adminFeeShareBp:0n,balanceRatioMinBp:0n,bridge:null,canDeposit:!0,canSwap:!0,canWithdraw:!0,d:0n,errAlreadyInitialized:{isOk:!1,value:2007n},errDepositAmountTooSmall:{isOk:!1,value:2001n},errDepositProhibited:{isOk:!1,value:2013n},errLowTokenBalance:{isOk:!1,value:2012n},errLowVusdBalance:{isOk:!1,value:2011n},errNotEnoughLp:{isOk:!1,value:2010n},errNotEnoughReserves:{isOk:!1,value:2005n},errNotInitialized:{isOk:!1,value:2006n},errPoolBalanceTooBig:{isOk:!1,value:2002n},errSlippage:{isOk:!1,value:2009n},errSwapProhibited:{isOk:!1,value:2015n},errTooLarge:{isOk:!1,value:2016n},errUnauthorized:{isOk:!1,value:2000n},errWithdrawProhibited:{isOk:!1,value:2014n},errWrongToken:{isOk:!1,value:2008n},errZeroChanges:{isOk:!1,value:2003n},errZeroDChanges:{isOk:!1,value:2004n},feeShareBp:0n,lpTotalSupply:0n,maxTokenBalance:1000000000000n,owner:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",reserves:0n,stopAuthority:"ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM",systemPrecision:3n,tokenAmountIncrease:0n,tokenAmountReduce:0n,tokenBalance:0n,tokenPrincipal:null,vusdBalance:0n},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"pool"},poolTrait:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"pool-trait"},sip010TraitFtStandard:{functions:{},maps:{},variables:{},constants:{},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch21",clarity_version:"Clarity1",contractName:"sip-010-trait-ft-standard"},utils:{functions:{assertNotEmptyBuff32:{name:"assert-not-empty-buff-32",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:"bool",error:"uint128"}}}},bufferByte:{name:"buffer-byte",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}},{name:"i",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:1}},error:"uint128"}}}},bufferByteUint:{name:"buffer-byte-uint",access:"read_only",args:[{name:"b",type:{buffer:{length:32}}},{name:"i",type:"uint128"}],outputs:{type:{response:{ok:"uint128",error:"uint128"}}}},hashMessage:{name:"hash-message",access:"read_only",args:[{name:"amount",type:"uint128"},{name:"recipient",type:{buffer:{length:32}}},{name:"source-chain-id",type:"uint128"},{name:"destination-chain-id",type:"uint128"},{name:"receive-token",type:{buffer:{length:32}}},{name:"nonce",type:{buffer:{length:32}}},{name:"messenger-id",type:"uint128"}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},hashWithSenderAddress:{name:"hash-with-sender-address",access:"read_only",args:[{name:"message",type:{buffer:{length:32}}},{name:"sender",type:{buffer:{length:32}}}],outputs:{type:{response:{ok:{buffer:{length:32}},error:"uint128"}}}},principalHash:{name:"principal-hash",access:"read_only",args:[{name:"value",type:"principal"}],outputs:{type:{buffer:{length:32}}}},principalToBuff32:{name:"principal-to-buff32",access:"read_only",args:[{name:"value",type:"principal"}],outputs:{type:{buffer:{length:32}}}},stringToBuff:{name:"string-to-buff",access:"read_only",args:[{name:"str",type:{"string-ascii":{length:40}}}],outputs:{type:{buffer:{length:45}}}},uintToBuff1:{name:"uint-to-buff-1",access:"read_only",args:[{name:"value",type:"uint128"}],outputs:{type:{buffer:{length:17}}}},uintToBuff32:{name:"uint-to-buff-32",access:"read_only",args:[{name:"value",type:"uint128"}],outputs:{type:{buffer:{length:33}}}}},maps:{},variables:{errEmptyBuffer:{name:"err-empty-buffer",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongBufferLength:{name:"err-wrong-buffer-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},errWrongMsgLength:{name:"err-wrong-msg-length",type:{response:{ok:"none",error:"uint128"}},access:"constant"},thisChainId:{name:"this-chain-id",type:"uint128",access:"constant"},zeroBytes12:{name:"zero-bytes-12",type:{buffer:{length:12}},access:"constant"},zeroBytes16:{name:"zero-bytes-16",type:{buffer:{length:16}},access:"constant"},zeroBytes32:{name:"zero-bytes-32",type:{buffer:{length:32}},access:"constant"}},constants:{errEmptyBuffer:{isOk:!1,value:5002n},errWrongBufferLength:{isOk:!1,value:5000n},errWrongMsgLength:{isOk:!1,value:5001n},thisChainId:16n,zeroBytes12:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0]),zeroBytes16:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),zeroBytes32:Uint8Array.from([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])},non_fungible_tokens:[],fungible_tokens:[],epoch:"Epoch31",clarity_version:"Clarity3",contractName:"utils"}};function Pt(a){if(!a.originTokenAddress)throw new h("STX token must contain 'originTokenAddress'");let[n,i]=a.originTokenAddress.split("::");if(!i)throw new h("STX token must contain 'originTokenAddress' ends with '::<tokenName>'");return i}var pd=require("@stacks/transactions");function Lt(a,n,i,r,o){let[s,d]=(0,pd.parseContractId)(r);if(!s||!d)throw new Error(`Unable to parse stx token ${r}`);return{type:"ft-postcondition",address:i,condition:n,asset:`${s}.${d}::${o}`,amount:a}}function io(a,n,i){return{type:"stx-postcondition",address:i,condition:n,amount:a}}var Za=class extends ve{constructor(i,r,o){super();this.nodeRpcUrl=i;this.params=r;this.api=o;let s=(0,md.createNetwork)({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new Si.ClarigenClient(s,this.params.stxHeroApiKey)}chainType="STX";client;send(i){throw new H}async buildRawTransactionSend(i){let r=await Pe(this.chainType,i,this.api),{contractAddress:o,messenger:s,toChainId:d,toAccountAddress:c,toTokenAddress:g}=r,A=BigInt(r.amount),l=Lt(A,"lte",i.fromAccountAddress,i.sourceToken.tokenAddress,Pt(i.sourceToken)),u=io(0,"gte",i.sourceToken.bridgeAddress),b=[l,u],C=BigInt(r.fee);r.extraGas&&(C=C+BigInt(r.extraGas));let Y,W;switch(r.gasFeePaymentMethod){case"native":{Y=0n,W=C;let qe=io(C,"lte",i.fromAccountAddress);b.push(qe);break}case"stablecoin":{Y=C,W=0n;break}case"abr":throw new h("STX bridge does not support ARB0 payment method");default:return se(r.gasFeePaymentMethod,"Unhandled FeePaymentMethod")}let[F]=(0,Je.parseContractId)(o),w=(0,Si.contractFactory)(lt.bridge,o),{contractAddress:R,contractName:G,functionName:V,functionArgs:x}=w.swapAndBridge({ftRef:i.sourceToken.tokenAddress,poolRef:i.sourceToken.poolAddress,messengerRef:`${F}.messenger`,gasOracleRef:`${F}.gas-oracle`,amount:A,recipient:Uint8Array.from(c),destinationChainId:d,receiveToken:Uint8Array.from(g),nonce:Uint8Array.from(en()),messengerId:s,feeNativeAmount:W,feeTokenAmount:Y}),Z=(0,Je.makeRandomPrivKey)(),Ie=(0,Je.privateKeyToPublic)(Z),de={contractAddress:R,contractName:G,functionName:V,functionArgs:x,publicKey:Ie,validateWithAbi:!0,network:this.client.network,postConditions:b,postConditionMode:Je.PostConditionMode.Deny};return(await(0,Je.makeUnsignedContractCall)(de)).serialize()}async buildRawTransactionSwap(i){let r=He(this.chainType,i),o=BigInt(r.amount),s=BigInt(r.minimumReceiveAmount),d=i.sourceToken.bridgeAddress,c=(0,Si.contractFactory)(lt.bridge,d),{contractAddress:g,contractName:A,functionName:l,functionArgs:u}=c.swap({amount:o,sendPoolRef:i.sourceToken.poolAddress,sendFtRef:i.sourceToken.tokenAddress,receivePoolRef:i.destinationToken.poolAddress,receiveFtRef:i.destinationToken.tokenAddress,recipient:i.toAccountAddress,receiveAmountMin:s}),b=(0,Je.makeRandomPrivKey)(),C=(0,Je.privateKeyToPublic)(b),Y=Lt(o,"lte",i.fromAccountAddress,i.sourceToken.tokenAddress,Pt(i.sourceToken)),W=Lt(s,"gte",i.destinationToken.poolAddress,i.destinationToken.tokenAddress,Pt(i.destinationToken)),F={contractAddress:g,contractName:A,functionName:l,functionArgs:u,publicKey:C,validateWithAbi:!0,network:this.client.network,postConditions:[Y,W],postConditionMode:Je.PostConditionMode.Deny};return(await(0,Je.makeUnsignedContractCall)(F)).serialize()}};var bd="1.18.0",yd="1.40.0";var wg={"-32700":"ParseError","-32701":"OversizedRequest","-32702":"OversizedResponse","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError","-32604":"ServerBusy","-32000":"CallExecutionFailed","-32001":"UnknownError","-32003":"SubscriptionClosed","-32004":"SubscriptionClosedWithError","-32005":"BatchesNotSupported","-32006":"TooManySubscriptions","-32050":"TransientError","-32002":"TransactionExecutionClientError"},Sa=class extends Error{},Jn=class extends Sa{constructor(n,i){super(n),this.code=i,this.type=wg[i]??"ServerError"}},Va=class extends Sa{constructor(n,i,r){super(n),this.status=i,this.statusText=r}};var Cd=a=>{throw TypeError(a)},ro=(a,n,i)=>n.has(a)||Cd("Cannot "+i),Ae=(a,n,i)=>(ro(a,n,"read from private field"),i?i.call(a):n.get(a)),Cn=(a,n,i)=>n.has(a)?Cd("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(a):n.set(a,i),zn=(a,n,i,r)=>(ro(a,n,"write to private field"),r?r.call(a,i):n.set(a,i),i),Id=(a,n,i)=>(ro(a,n,"access private method"),i),Gg=(a,n,i,r)=>({set _(o){zn(a,n,o,i)},get _(){return Ae(a,n,r)}}),In,Vi,jt,hn,Xi,xn,Xa,hd,vd;function Zg(a){let n=new URL(a);return n.protocol=n.protocol.replace("http","ws"),n.toString()}var Sg={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},Ma=class{constructor(n,i={}){if(Cn(this,Xa),Cn(this,In,0),Cn(this,Vi,0),Cn(this,jt,null),Cn(this,hn,null),Cn(this,Xi,new Set),Cn(this,xn,new Map),this.endpoint=n,this.options={...Sg,...i},!this.options.WebSocketConstructor)throw new Error("Missing WebSocket constructor");this.endpoint.startsWith("http")&&(this.endpoint=Zg(this.endpoint))}async makeRequest(n,i){let r=await Id(this,Xa,hd).call(this);return new Promise((o,s)=>{zn(this,In,Ae(this,In)+1),Ae(this,xn).set(Ae(this,In),{resolve:o,reject:s,timeout:setTimeout(()=>{Ae(this,xn).delete(Ae(this,In)),s(new Error(`Request timeout: ${n}`))},this.options.callTimeout)}),r.send(JSON.stringify({jsonrpc:"2.0",id:Ae(this,In),method:n,params:i}))}).then(({error:o,result:s})=>{if(o)throw new Jn(o.message,o.code);return s})}async subscribe(n){let i=new ao(n);return Ae(this,Xi).add(i),await i.subscribe(this),()=>i.unsubscribe(this)}};In=new WeakMap;Vi=new WeakMap;jt=new WeakMap;hn=new WeakMap;Xi=new WeakMap;xn=new WeakMap;Xa=new WeakSet;hd=function(){return Ae(this,hn)?Ae(this,hn):(zn(this,hn,new Promise(a=>{Ae(this,jt)?.close(),zn(this,jt,new this.options.WebSocketConstructor(this.endpoint)),Ae(this,jt).addEventListener("open",()=>{zn(this,Vi,0),a(Ae(this,jt))}),Ae(this,jt).addEventListener("close",()=>{Gg(this,Vi)._++,Ae(this,Vi)<=this.options.maxReconnects&&setTimeout(()=>{Id(this,Xa,vd).call(this)},this.options.reconnectTimeout)}),Ae(this,jt).addEventListener("message",({data:n})=>{let i;try{i=JSON.parse(n)}catch(r){console.error(new Error(`Failed to parse RPC message: ${n}`,{cause:r}));return}if("id"in i&&i.id!=null&&Ae(this,xn).has(i.id)){let{resolve:r,timeout:o}=Ae(this,xn).get(i.id);clearTimeout(o),r(i)}else if("params"in i){let{params:r}=i;Ae(this,Xi).forEach(o=>{o.subscriptionId===r.subscription&&r.subscription===o.subscriptionId&&o.onMessage(r.result)})}})})),Ae(this,hn))};vd=async function(){return Ae(this,jt)?.close(),zn(this,hn,null),Promise.allSettled([...Ae(this,Xi)].map(a=>a.subscribe(this)))};var ao=class{constructor(n){this.subscriptionId=null,this.subscribed=!1,this.input=n}onMessage(n){this.subscribed&&this.input.onMessage(n)}async unsubscribe(n){let{subscriptionId:i}=this;return this.subscribed=!1,i==null?!1:(this.subscriptionId=null,n.makeRequest(this.input.unsubscribe,[i]))}async subscribe(n){this.subscriptionId=null,this.subscribed=!0;let i=await n.makeRequest(this.input.method,this.input.params);this.subscribed&&(this.subscriptionId=i)}};var Rd=a=>{throw TypeError(a)},co=(a,n,i)=>n.has(a)||Rd("Cannot "+i),nt=(a,n,i)=>(co(a,n,"read from private field"),i?i.call(a):n.get(a)),Pa=(a,n,i)=>n.has(a)?Rd("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(a):n.set(a,i),oo=(a,n,i,r)=>(co(a,n,"write to private field"),r?r.call(a,i):n.set(a,i),i),Vg=(a,n,i)=>(co(a,n,"access private method"),i),Mi,ut,Pi,so,fd,La=class{constructor(n){Pa(this,so),Pa(this,Mi,0),Pa(this,ut),Pa(this,Pi),oo(this,ut,n)}fetch(n,i){let r=nt(this,ut).fetch??fetch;if(!r)throw new Error("The current environment does not support fetch, you can provide a fetch implementation in the options for SuiHTTPTransport.");return r(n,i)}async request(n){oo(this,Mi,nt(this,Mi)+1);let i=await this.fetch(nt(this,ut).rpc?.url??nt(this,ut).url,{method:"POST",headers:{"Content-Type":"application/json","Client-Sdk-Type":"typescript","Client-Sdk-Version":bd,"Client-Target-Api-Version":yd,"Client-Request-Method":n.method,...nt(this,ut).rpc?.headers},body:JSON.stringify({jsonrpc:"2.0",id:nt(this,Mi),method:n.method,params:n.params})});if(!i.ok)throw new Va(`Unexpected status code: ${i.status}`,i.status,i.statusText);let r=await i.json();if("error"in r&&r.error!=null)throw new Jn(r.error.message,r.error.code);return r.result}async subscribe(n){let i=await Vg(this,so,fd).call(this).subscribe(n);return async()=>!!await i()}};Mi=new WeakMap;ut=new WeakMap;Pi=new WeakMap;so=new WeakSet;fd=function(){if(!nt(this,Pi)){let a=nt(this,ut).WebSocketConstructor??WebSocket;if(!a)throw new Error("The current environment does not support WebSocket, you can provide a WebSocketConstructor in the options for SuiHTTPTransport.");oo(this,Pi,new Ma(nt(this,ut).websocket?.url??nt(this,ut).url,{WebSocketConstructor:a,...nt(this,ut).websocket}))}return nt(this,Pi)};var Ot=require("@mysten/bcs");Re();xe();var E=require("@mysten/bcs");var iA=/^(?!.*(^(?!@)|[-.@])($|[-.@]))(?:[a-z0-9-]{0,63}(?:\.[a-z0-9-]{0,63})*)?@[a-z0-9-]{0,63}$/i,aA=/^(?!.*(^|[-.])($|[-.]))(?:[a-z0-9-]{0,63}\.)+sui$/i;function Sd(a,n="at"){let i=a.toLowerCase(),r;if(i.includes("@")){if(!iA.test(i))throw new Error(`Invalid SuiNS name ${a}`);let[o,s]=i.split("@");r=[...o?o.split("."):[],s]}else{if(!aA.test(i))throw new Error(`Invalid SuiNS name ${a}`);r=i.split(".").slice(0,-1)}return n==="dot"?`${r.join(".")}.sui`:`${r.slice(0,-1).join(".")}@${r[r.length-1]}`}xe();var rA=BigInt(1e9),Po="0x1",Ja="0x2";var za=ze("0x6");var Lo=`${Ja}::sui::SUI`,oA=ze("0x5");xe();var sA="object",dA="ID",cA="ascii",gA="String",AA="string",lA="String",uA="option",pA="Option";function Vd(a){let n=typeof a.body=="object"&&"datatype"in a.body?a.body.datatype:null;return!!n&&j(n.package)===j("0x2")&&n.module==="tx_context"&&n.type==="TxContext"}function xa(a){if(typeof a=="string")switch(a){case"address":return v.Address;case"bool":return v.Bool;case"u8":return v.U8;case"u16":return v.U16;case"u32":return v.U32;case"u64":return v.U64;case"u128":return v.U128;case"u256":return v.U256;default:throw new Error(`Unknown type signature ${a}`)}if("vector"in a){if(a.vector==="u8")return v.vector(v.U8).transform({input:i=>typeof i=="string"?new TextEncoder().encode(i):i,output:i=>i});let n=xa(a.vector);return n?v.vector(n):null}if("datatype"in a){let n=j(a.datatype.package);if(n===j(Po)){if(a.datatype.module===cA&&a.datatype.type===gA)return v.String;if(a.datatype.module===AA&&a.datatype.type===lA)return v.String;if(a.datatype.module===uA&&a.datatype.type===pA){let i=xa(a.datatype.typeParameters[0]);return i?v.vector(i):null}}if(n===j(Ja)&&a.datatype.module===sA&&a.datatype.type===dA)return v.Address}return null}function Xd(a){return typeof a=="object"&&"Reference"in a?{ref:"&",body:ki(a.Reference)}:typeof a=="object"&&"MutableReference"in a?{ref:"&mut",body:ki(a.MutableReference)}:{ref:null,body:ki(a)}}function ki(a){if(typeof a=="string")switch(a){case"Address":return"address";case"Bool":return"bool";case"U8":return"u8";case"U16":return"u16";case"U32":return"u32";case"U64":return"u64";case"U128":return"u128";case"U256":return"u256";default:throw new Error(`Unexpected type ${a}`)}if("Vector"in a)return{vector:ki(a.Vector)};if("Struct"in a)return{datatype:{package:a.Struct.address,module:a.Struct.module,type:a.Struct.name,typeParameters:a.Struct.typeArguments.map(ki)}};if("TypeParameter"in a)return{typeParameter:a.TypeParameter};throw new Error(`Unexpected type ${JSON.stringify(a)}`)}var Md=require("@mysten/bcs");xe();function mA(a){return{$kind:"Pure",Pure:{bytes:a instanceof Uint8Array?(0,Md.toBase64)(a):a.toBase64()}}}var Ue={Pure:mA,ObjectRef({objectId:a,digest:n,version:i}){return{$kind:"Object",Object:{$kind:"ImmOrOwnedObject",ImmOrOwnedObject:{digest:n,version:i,objectId:j(a)}}}},SharedObjectRef({objectId:a,mutable:n,initialSharedVersion:i}){return{$kind:"Object",Object:{$kind:"SharedObject",SharedObject:{mutable:n,initialSharedVersion:i,objectId:j(a)}}}},ReceivingRef({objectId:a,digest:n,version:i}){return{$kind:"Object",Object:{$kind:"Receiving",Receiving:{digest:n,version:i,objectId:j(a)}}}}};var Jo=require("@mysten/bcs"),yt=require("valibot");xe();var m=require("valibot");xe();function rn(a){let n=Object.entries(a).map(([i,r])=>(0,m.object)({[i]:r}));return(0,m.pipe)((0,m.union)(n),(0,m.transform)(i=>({...i,$kind:Object.keys(i)[0]})))}var vn=(0,m.pipe)((0,m.string)(),(0,m.transform)(a=>j(a)),(0,m.check)(Ee)),Le=vn,an=(0,m.string)(),we=(0,m.pipe)((0,m.union)([(0,m.string)(),(0,m.pipe)((0,m.number)(),(0,m.integer)())]),(0,m.check)(a=>{try{return BigInt(a),BigInt(a)>=0&&BigInt(a)<=18446744073709551615n}catch{return!1}},"Invalid u64")),bt=(0,m.object)({objectId:vn,version:we,digest:(0,m.string)()}),ne=(0,m.pipe)((0,m.union)([(0,m.object)({GasCoin:(0,m.literal)(!0)}),(0,m.object)({Input:(0,m.pipe)((0,m.number)(),(0,m.integer)()),type:(0,m.optional)((0,m.literal)("pure"))}),(0,m.object)({Input:(0,m.pipe)((0,m.number)(),(0,m.integer)()),type:(0,m.optional)((0,m.literal)("object"))}),(0,m.object)({Result:(0,m.pipe)((0,m.number)(),(0,m.integer)())}),(0,m.object)({NestedResult:(0,m.tuple)([(0,m.pipe)((0,m.number)(),(0,m.integer)()),(0,m.pipe)((0,m.number)(),(0,m.integer)())])})]),(0,m.transform)(a=>({...a,$kind:Object.keys(a)[0]}))),bA=(0,m.object)({budget:(0,m.nullable)(we),price:(0,m.nullable)(we),owner:(0,m.nullable)(vn),payment:(0,m.nullable)((0,m.array)(bt))}),Yy=(0,m.object)({address:(0,m.string)(),module:(0,m.string)(),name:(0,m.string)(),typeParams:(0,m.array)((0,m.string)())}),jo=(0,m.union)([(0,m.literal)("address"),(0,m.literal)("bool"),(0,m.literal)("u8"),(0,m.literal)("u16"),(0,m.literal)("u32"),(0,m.literal)("u64"),(0,m.literal)("u128"),(0,m.literal)("u256"),(0,m.object)({vector:(0,m.lazy)(()=>jo)}),(0,m.object)({datatype:(0,m.object)({package:(0,m.string)(),module:(0,m.string)(),type:(0,m.string)(),typeParameters:(0,m.array)((0,m.lazy)(()=>jo))})}),(0,m.object)({typeParameter:(0,m.pipe)((0,m.number)(),(0,m.integer)())})]),yA=(0,m.object)({ref:(0,m.nullable)((0,m.union)([(0,m.literal)("&"),(0,m.literal)("&mut")])),body:jo}),CA=(0,m.object)({package:Le,module:(0,m.string)(),function:(0,m.string)(),typeArguments:(0,m.array)((0,m.string)()),arguments:(0,m.array)(ne),_argumentTypes:(0,m.optional)((0,m.nullable)((0,m.array)(yA)))}),IA=(0,m.object)({name:(0,m.string)(),inputs:(0,m.record)((0,m.string)(),(0,m.union)([ne,(0,m.array)(ne)])),data:(0,m.record)((0,m.string)(),(0,m.unknown)())}),hA=rn({MoveCall:CA,TransferObjects:(0,m.object)({objects:(0,m.array)(ne),address:ne}),SplitCoins:(0,m.object)({coin:ne,amounts:(0,m.array)(ne)}),MergeCoins:(0,m.object)({destination:ne,sources:(0,m.array)(ne)}),Publish:(0,m.object)({modules:(0,m.array)(an),dependencies:(0,m.array)(Le)}),MakeMoveVec:(0,m.object)({type:(0,m.nullable)((0,m.string)()),elements:(0,m.array)(ne)}),Upgrade:(0,m.object)({modules:(0,m.array)(an),dependencies:(0,m.array)(Le),package:Le,ticket:ne}),$Intent:IA}),Pd=rn({ImmOrOwnedObject:bt,SharedObject:(0,m.object)({objectId:Le,initialSharedVersion:we,mutable:(0,m.boolean)()}),Receiving:bt}),vA=rn({Object:Pd,Pure:(0,m.object)({bytes:an}),UnresolvedPure:(0,m.object)({value:(0,m.unknown)()}),UnresolvedObject:(0,m.object)({objectId:Le,version:(0,m.optional)((0,m.nullable)(we)),digest:(0,m.optional)((0,m.nullable)((0,m.string)())),initialSharedVersion:(0,m.optional)((0,m.nullable)(we))})}),ko=rn({Object:Pd,Pure:(0,m.object)({bytes:an})}),Ho=rn({None:(0,m.literal)(!0),Epoch:we}),Kn=(0,m.object)({version:(0,m.literal)(2),sender:(0,m.nullish)(vn),expiration:(0,m.nullish)(Ho),gasData:bA,inputs:(0,m.array)(vA),commands:(0,m.array)(hA)});var $e={MoveCall(a){let[n,i="",r=""]="target"in a?a.target.split("::"):[a.package,a.module,a.function];return{$kind:"MoveCall",MoveCall:{package:n,module:i,function:r,typeArguments:a.typeArguments??[],arguments:a.arguments??[]}}},TransferObjects(a,n){return{$kind:"TransferObjects",TransferObjects:{objects:a.map(i=>(0,yt.parse)(ne,i)),address:(0,yt.parse)(ne,n)}}},SplitCoins(a,n){return{$kind:"SplitCoins",SplitCoins:{coin:(0,yt.parse)(ne,a),amounts:n.map(i=>(0,yt.parse)(ne,i))}}},MergeCoins(a,n){return{$kind:"MergeCoins",MergeCoins:{destination:(0,yt.parse)(ne,a),sources:n.map(i=>(0,yt.parse)(ne,i))}}},Publish({modules:a,dependencies:n}){return{$kind:"Publish",Publish:{modules:a.map(i=>typeof i=="string"?i:(0,Jo.toBase64)(new Uint8Array(i))),dependencies:n.map(i=>ze(i))}}},Upgrade({modules:a,dependencies:n,package:i,ticket:r}){return{$kind:"Upgrade",Upgrade:{modules:a.map(o=>typeof o=="string"?o:(0,Jo.toBase64)(new Uint8Array(o))),dependencies:n.map(o=>ze(o)),package:i,ticket:(0,yt.parse)(ne,r)}}},MakeMoveVec({type:a,elements:n}){return{$kind:"MakeMoveVec",MakeMoveVec:{type:a??null,elements:n.map(i=>(0,yt.parse)(ne,i))}}},Intent({name:a,inputs:n={},data:i={}}){return{$kind:"$Intent",$Intent:{name:a,inputs:Object.fromEntries(Object.entries(n).map(([r,o])=>[r,Array.isArray(o)?o.map(s=>(0,yt.parse)(ne,s)):(0,yt.parse)(ne,o)])),data:i}}}};var Qn=require("@mysten/bcs"),wt=require("valibot");xe();var on=require("@mysten/bcs"),p=require("valibot");Re();var zo=(0,p.object)({digest:(0,p.string)(),objectId:(0,p.string)(),version:(0,p.union)([(0,p.pipe)((0,p.number)(),(0,p.integer)()),(0,p.string)(),(0,p.bigint)()])}),RA=rn({ImmOrOwned:zo,Shared:(0,p.object)({objectId:Le,initialSharedVersion:we,mutable:(0,p.boolean)()}),Receiving:zo}),Ld=rn({Object:RA,Pure:(0,p.array)((0,p.pipe)((0,p.number)(),(0,p.integer)()))}),kd=(0,p.union)([(0,p.object)({kind:(0,p.literal)("Input"),index:(0,p.pipe)((0,p.number)(),(0,p.integer)()),value:(0,p.unknown)(),type:(0,p.optional)((0,p.literal)("object"))}),(0,p.object)({kind:(0,p.literal)("Input"),index:(0,p.pipe)((0,p.number)(),(0,p.integer)()),value:(0,p.unknown)(),type:(0,p.literal)("pure")})]),fA=(0,p.union)([(0,p.object)({Epoch:(0,p.pipe)((0,p.number)(),(0,p.integer)())}),(0,p.object)({None:(0,p.nullable)((0,p.literal)(!0))})]),jd=(0,p.pipe)((0,p.union)([(0,p.number)(),(0,p.string)(),(0,p.bigint)()]),(0,p.check)(a=>{if(!["string","number","bigint"].includes(typeof a))return!1;try{return BigInt(a),!0}catch{return!1}})),xo=(0,p.union)([(0,p.object)({bool:(0,p.nullable)((0,p.literal)(!0))}),(0,p.object)({u8:(0,p.nullable)((0,p.literal)(!0))}),(0,p.object)({u64:(0,p.nullable)((0,p.literal)(!0))}),(0,p.object)({u128:(0,p.nullable)((0,p.literal)(!0))}),(0,p.object)({address:(0,p.nullable)((0,p.literal)(!0))}),(0,p.object)({signer:(0,p.nullable)((0,p.literal)(!0))}),(0,p.object)({vector:(0,p.lazy)(()=>xo)}),(0,p.object)({struct:(0,p.lazy)(()=>YA)}),(0,p.object)({u16:(0,p.nullable)((0,p.literal)(!0))}),(0,p.object)({u32:(0,p.nullable)((0,p.literal)(!0))}),(0,p.object)({u256:(0,p.nullable)((0,p.literal)(!0))})]),YA=(0,p.object)({address:(0,p.string)(),module:(0,p.string)(),name:(0,p.string)(),typeParams:(0,p.array)(xo)}),BA=(0,p.object)({budget:(0,p.optional)(jd),price:(0,p.optional)(jd),payment:(0,p.optional)((0,p.array)(zo)),owner:(0,p.optional)((0,p.string)())}),WA=[kd,(0,p.object)({kind:(0,p.literal)("GasCoin")}),(0,p.object)({kind:(0,p.literal)("Result"),index:(0,p.pipe)((0,p.number)(),(0,p.integer)())}),(0,p.object)({kind:(0,p.literal)("NestedResult"),index:(0,p.pipe)((0,p.number)(),(0,p.integer)()),resultIndex:(0,p.pipe)((0,p.number)(),(0,p.integer)())})],zt=(0,p.union)([...WA]),TA=(0,p.object)({kind:(0,p.literal)("MoveCall"),target:(0,p.pipe)((0,p.string)(),(0,p.check)(a=>a.split("::").length===3)),typeArguments:(0,p.array)((0,p.string)()),arguments:(0,p.array)(zt)}),FA=(0,p.object)({kind:(0,p.literal)("TransferObjects"),objects:(0,p.array)(zt),address:zt}),NA=(0,p.object)({kind:(0,p.literal)("SplitCoins"),coin:zt,amounts:(0,p.array)(zt)}),wA=(0,p.object)({kind:(0,p.literal)("MergeCoins"),destination:zt,sources:(0,p.array)(zt)}),GA=(0,p.object)({kind:(0,p.literal)("MakeMoveVec"),type:(0,p.union)([(0,p.object)({Some:xo}),(0,p.object)({None:(0,p.nullable)((0,p.literal)(!0))})]),objects:(0,p.array)(zt)}),ZA=(0,p.object)({kind:(0,p.literal)("Publish"),modules:(0,p.array)((0,p.array)((0,p.pipe)((0,p.number)(),(0,p.integer)()))),dependencies:(0,p.array)((0,p.string)())}),SA=(0,p.object)({kind:(0,p.literal)("Upgrade"),modules:(0,p.array)((0,p.array)((0,p.pipe)((0,p.number)(),(0,p.integer)()))),dependencies:(0,p.array)((0,p.string)()),packageId:(0,p.string)(),ticket:zt}),VA=[TA,FA,NA,wA,ZA,SA,GA],XA=(0,p.union)([...VA]),Gy=(0,p.object)({version:(0,p.literal)(1),sender:(0,p.optional)((0,p.string)()),expiration:(0,p.nullish)(fA),gasConfig:BA,inputs:(0,p.array)(kd),transactions:(0,p.array)(XA)});function Oo(a){let n=a.inputs.map((i,r)=>{if(i.Object)return{kind:"Input",index:r,value:{Object:i.Object.ImmOrOwnedObject?{ImmOrOwned:i.Object.ImmOrOwnedObject}:i.Object.Receiving?{Receiving:{digest:i.Object.Receiving.digest,version:i.Object.Receiving.version,objectId:i.Object.Receiving.objectId}}:{Shared:{mutable:i.Object.SharedObject.mutable,initialSharedVersion:i.Object.SharedObject.initialSharedVersion,objectId:i.Object.SharedObject.objectId}}},type:"object"};if(i.Pure)return{kind:"Input",index:r,value:{Pure:Array.from((0,on.fromBase64)(i.Pure.bytes))},type:"pure"};if(i.UnresolvedPure)return{kind:"Input",type:"pure",index:r,value:i.UnresolvedPure.value};if(i.UnresolvedObject)return{kind:"Input",type:"object",index:r,value:i.UnresolvedObject.objectId};throw new Error("Invalid input")});return{version:1,sender:a.sender??void 0,expiration:a.expiration?.$kind==="Epoch"?{Epoch:Number(a.expiration.Epoch)}:a.expiration?{None:!0}:null,gasConfig:{owner:a.gasData.owner??void 0,budget:a.gasData.budget??void 0,price:a.gasData.price??void 0,payment:a.gasData.payment??void 0},inputs:n,transactions:a.commands.map(i=>{if(i.MakeMoveVec)return{kind:"MakeMoveVec",type:i.MakeMoveVec.type===null?{None:!0}:{Some:kt.parseFromStr(i.MakeMoveVec.type)},objects:i.MakeMoveVec.elements.map(r=>Ht(r,n))};if(i.MergeCoins)return{kind:"MergeCoins",destination:Ht(i.MergeCoins.destination,n),sources:i.MergeCoins.sources.map(r=>Ht(r,n))};if(i.MoveCall)return{kind:"MoveCall",target:`${i.MoveCall.package}::${i.MoveCall.module}::${i.MoveCall.function}`,typeArguments:i.MoveCall.typeArguments,arguments:i.MoveCall.arguments.map(r=>Ht(r,n))};if(i.Publish)return{kind:"Publish",modules:i.Publish.modules.map(r=>Array.from((0,on.fromBase64)(r))),dependencies:i.Publish.dependencies};if(i.SplitCoins)return{kind:"SplitCoins",coin:Ht(i.SplitCoins.coin,n),amounts:i.SplitCoins.amounts.map(r=>Ht(r,n))};if(i.TransferObjects)return{kind:"TransferObjects",objects:i.TransferObjects.objects.map(r=>Ht(r,n)),address:Ht(i.TransferObjects.address,n)};if(i.Upgrade)return{kind:"Upgrade",modules:i.Upgrade.modules.map(r=>Array.from((0,on.fromBase64)(r))),dependencies:i.Upgrade.dependencies,packageId:i.Upgrade.package,ticket:Ht(i.Upgrade.ticket,n)};throw new Error(`Unknown transaction ${Object.keys(i)}`)})}}function Ht(a,n){if(a.$kind==="GasCoin")return{kind:"GasCoin"};if(a.$kind==="Result")return{kind:"Result",index:a.Result};if(a.$kind==="NestedResult")return{kind:"NestedResult",index:a.NestedResult[0],resultIndex:a.NestedResult[1]};if(a.$kind==="Input")return n[a.Input];throw new Error(`Invalid argument ${Object.keys(a)}`)}function Hd(a){return(0,p.parse)(Kn,{version:2,sender:a.sender??null,expiration:a.expiration?"Epoch"in a.expiration?{Epoch:a.expiration.Epoch}:{None:!0}:null,gasData:{owner:a.gasConfig.owner??null,budget:a.gasConfig.budget?.toString()??null,price:a.gasConfig.price?.toString()??null,payment:a.gasConfig.payment?.map(n=>({digest:n.digest,objectId:n.objectId,version:n.version.toString()}))??null},inputs:a.inputs.map(n=>{if(n.kind==="Input"){if((0,p.is)(Ld,n.value)){let i=(0,p.parse)(Ld,n.value);if(i.Object){if(i.Object.ImmOrOwned)return{Object:{ImmOrOwnedObject:{objectId:i.Object.ImmOrOwned.objectId,version:String(i.Object.ImmOrOwned.version),digest:i.Object.ImmOrOwned.digest}}};if(i.Object.Shared)return{Object:{SharedObject:{mutable:i.Object.Shared.mutable??null,initialSharedVersion:i.Object.Shared.initialSharedVersion,objectId:i.Object.Shared.objectId}}};if(i.Object.Receiving)return{Object:{Receiving:{digest:i.Object.Receiving.digest,version:String(i.Object.Receiving.version),objectId:i.Object.Receiving.objectId}}};throw new Error("Invalid object input")}return{Pure:{bytes:(0,on.toBase64)(new Uint8Array(i.Pure))}}}return n.type==="object"?{UnresolvedObject:{objectId:n.value}}:{UnresolvedPure:{value:n.value}}}throw new Error("Invalid input")}),commands:a.transactions.map(n=>{switch(n.kind){case"MakeMoveVec":return{MakeMoveVec:{type:"Some"in n.type?kt.tagToString(n.type.Some):null,elements:n.objects.map(i=>Jt(i))}};case"MergeCoins":return{MergeCoins:{destination:Jt(n.destination),sources:n.sources.map(i=>Jt(i))}};case"MoveCall":{let[i,r,o]=n.target.split("::");return{MoveCall:{package:i,module:r,function:o,typeArguments:n.typeArguments,arguments:n.arguments.map(s=>Jt(s))}}}case"Publish":return{Publish:{modules:n.modules.map(i=>(0,on.toBase64)(Uint8Array.from(i))),dependencies:n.dependencies}};case"SplitCoins":return{SplitCoins:{coin:Jt(n.coin),amounts:n.amounts.map(i=>Jt(i))}};case"TransferObjects":return{TransferObjects:{objects:n.objects.map(i=>Jt(i)),address:Jt(n.address)}};case"Upgrade":return{Upgrade:{modules:n.modules.map(i=>(0,on.toBase64)(Uint8Array.from(i))),dependencies:n.dependencies,package:n.packageId,ticket:Jt(n.ticket)}}}throw new Error(`Unknown transaction ${Object.keys(n)}`)})})}function Jt(a){switch(a.kind){case"GasCoin":return{GasCoin:!0};case"Result":return{Result:a.index};case"NestedResult":return{NestedResult:[a.index,a.resultIndex]};case"Input":return{Input:a.index}}}var B=require("valibot");function Hi(a){return(0,B.union)(Object.entries(a).map(([n,i])=>(0,B.object)({[n]:i})))}var Ct=Hi({GasCoin:(0,B.literal)(!0),Input:(0,B.pipe)((0,B.number)(),(0,B.integer)()),Result:(0,B.pipe)((0,B.number)(),(0,B.integer)()),NestedResult:(0,B.tuple)([(0,B.pipe)((0,B.number)(),(0,B.integer)()),(0,B.pipe)((0,B.number)(),(0,B.integer)())])}),MA=(0,B.object)({budget:(0,B.nullable)(we),price:(0,B.nullable)(we),owner:(0,B.nullable)(vn),payment:(0,B.nullable)((0,B.array)(bt))}),PA=(0,B.object)({package:Le,module:(0,B.string)(),function:(0,B.string)(),typeArguments:(0,B.array)((0,B.string)()),arguments:(0,B.array)(Ct)}),LA=(0,B.object)({name:(0,B.string)(),inputs:(0,B.record)((0,B.string)(),(0,B.union)([Ct,(0,B.array)(Ct)])),data:(0,B.record)((0,B.string)(),(0,B.unknown)())}),jA=Hi({MoveCall:PA,TransferObjects:(0,B.object)({objects:(0,B.array)(Ct),address:Ct}),SplitCoins:(0,B.object)({coin:Ct,amounts:(0,B.array)(Ct)}),MergeCoins:(0,B.object)({destination:Ct,sources:(0,B.array)(Ct)}),Publish:(0,B.object)({modules:(0,B.array)(an),dependencies:(0,B.array)(Le)}),MakeMoveVec:(0,B.object)({type:(0,B.nullable)((0,B.string)()),elements:(0,B.array)(Ct)}),Upgrade:(0,B.object)({modules:(0,B.array)(an),dependencies:(0,B.array)(Le),package:Le,ticket:Ct}),$Intent:LA}),kA=Hi({ImmOrOwnedObject:bt,SharedObject:(0,B.object)({objectId:Le,initialSharedVersion:we,mutable:(0,B.boolean)()}),Receiving:bt}),HA=Hi({Object:kA,Pure:(0,B.object)({bytes:an}),UnresolvedPure:(0,B.object)({value:(0,B.unknown)()}),UnresolvedObject:(0,B.object)({objectId:Le,version:(0,B.optional)((0,B.nullable)(we)),digest:(0,B.optional)((0,B.nullable)((0,B.string)())),initialSharedVersion:(0,B.optional)((0,B.nullable)(we))})}),JA=Hi({None:(0,B.literal)(!0),Epoch:we}),Jd=(0,B.object)({version:(0,B.literal)(2),sender:(0,B.nullish)(vn),expiration:(0,B.nullish)(JA),gasData:MA,inputs:(0,B.array)(HA),commands:(0,B.array)(jA)});var xd=require("valibot");Re();var zA=50,xA=1000n,OA=5e10;async function Od(a,n,i){return await EA(a,n),await DA(a,n),n.onlyTransactionKind||(await UA(a,n),await KA(a,n),await QA(a,n)),await _A(a),await i()}async function UA(a,n){a.gasConfig.price||(a.gasConfig.price=String(await Rn(n).getReferenceGasPrice()))}async function KA(a,n){if(a.gasConfig.budget)return;let i=await Rn(n).dryRunTransactionBlock({transactionBlock:a.build({overrides:{gasData:{budget:String(OA),payment:[]}}})});if(i.effects.status.status!=="success")throw new Error(`Dry run failed, could not automatically determine a budget: ${i.effects.status.error}`,{cause:i});let r=xA*BigInt(a.gasConfig.price||1n),o=BigInt(i.effects.gasUsed.computationCost)+r,s=o+BigInt(i.effects.gasUsed.storageCost)-BigInt(i.effects.gasUsed.storageRebate);a.gasConfig.budget=String(s>o?s:o)}async function QA(a,n){if(!a.gasConfig.payment){let r=(await Rn(n).getCoins({owner:a.gasConfig.owner||a.sender,coinType:Lo})).data.filter(o=>!a.inputs.find(d=>d.Object?.ImmOrOwnedObject?o.coinObjectId===d.Object.ImmOrOwnedObject.objectId:!1)).map(o=>({objectId:o.coinObjectId,digest:o.digest,version:o.version}));if(!r.length)throw new Error("No valid gas coins found for the transaction.");a.gasConfig.payment=r.map(o=>(0,xd.parse)(bt,o))}}async function DA(a,n){let i=a.inputs.filter(l=>l.UnresolvedObject&&!(l.UnresolvedObject.version||l.UnresolvedObject?.initialSharedVersion)),r=[...new Set(i.map(l=>ze(l.UnresolvedObject.objectId)))],o=r.length?tl(r,zA):[],s=(await Promise.all(o.map(l=>Rn(n).multiGetObjects({ids:l,options:{showOwner:!0}})))).flat(),d=new Map(r.map((l,u)=>[l,s[u]])),c=Array.from(d).filter(([l,u])=>u.error).map(([l,u])=>JSON.stringify(u.error));if(c.length)throw new Error(`The following input objects are invalid: ${c.join(", ")}`);let g=s.map(l=>{if(l.error||!l.data)throw new Error(`Failed to fetch object: ${l.error}`);let u=l.data.owner,b=u&&typeof u=="object"&&"Shared"in u?u.Shared.initial_shared_version:null;return{objectId:l.data.objectId,digest:l.data.digest,version:l.data.version,initialSharedVersion:b}}),A=new Map(r.map((l,u)=>[l,g[u]]));for(let[l,u]of a.inputs.entries()){if(!u.UnresolvedObject)continue;let b,C=j(u.UnresolvedObject.objectId),Y=A.get(C);u.UnresolvedObject.initialSharedVersion??Y?.initialSharedVersion?b=Ue.SharedObjectRef({objectId:C,initialSharedVersion:u.UnresolvedObject.initialSharedVersion||Y?.initialSharedVersion,mutable:$A(a,l)}):qA(a,l)&&(b=Ue.ReceivingRef({objectId:C,digest:u.UnresolvedObject.digest??Y?.digest,version:u.UnresolvedObject.version??Y?.version})),a.inputs[a.inputs.indexOf(u)]=b??Ue.ObjectRef({objectId:C,digest:u.UnresolvedObject.digest??Y?.digest,version:u.UnresolvedObject.version??Y?.version})}}async function EA(a,n){let{inputs:i,commands:r}=a,o=[],s=new Set;r.forEach(c=>{if(c.MoveCall){if(c.MoveCall._argumentTypes)return;if(c.MoveCall.arguments.map(l=>l.$kind==="Input"?a.inputs[l.Input]:null).some(l=>l?.UnresolvedPure||l?.UnresolvedObject)){let l=`${c.MoveCall.package}::${c.MoveCall.module}::${c.MoveCall.function}`;s.add(l),o.push(c.MoveCall)}}switch(c.$kind){case"SplitCoins":c.SplitCoins.amounts.forEach(g=>{zd(g,v.U64,a)});break;case"TransferObjects":zd(c.TransferObjects.address,v.Address,a);break}});let d=new Map;if(s.size>0){let c=Rn(n);await Promise.all([...s].map(async g=>{let[A,l,u]=g.split("::"),b=await c.getNormalizedMoveFunction({package:A,module:l,function:u});d.set(g,b.parameters.map(C=>Xd(C)))}))}o.length&&await Promise.all(o.map(async c=>{let g=d.get(`${c.package}::${c.module}::${c.function}`);if(!g)return;let l=g.length>0&&Vd(g.at(-1))?g.slice(0,g.length-1):g;c._argumentTypes=l})),r.forEach(c=>{if(!c.MoveCall)return;let g=c.MoveCall,A=`${g.package}::${g.module}::${g.function}`,l=g._argumentTypes;if(l){if(l.length!==c.MoveCall.arguments.length)throw new Error(`Incorrect number of arguments for ${A}`);l.forEach((u,b)=>{let C=g.arguments[b];if(C.$kind!=="Input")return;let Y=i[C.Input];if(!Y.UnresolvedPure&&!Y.UnresolvedObject)return;let W=Y.UnresolvedPure?.value??Y.UnresolvedObject?.objectId,F=xa(u.body);if(F){C.type="pure",i[i.indexOf(Y)]=Ue.Pure(F.serialize(W));return}if(typeof W!="string")throw new Error(`Expect the argument to be an object id string, got ${JSON.stringify(W,null,2)}`);C.type="object";let w=Y.UnresolvedPure?{$kind:"UnresolvedObject",UnresolvedObject:{objectId:W}}:Y;i[C.Input]=w})}})}function _A(a){a.inputs.forEach((n,i)=>{if(n.$kind!=="Object"&&n.$kind!=="Pure")throw new Error(`Input at index ${i} has not been resolved. Expected a Pure or Object input, but found ${JSON.stringify(n)}`)})}function zd(a,n,i){if(a.$kind!=="Input")return;let r=i.inputs[a.Input];r.$kind==="UnresolvedPure"&&(i.inputs[a.Input]=Ue.Pure(n.serialize(r.UnresolvedPure.value)))}function $A(a,n){let i=!1;return a.getInputUses(n,(r,o)=>{if(o.MoveCall&&o.MoveCall._argumentTypes){let s=o.MoveCall.arguments.indexOf(r);i=o.MoveCall._argumentTypes[s].ref!=="&"||i}(o.$kind==="MakeMoveVec"||o.$kind==="MergeCoins"||o.$kind==="SplitCoins")&&(i=!0)}),i}function qA(a,n){let i=!1;return a.getInputUses(n,(r,o)=>{if(o.MoveCall&&o.MoveCall._argumentTypes){let s=o.MoveCall.arguments.indexOf(r);i=el(o.MoveCall._argumentTypes[s])||i}}),i}function el(a){return typeof a.body!="object"||!("datatype"in a.body)?!1:a.body.datatype.package==="0x2"&&a.body.datatype.module==="transfer"&&a.body.datatype.type==="Receiving"}function Rn(a){if(!a.client)throw new Error("No sui client passed to Transaction#build, but transaction data was not sufficient to build offline.");return a.client}function tl(a,n){return Array.from({length:Math.ceil(a.length/n)},(i,r)=>a.slice(r*n,r*n+n))}function Ud(a){function n(i){return a(i)}return n.system=()=>n("0x5"),n.clock=()=>n("0x6"),n.random=()=>n("0x8"),n.denyList=()=>n("0x403"),n.option=({type:i,value:r})=>o=>o.moveCall({typeArguments:[i],target:`0x1::option::${r===null?"none":"some"}`,arguments:r===null?[]:[o.object(r)]}),n}var Kd=require("@mysten/bcs");Re();function Qd(a){function n(i,r){if(typeof i=="string")return a(Ji(i).serialize(r));if(i instanceof Uint8Array||(0,Kd.isSerializedBcs)(i))return a(i);throw new Error("tx.pure must be called either a bcs type name, or a serialized bcs value")}return n.u8=i=>a(v.U8.serialize(i)),n.u16=i=>a(v.U16.serialize(i)),n.u32=i=>a(v.U32.serialize(i)),n.u64=i=>a(v.U64.serialize(i)),n.u128=i=>a(v.U128.serialize(i)),n.u256=i=>a(v.U256.serialize(i)),n.bool=i=>a(v.Bool.serialize(i)),n.string=i=>a(v.String.serialize(i)),n.address=i=>a(v.Address.serialize(i)),n.id=n.address,n.vector=(i,r)=>a(v.vector(Ji(i)).serialize(r)),n.option=(i,r)=>a(v.option(Ji(i)).serialize(r)),n}function Ji(a){switch(a){case"u8":return v.u8();case"u16":return v.u16();case"u32":return v.u32();case"u64":return v.u64();case"u128":return v.u128();case"u256":return v.u256();case"bool":return v.bool();case"string":return v.string();case"id":case"address":return v.Address}let n=a.match(/^(vector|option)<(.+)>$/);if(n){let[i,r]=n.slice(1);return i==="vector"?v.vector(Ji(r)):v.option(Ji(r))}throw new Error(`Invalid Pure type name: ${a}`)}var $d=require("@mysten/bcs"),Oa=require("valibot");Re();xe();var Dd=require("@noble/hashes/blake2b");function Ed(a,n){let i=Array.from(`${a}::`).map(o=>o.charCodeAt(0)),r=new Uint8Array(i.length+n.length);return r.set(i),r.set(n,i.length),(0,Dd.blake2b)(r,{dkLen:32})}function _d(a){return j(a).replace("0x","")}var sn=class a{constructor(n){this.version=2,this.sender=n?.sender??null,this.expiration=n?.expiration??null,this.inputs=n?.inputs??[],this.commands=n?.commands??[],this.gasData=n?.gasData??{budget:null,price:null,owner:null,payment:null}}static fromKindBytes(n){let r=v.TransactionKind.parse(n).ProgrammableTransaction;if(!r)throw new Error("Unable to deserialize from bytes.");return a.restore({version:2,sender:null,expiration:null,gasData:{budget:null,owner:null,payment:null,price:null},inputs:r.inputs,commands:r.commands})}static fromBytes(n){let r=v.TransactionData.parse(n)?.V1,o=r.kind.ProgrammableTransaction;if(!r||!o)throw new Error("Unable to deserialize from bytes.");return a.restore({version:2,sender:r.sender,expiration:r.expiration,gasData:r.gasData,inputs:o.inputs,commands:o.commands})}static restore(n){return n.version===2?new a((0,Oa.parse)(Kn,n)):new a((0,Oa.parse)(Kn,Hd(n)))}static getDigestFromBytes(n){let i=Ed("TransactionData",n);return(0,$d.toBase58)(i)}get gasConfig(){return this.gasData}set gasConfig(n){this.gasData=n}build({maxSizeBytes:n=1/0,overrides:i,onlyTransactionKind:r}={}){let o=this.inputs,s=this.commands,d={ProgrammableTransaction:{inputs:o,commands:s}};if(r)return v.TransactionKind.serialize(d,{maxSize:n}).toBytes();let c=i?.expiration??this.expiration,g=i?.sender??this.sender,A={...this.gasData,...i?.gasConfig,...i?.gasData};if(!g)throw new Error("Missing transaction sender");if(!A.budget)throw new Error("Missing gas budget");if(!A.payment)throw new Error("Missing gas payment");if(!A.price)throw new Error("Missing gas price");let l={sender:_d(g),expiration:c||{None:!0},gasData:{payment:A.payment,owner:_d(this.gasData.owner??g),price:BigInt(A.price),budget:BigInt(A.budget)},kind:{ProgrammableTransaction:{inputs:o,commands:s}}};return v.TransactionData.serialize({V1:l},{maxSize:n}).toBytes()}addInput(n,i){let r=this.inputs.length;return this.inputs.push(i),{Input:r,type:n,$kind:"Input"}}getInputUses(n,i){this.mapArguments((r,o)=>(r.$kind==="Input"&&r.Input===n&&i(r,o),r))}mapArguments(n){for(let i of this.commands)switch(i.$kind){case"MoveCall":i.MoveCall.arguments=i.MoveCall.arguments.map(o=>n(o,i));break;case"TransferObjects":i.TransferObjects.objects=i.TransferObjects.objects.map(o=>n(o,i)),i.TransferObjects.address=n(i.TransferObjects.address,i);break;case"SplitCoins":i.SplitCoins.coin=n(i.SplitCoins.coin,i),i.SplitCoins.amounts=i.SplitCoins.amounts.map(o=>n(o,i));break;case"MergeCoins":i.MergeCoins.destination=n(i.MergeCoins.destination,i),i.MergeCoins.sources=i.MergeCoins.sources.map(o=>n(o,i));break;case"MakeMoveVec":i.MakeMoveVec.elements=i.MakeMoveVec.elements.map(o=>n(o,i));break;case"Upgrade":i.Upgrade.ticket=n(i.Upgrade.ticket,i);break;case"$Intent":let r=i.$Intent.inputs;i.$Intent.inputs={};for(let[o,s]of Object.entries(r))i.$Intent.inputs[o]=Array.isArray(s)?s.map(d=>n(d,i)):n(s,i);break;case"Publish":break;default:throw new Error(`Unexpected transaction kind: ${i.$kind}`)}}replaceCommand(n,i){if(!Array.isArray(i)){this.commands[n]=i;return}let r=i.length-1;this.commands.splice(n,1,...i),r!==0&&this.mapArguments(o=>{switch(o.$kind){case"Result":o.Result>n&&(o.Result+=r);break;case"NestedResult":o.NestedResult[0]>n&&(o.NestedResult[0]+=r);break}return o})}getDigest(){let n=this.build({onlyTransactionKind:!1});return a.getDigestFromBytes(n)}snapshot(){return(0,Oa.parse)(Kn,this)}};xe();function Uo(a){if(typeof a=="string")return j(a);if(a.Object)return a.Object.ImmOrOwnedObject?j(a.Object.ImmOrOwnedObject.objectId):a.Object.Receiving?j(a.Object.Receiving.objectId):j(a.Object.SharedObject.objectId);if(a.UnresolvedObject)return j(a.UnresolvedObject.objectId)}var tc=a=>{throw TypeError(a)},Eo=(a,n,i)=>n.has(a)||tc("Cannot "+i),U=(a,n,i)=>(Eo(a,n,"read from private field"),i?i.call(a):n.get(a)),zi=(a,n,i)=>n.has(a)?tc("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(a):n.set(a,i),fn=(a,n,i,r)=>(Eo(a,n,"write to private field"),r?r.call(a,i):n.set(a,i),i),xt=(a,n,i)=>(Eo(a,n,"access private method"),i),Oi,Ui,Yn,_,It,Ua,_o,Qo,$o;function qd(a,n=1/0){let i={$kind:"Result",Result:a},r=[],o=s=>r[s]??(r[s]={$kind:"NestedResult",NestedResult:[a,s]});return new Proxy(i,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(s,d){if(d in s)return Reflect.get(s,d);if(d===Symbol.iterator)return function*(){let g=0;for(;g<n;)yield o(g),g++};if(typeof d=="symbol")return;let c=parseInt(d,10);if(!(Number.isNaN(c)||c<0))return o(c)}})}var nc=Symbol.for("@mysten/transaction");function Ka(a){return!!a&&typeof a=="object"&&a[nc]===!0}var ec={buildPlugins:new Map,serializationPlugins:new Map},Ko=Symbol.for("@mysten/transaction/registry");function xi(){try{let a=globalThis;return a[Ko]||(a[Ko]=ec),a[Ko]}catch{return ec}}var nl=class Do{constructor(){zi(this,It),zi(this,Oi),zi(this,Ui),zi(this,Yn,new Map),zi(this,_),this.object=Ud(i=>{if(typeof i=="function")return this.object(i(this));if(typeof i=="object"&&(0,wt.is)(ne,i))return i;let r=Uo(i),o=U(this,_).inputs.find(s=>r===Uo(s));return o?.Object?.SharedObject&&typeof i=="object"&&i.Object?.SharedObject&&(o.Object.SharedObject.mutable=o.Object.SharedObject.mutable||i.Object.SharedObject.mutable),o?{$kind:"Input",Input:U(this,_).inputs.indexOf(o),type:"object"}:U(this,_).addInput("object",typeof i=="string"?{$kind:"UnresolvedObject",UnresolvedObject:{objectId:j(i)}}:i)});let n=xi();fn(this,_,new sn),fn(this,Ui,[...n.buildPlugins.values()]),fn(this,Oi,[...n.serializationPlugins.values()])}static fromKind(n){let i=new Do;return fn(i,_,sn.fromKindBytes(typeof n=="string"?(0,Qn.fromBase64)(n):n)),i}static from(n){let i=new Do;return Ka(n)?fn(i,_,new sn(n.getData())):typeof n!="string"||!n.startsWith("{")?fn(i,_,sn.fromBytes(typeof n=="string"?(0,Qn.fromBase64)(n):n)):fn(i,_,sn.restore(JSON.parse(n))),i}static registerGlobalSerializationPlugin(n,i){xi().serializationPlugins.set(n,i??n)}static unregisterGlobalSerializationPlugin(n){xi().serializationPlugins.delete(n)}static registerGlobalBuildPlugin(n,i){xi().buildPlugins.set(n,i??n)}static unregisterGlobalBuildPlugin(n){xi().buildPlugins.delete(n)}addSerializationPlugin(n){U(this,Oi).push(n)}addBuildPlugin(n){U(this,Ui).push(n)}addIntentResolver(n,i){if(U(this,Yn).has(n)&&U(this,Yn).get(n)!==i)throw new Error(`Intent resolver for ${n} already exists`);U(this,Yn).set(n,i)}setSender(n){U(this,_).sender=n}setSenderIfNotSet(n){U(this,_).sender||(U(this,_).sender=n)}setExpiration(n){U(this,_).expiration=n?(0,wt.parse)(Ho,n):null}setGasPrice(n){U(this,_).gasConfig.price=String(n)}setGasBudget(n){U(this,_).gasConfig.budget=String(n)}setGasBudgetIfNotSet(n){U(this,_).gasData.budget==null&&(U(this,_).gasConfig.budget=String(n))}setGasOwner(n){U(this,_).gasConfig.owner=n}setGasPayment(n){U(this,_).gasConfig.payment=n.map(i=>(0,wt.parse)(bt,i))}get blockData(){return Oo(U(this,_).snapshot())}getData(){return U(this,_).snapshot()}get[nc](){return!0}get pure(){return Object.defineProperty(this,"pure",{enumerable:!1,value:Qd(n=>(0,Qn.isSerializedBcs)(n)?U(this,_).addInput("pure",{$kind:"Pure",Pure:{bytes:n.toBase64()}}):U(this,_).addInput("pure",(0,wt.is)(ko,n)?(0,wt.parse)(ko,n):n instanceof Uint8Array?Ue.Pure(n):{$kind:"UnresolvedPure",UnresolvedPure:{value:n}}))}),this.pure}get gas(){return{$kind:"GasCoin",GasCoin:!0}}objectRef(...n){return this.object(Ue.ObjectRef(...n))}receivingRef(...n){return this.object(Ue.ReceivingRef(...n))}sharedObjectRef(...n){return this.object(Ue.SharedObjectRef(...n))}add(n){if(typeof n=="function")return n(this);let i=U(this,_).commands.push(n);return qd(i-1)}splitCoins(n,i){let r=$e.SplitCoins(typeof n=="string"?this.object(n):xt(this,It,_o).call(this,n),i.map(s=>typeof s=="number"||typeof s=="bigint"||typeof s=="string"?this.pure.u64(s):xt(this,It,Ua).call(this,s))),o=U(this,_).commands.push(r);return qd(o-1,i.length)}mergeCoins(n,i){return this.add($e.MergeCoins(this.object(n),i.map(r=>this.object(r))))}publish({modules:n,dependencies:i}){return this.add($e.Publish({modules:n,dependencies:i}))}upgrade({modules:n,dependencies:i,package:r,ticket:o}){return this.add($e.Upgrade({modules:n,dependencies:i,package:r,ticket:this.object(o)}))}moveCall({arguments:n,...i}){return this.add($e.MoveCall({...i,arguments:n?.map(r=>xt(this,It,Ua).call(this,r))}))}transferObjects(n,i){return this.add($e.TransferObjects(n.map(r=>this.object(r)),typeof i=="string"?this.pure.address(i):xt(this,It,Ua).call(this,i)))}makeMoveVec({type:n,elements:i}){return this.add($e.MakeMoveVec({type:n,elements:i.map(r=>this.object(r))}))}serialize(){return JSON.stringify(Oo(U(this,_).snapshot()))}async toJSON(n={}){return await this.prepareForSerialization(n),JSON.stringify((0,wt.parse)(Jd,U(this,_).snapshot()),(i,r)=>typeof r=="bigint"?r.toString():r,2)}async sign(n){let{signer:i,...r}=n,o=await this.build(r);return i.signTransaction(o)}async build(n={}){return await this.prepareForSerialization(n),await xt(this,It,Qo).call(this,n),U(this,_).build({onlyTransactionKind:n.onlyTransactionKind})}async getDigest(n={}){return await xt(this,It,Qo).call(this,n),U(this,_).getDigest()}async prepareForSerialization(n){let i=new Set;for(let o of U(this,_).commands)o.$Intent&&i.add(o.$Intent.name);let r=[...U(this,Oi)];for(let o of i)if(!n.supportedIntents?.includes(o)){if(!U(this,Yn).has(o))throw new Error(`Missing intent resolver for ${o}`);r.push(U(this,Yn).get(o))}await xt(this,It,$o).call(this,r,n)}};Oi=new WeakMap;Ui=new WeakMap;Yn=new WeakMap;_=new WeakMap;It=new WeakSet;Ua=function(a){return(0,Qn.isSerializedBcs)(a)?this.pure(a):xt(this,It,_o).call(this,a)};_o=function(a){return typeof a=="function"?(0,wt.parse)(ne,a(this)):(0,wt.parse)(ne,a)};Qo=async function(a){if(!a.onlyTransactionKind&&!U(this,_).sender)throw new Error("Missing transaction sender");await xt(this,It,$o).call(this,[...U(this,Ui),Od],a)};$o=async function(a,n){let i=r=>{if(r>=a.length)return()=>{};let o=a[r];return async()=>{let s=i(r+1),d=!1,c=!1;if(await o(U(this,_),n,async()=>{if(d)throw new Error(`next() was call multiple times in TransactionPlugin ${r}`);d=!0,await s(),c=!0}),!d)throw new Error(`next() was not called in TransactionPlugin ${r}`);if(!c)throw new Error(`next() was not awaited in TransactionPlugin ${r}`)}};await i(0)()};var Gt=nl;var dn=require("valibot");Re();xe();var Qa="CoinWithBalance",ic=ji("0x2::sui::SUI");function re({type:a=ic,balance:n,useGasCoin:i=!0}){return r=>{r.addIntentResolver(Qa,al);let o=a==="gas"?a:ji(a);return r.add($e.Intent({name:Qa,inputs:{},data:{type:o===ic&&i?"gas":o,balance:BigInt(n)}}))}}var il=(0,dn.object)({type:(0,dn.string)(),balance:(0,dn.bigint)()});async function al(a,n,i){let r=new Set,o=new Map;if(!a.sender)throw new Error("Sender must be set to resolve CoinWithBalance");for(let A of a.commands)if(A.$kind==="$Intent"&&A.$Intent.name===Qa){let{type:l,balance:u}=(0,dn.parse)(il,A.$Intent.data);l!=="gas"&&u>0n&&r.add(l),o.set(l,(o.get(l)??0n)+u)}let s=new Set;for(let A of a.inputs)A.Object?.ImmOrOwnedObject&&s.add(A.Object.ImmOrOwnedObject.objectId),A.UnresolvedObject?.objectId&&s.add(A.UnresolvedObject.objectId);let d=new Map,c=Rn(n);await Promise.all([...r].map(async A=>{d.set(A,await rl({coinType:A,balance:o.get(A),client:c,owner:a.sender,usedIds:s}))}));let g=new Map;g.set("gas",{$kind:"GasCoin",GasCoin:!0});for(let[A,l]of a.commands.entries()){if(l.$kind!=="$Intent"||l.$Intent.name!==Qa)continue;let{type:u,balance:b}=l.$Intent.data;if(b===0n){a.replaceCommand(A,$e.MoveCall({target:"0x2::coin::zero",typeArguments:[u]}));continue}let C=[];if(!g.has(u)){let[Y,...W]=d.get(u).map(F=>a.addInput("object",Ue.ObjectRef({objectId:F.coinObjectId,digest:F.digest,version:F.version})));W.length>0&&C.push($e.MergeCoins(Y,W)),g.set(u,Y)}C.push($e.SplitCoins(g.get(u),[a.addInput("pure",Ue.Pure(v.u64().serialize(b)))])),a.replaceCommand(A,C),a.mapArguments(Y=>Y.$kind==="Result"&&Y.Result===A?{$kind:"NestedResult",NestedResult:[A+C.length-1,0]}:Y)}return i()}async function rl({coinType:a,balance:n,client:i,owner:r,usedIds:o}){let s=n,d=[];return c();async function c(g=null){let{data:A,hasNextPage:l,nextCursor:u}=await i.getCoins({owner:r,coinType:a,cursor:g}),b=A.sort((C,Y)=>Number(BigInt(Y.balance)-BigInt(C.balance)));for(let C of b){if(o.has(C.coinObjectId))continue;let Y=BigInt(C.balance);if(d.push(C),s-=Y,s<=0)return d}if(l)return c(u);throw new Error(`Not enough coins of type ${a} to satisfy requested balance`)}}xe();var ol=Symbol.for("@mysten/SuiClient");var Ut=class{get[ol](){return!0}constructor(n){this.transport=n.transport??new La({url:n.url})}async getRpcApiVersion(){return(await this.transport.request({method:"rpc.discover",params:[]})).info.version}async getCoins(n){if(!n.owner||!Ee(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getCoins",params:[n.owner,n.coinType,n.cursor,n.limit]})}async getAllCoins(n){if(!n.owner||!Ee(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getAllCoins",params:[n.owner,n.cursor,n.limit]})}async getBalance(n){if(!n.owner||!Ee(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getBalance",params:[n.owner,n.coinType]})}async getAllBalances(n){if(!n.owner||!Ee(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getAllBalances",params:[n.owner]})}async getCoinMetadata(n){return await this.transport.request({method:"suix_getCoinMetadata",params:[n.coinType]})}async getTotalSupply(n){return await this.transport.request({method:"suix_getTotalSupply",params:[n.coinType]})}async call(n,i){return await this.transport.request({method:n,params:i})}async getMoveFunctionArgTypes(n){return await this.transport.request({method:"sui_getMoveFunctionArgTypes",params:[n.package,n.module,n.function]})}async getNormalizedMoveModulesByPackage(n){return await this.transport.request({method:"sui_getNormalizedMoveModulesByPackage",params:[n.package]})}async getNormalizedMoveModule(n){return await this.transport.request({method:"sui_getNormalizedMoveModule",params:[n.package,n.module]})}async getNormalizedMoveFunction(n){return await this.transport.request({method:"sui_getNormalizedMoveFunction",params:[n.package,n.module,n.function]})}async getNormalizedMoveStruct(n){return await this.transport.request({method:"sui_getNormalizedMoveStruct",params:[n.package,n.module,n.struct]})}async getOwnedObjects(n){if(!n.owner||!Ee(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getOwnedObjects",params:[n.owner,{filter:n.filter,options:n.options},n.cursor,n.limit]})}async getObject(n){if(!n.id||!On(ze(n.id)))throw new Error("Invalid Sui Object id");return await this.transport.request({method:"sui_getObject",params:[n.id,n.options]})}async tryGetPastObject(n){return await this.transport.request({method:"sui_tryGetPastObject",params:[n.id,n.version,n.options]})}async multiGetObjects(n){if(n.ids.forEach(r=>{if(!r||!On(ze(r)))throw new Error(`Invalid Sui Object id ${r}`)}),n.ids.length!==new Set(n.ids).size)throw new Error(`Duplicate object ids in batch call ${n.ids}`);return await this.transport.request({method:"sui_multiGetObjects",params:[n.ids,n.options]})}async queryTransactionBlocks(n){return await this.transport.request({method:"suix_queryTransactionBlocks",params:[{filter:n.filter,options:n.options},n.cursor,n.limit,(n.order||"descending")==="descending"]})}async getTransactionBlock(n){if(!ka(n.digest))throw new Error("Invalid Transaction digest");return await this.transport.request({method:"sui_getTransactionBlock",params:[n.digest,n.options]})}async multiGetTransactionBlocks(n){if(n.digests.forEach(r=>{if(!ka(r))throw new Error(`Invalid Transaction digest ${r}`)}),n.digests.length!==new Set(n.digests).size)throw new Error(`Duplicate digests in batch call ${n.digests}`);return await this.transport.request({method:"sui_multiGetTransactionBlocks",params:[n.digests,n.options]})}async executeTransactionBlock({transactionBlock:n,signature:i,options:r,requestType:o}){let s=await this.transport.request({method:"sui_executeTransactionBlock",params:[typeof n=="string"?n:(0,Ot.toBase64)(n),Array.isArray(i)?i:[i],r]});if(o==="WaitForLocalExecution")try{await this.waitForTransaction({digest:s.digest})}catch{}return s}async signAndExecuteTransaction({transaction:n,signer:i,...r}){let o;n instanceof Uint8Array?o=n:(n.setSenderIfNotSet(i.toSuiAddress()),o=await n.build({client:this}));let{signature:s,bytes:d}=await i.signTransaction(o);return this.executeTransactionBlock({transactionBlock:d,signature:s,...r})}async getTotalTransactionBlocks(){let n=await this.transport.request({method:"sui_getTotalTransactionBlocks",params:[]});return BigInt(n)}async getReferenceGasPrice(){let n=await this.transport.request({method:"suix_getReferenceGasPrice",params:[]});return BigInt(n)}async getStakes(n){if(!n.owner||!Ee(j(n.owner)))throw new Error("Invalid Sui address");return await this.transport.request({method:"suix_getStakes",params:[n.owner]})}async getStakesByIds(n){return n.stakedSuiIds.forEach(i=>{if(!i||!On(ze(i)))throw new Error(`Invalid Sui Stake id ${i}`)}),await this.transport.request({method:"suix_getStakesByIds",params:[n.stakedSuiIds]})}async getLatestSuiSystemState(){return await this.transport.request({method:"suix_getLatestSuiSystemState",params:[]})}async queryEvents(n){return await this.transport.request({method:"suix_queryEvents",params:[n.query,n.cursor,n.limit,(n.order||"descending")==="descending"]})}async subscribeEvent(n){return this.transport.subscribe({method:"suix_subscribeEvent",unsubscribe:"suix_unsubscribeEvent",params:[n.filter],onMessage:n.onMessage})}async subscribeTransaction(n){return this.transport.subscribe({method:"suix_subscribeTransaction",unsubscribe:"suix_unsubscribeTransaction",params:[n.filter],onMessage:n.onMessage})}async devInspectTransactionBlock(n){let i;if(Ka(n.transactionBlock))n.transactionBlock.setSenderIfNotSet(n.sender),i=(0,Ot.toBase64)(await n.transactionBlock.build({client:this,onlyTransactionKind:!0}));else if(typeof n.transactionBlock=="string")i=n.transactionBlock;else if(n.transactionBlock instanceof Uint8Array)i=(0,Ot.toBase64)(n.transactionBlock);else throw new Error("Unknown transaction block format.");return await this.transport.request({method:"sui_devInspectTransactionBlock",params:[n.sender,i,n.gasPrice?.toString(),n.epoch]})}async dryRunTransactionBlock(n){return await this.transport.request({method:"sui_dryRunTransactionBlock",params:[typeof n.transactionBlock=="string"?n.transactionBlock:(0,Ot.toBase64)(n.transactionBlock)]})}async getDynamicFields(n){if(!n.parentId||!On(ze(n.parentId)))throw new Error("Invalid Sui Object id");return await this.transport.request({method:"suix_getDynamicFields",params:[n.parentId,n.cursor,n.limit]})}async getDynamicFieldObject(n){return await this.transport.request({method:"suix_getDynamicFieldObject",params:[n.parentId,n.name]})}async getLatestCheckpointSequenceNumber(){let n=await this.transport.request({method:"sui_getLatestCheckpointSequenceNumber",params:[]});return String(n)}async getCheckpoint(n){return await this.transport.request({method:"sui_getCheckpoint",params:[n.id]})}async getCheckpoints(n){return await this.transport.request({method:"sui_getCheckpoints",params:[n.cursor,n?.limit,n.descendingOrder]})}async getCommitteeInfo(n){return await this.transport.request({method:"suix_getCommitteeInfo",params:[n?.epoch]})}async getNetworkMetrics(){return await this.transport.request({method:"suix_getNetworkMetrics",params:[]})}async getAddressMetrics(){return await this.transport.request({method:"suix_getLatestAddressMetrics",params:[]})}async getEpochMetrics(n){return await this.transport.request({method:"suix_getEpochMetrics",params:[n?.cursor,n?.limit,n?.descendingOrder]})}async getAllEpochAddressMetrics(n){return await this.transport.request({method:"suix_getAllEpochAddressMetrics",params:[n?.descendingOrder]})}async getEpochs(n){return await this.transport.request({method:"suix_getEpochs",params:[n?.cursor,n?.limit,n?.descendingOrder]})}async getMoveCallMetrics(){return await this.transport.request({method:"suix_getMoveCallMetrics",params:[]})}async getCurrentEpoch(){return await this.transport.request({method:"suix_getCurrentEpoch",params:[]})}async getValidatorsApy(){return await this.transport.request({method:"suix_getValidatorsApy",params:[]})}async getChainIdentifier(){let n=await this.getCheckpoint({id:"0"}),i=(0,Ot.fromBase58)(n.digest);return(0,Ot.toHex)(i.slice(0,4))}async resolveNameServiceAddress(n){return await this.transport.request({method:"suix_resolveNameServiceAddress",params:[n.name]})}async resolveNameServiceNames({format:n="dot",...i}){let{nextCursor:r,hasNextPage:o,data:s}=await this.transport.request({method:"suix_resolveNameServiceNames",params:[i.address,i.cursor,i.limit]});return{hasNextPage:o,nextCursor:r,data:s.map(d=>Sd(d,n))}}async getProtocolConfig(n){return await this.transport.request({method:"sui_getProtocolConfig",params:[n?.version]})}async waitForTransaction({signal:n,timeout:i=60*1e3,pollInterval:r=2*1e3,...o}){let s=AbortSignal.timeout(i),d=new Promise((c,g)=>{s.addEventListener("abort",()=>g(s.reason))});for(d.catch(()=>{});!s.aborted;){n?.throwIfAborted();try{return await this.getTransactionBlock(o)}catch{await Promise.race([new Promise(g=>setTimeout(g,r)),d])}}throw s.throwIfAborted(),new Error("Unexpected error while waiting for transaction block.")}};var er=require("big.js");var ds=ce(cn());var Kt=ce(cn());fe();function oc(a,n,i){return a.moveCall({target:`${Kt.PUBLISHED_AT}::bridge_interface::swap`,typeArguments:n,arguments:[P(a,i.bridge),P(a,i.coin),it(a,i.receiveAmountMin,"u64")]})}function sc(a,n,i){return a.moveCall({target:`${Kt.PUBLISHED_AT}::bridge_interface::deposit`,typeArguments:[n],arguments:[P(a,i.bridge),P(a,i.userDeposit),P(a,i.coin)]})}function dc(a,n,i){return a.moveCall({target:`${Kt.PUBLISHED_AT}::bridge_interface::withdraw`,typeArguments:[n],arguments:[P(a,i.bridge),P(a,i.userDeposit),it(a,i.amountLp,"u64")]})}function cc(a,n,i){return a.moveCall({target:`${Kt.PUBLISHED_AT}::bridge_interface::claim_reward`,typeArguments:[n],arguments:[P(a,i.bridge),P(a,i.userDeposit)]})}function gc(a,n,i){return a.moveCall({target:`${Kt.PUBLISHED_AT}::bridge_interface::pool`,typeArguments:[n],arguments:[P(a,i)]})}function es(a,n,i){return a.moveCall({target:`${Kt.PUBLISHED_AT}::bridge_interface::swap_and_bridge_wormhole`,typeArguments:[n],arguments:[P(a,i.bridge),P(a,i.messenger),P(a,i.wormholeState),P(a,i.theClock),P(a,i.gasOracle),P(a,i.amount),P(a,i.recipient),it(a,i.destinationChainId,"u8"),P(a,i.receiveToken),it(a,i.nonce,"u256"),P(a,i.feeSuiCoin),P(a,i.feeTokenCoin)]})}function Ac(a,n){return a.moveCall({target:`${Kt.PUBLISHED_AT}::bridge_interface::new_user_deposit`,typeArguments:[n],arguments:[]})}function ts(a,n,i){return a.moveCall({target:`${Kt.PUBLISHED_AT}::bridge_interface::swap_and_bridge`,typeArguments:[n],arguments:[P(a,i.bridge),P(a,i.messenger),P(a,i.gasOracle),P(a,i.amount),P(a,i.recipient),it(a,i.destinationChainId,"u8"),P(a,i.receiveToken),it(a,i.nonce,"u256"),P(a,i.feeSuiCoin),P(a,i.feeTokenCoin)]})}var yc=ce(is());var uc=ce(is());fe();function as(a,n,i){return a.moveCall({target:`${uc.PUBLISHED_AT}::cctp_bridge_interface::bridge`,typeArguments:[n],arguments:[P(a,i.cctpBridge),P(a,i.gasOracle),P(a,i.tokenMessengerMinterState),P(a,i.messageTransmitterState),P(a,i.treasury),P(a,i.denyList),P(a,i.amount),P(a,i.feeSuiCoin),P(a,i.feeTokenCoin),it(a,i.destinationChainId,"u8"),P(a,i.recipient),P(a,i.recipientWalletAddress)]})}var Cc=ce(os());var bc=ce(os());Re();fe();Re();fe();var ss=class a{__VectorClass=!0;static $typeName="vector";static $numTypeParams=1;static $isPhantom=[!1];$typeName="vector";$fullTypeName;$typeArgs;$isPhantom=[!1];elements;constructor(n,i){this.$fullTypeName=$(this.$typeName,...n),this.$typeArgs=n,this.elements=i}static reified(n){return{typeName:a.$typeName,fullTypeName:$(a.$typeName,L(n)),typeArgs:[L(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs(Ki(n)),fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),new:i=>new a([L(n)],i),kind:"VectorClassReified"}}static get r(){return a.reified}static get bcs(){return v.vector}static fromFields(n,i){return a.reified(n).new(i.map(r=>K(n,r)))}static fromFieldsWithTypes(n,i){return a.reified(n).new(i.map(r=>J(n,r)))}static fromBcs(n,i){return a.fromFields(n,a.bcs(Ki(n)).parse(i))}toJSONField(){return this.elements.map(n=>Bn(this.$typeArgs[0],n))}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,elements:this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new(i.map(r=>z(n,r)))}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a vector json object");return a.fromJSONField(n,i.elements)}};function Dn(a){return ss.r(a)}function le(a){return typeof a=="string"?{phantomType:a,kind:"PhantomReified"}:{phantomType:a.fullTypeName,kind:"PhantomReified"}}var ll=v.bytes(32).transform({input:a=>(0,E.fromHEX)(a),output:a=>(0,E.toHEX)(a)});function Ki(a){switch(a){case"bool":return v.bool();case"u8":return v.u8();case"u16":return v.u16();case"u32":return v.u32();case"u64":return v.u64();case"u128":return v.u128();case"u256":return v.u256();case"address":return ll;default:return a.bcs}}function L(a){switch(a){case"u8":case"u16":case"u32":case"u64":case"u128":case"u256":case"bool":case"address":return a}switch(a.kind){case"PhantomReified":return a.phantomType;case"StructClassReified":return a.fullTypeName;case"VectorClassReified":return a.fullTypeName}throw new Error("unreachable")}function K(a,n){switch(a){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return`0x${n}`}if(a.kind==="VectorClassReified")return a.fromFields(n).elements;switch(a.typeName){case"0x1::string::String":case"0x1::ascii::String":return new TextDecoder().decode(Uint8Array.from(n.bytes)).toString();case"0x2::url::Url":return new TextDecoder().decode(Uint8Array.from(n.url.bytes)).toString();case"0x2::object::ID":return`0x${n.bytes}`;case"0x2::object::UID":return`0x${n.id.bytes}`;case"0x1::option::Option":return n.vec.length===0?null:a.fromFields(n).vec[0];default:return a.fromFields(n)}}function J(a,n){switch(a){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return n}if(a.kind==="VectorClassReified")return a.fromFieldsWithTypes(n).elements;switch(a.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":return n;case"0x2::object::UID":return n.id;case"0x2::balance::Balance":return a.fromFields({value:BigInt(n)});case"0x1::option::Option":return n===null?null:J(a.reifiedTypeArgs[0],n);default:return a.fromFieldsWithTypes(n)}}function ht(a,n,i){if(i.length!==n.length)throw new Error(`provided item has mismatching number of type argments ${a} (expected ${i.length}, got ${n.length}))`);for(let r=0;r<n.length;r++)if(S(n[r])!==S(L(i[r])))throw new Error(`provided item has mismatching type argments ${a} (expected ${L(i[r])}, got ${n[r]}))`)}function Zt(a,n){let{typeArgs:i}=Ge(a.type);ht(a.type,i,n)}function Bn(a,n){let{typeName:i,typeArgs:r}=Ge(a);switch(i){case"bool":return n;case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return n.toString();case"address":case"signer":return n;case"vector":return n.map(o=>Bn(r[0],o));case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return n;case"0x1::option::Option":return n===null?null:Bn(r[0],n);default:return n.toJSONField()}}function z(a,n){switch(a){case"bool":case"u8":case"u16":case"u32":return n;case"u64":case"u128":case"u256":return BigInt(n);case"address":return n}if(a.kind==="VectorClassReified")return a.fromJSONField(n).elements;switch(a.typeName){case"0x1::string::String":case"0x1::ascii::String":case"0x2::url::Url":case"0x2::object::ID":case"0x2::object::UID":return n;case"0x1::option::Option":return n===null?null:z(a.reifiedTypeArgs[0],n);default:return a.fromJSONField(n)}}fe();var Da="0x1";fe();Re();function Ea(a){return a=S(a),a===`${Da}::string::String`}var _a=class a{__StructClass=!0;static get $typeName(){return`${Da}::string::String`}static $numTypeParams=0;static $isPhantom=[];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;bytes;constructor(n,i){this.$fullTypeName=$(a.$typeName,...n),this.$typeArgs=n,this.bytes=i.bytes}static reified(){return{typeName:a.$typeName,fullTypeName:$(a.$typeName),typeArgs:[],isPhantom:a.$isPhantom,reifiedTypeArgs:[],fromFields:n=>a.fromFields(n),fromFieldsWithTypes:n=>a.fromFieldsWithTypes(n),fromBcs:n=>a.fromBcs(n),bcs:a.bcs,fromJSONField:n=>a.fromJSONField(n),fromJSON:n=>a.fromJSON(n),fromSuiParsedData:n=>a.fromSuiParsedData(n),fromSuiObjectData:n=>a.fromSuiObjectData(n),fetch:async(n,i)=>a.fetch(n,i),new:n=>new a([],n),kind:"StructClassReified"}}static get r(){return a.reified()}static phantom(){return le(a.reified())}static get p(){return a.phantom()}static get bcs(){return v.struct("String",{bytes:v.vector(v.u8())})}static fromFields(n){return a.reified().new({bytes:K(Dn("u8"),n.bytes)})}static fromFieldsWithTypes(n){if(!Ea(n.type))throw new Error("not a String type");return a.reified().new({bytes:J(Dn("u8"),n.fields.bytes)})}static fromBcs(n){return a.fromFields(a.bcs.parse(n))}toJSONField(){return{bytes:Bn("vector<u8>",this.bytes)}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return a.reified().new({bytes:z(Dn("u8"),n.bytes)})}static fromJSON(n){if(n.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return a.fromJSONField(n)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!Ea(n.type))throw new Error(`object at ${n.fields.id} is not a String object`);return a.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!Ea(n.bcs.type))throw new Error("object at is not a String object");return a.fromBcs((0,E.fromB64)(n.bcs.bcsBytes))}if(n.content)return a.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i){let r=await n.getObject({id:i,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching String object at id ${i}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!Ea(r.data.bcs.type))throw new Error(`object at id ${i} is not a String object`);return a.fromSuiObjectData(r.data)}};fe();fe();var gn="0x2";Re();function $a(a){return a=S(a),a===`${gn}::object::ID`}var Wn=class a{__StructClass=!0;static get $typeName(){return`${gn}::object::ID`}static $numTypeParams=0;static $isPhantom=[];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;bytes;constructor(n,i){this.$fullTypeName=$(a.$typeName,...n),this.$typeArgs=n,this.bytes=i.bytes}static reified(){return{typeName:a.$typeName,fullTypeName:$(a.$typeName),typeArgs:[],isPhantom:a.$isPhantom,reifiedTypeArgs:[],fromFields:n=>a.fromFields(n),fromFieldsWithTypes:n=>a.fromFieldsWithTypes(n),fromBcs:n=>a.fromBcs(n),bcs:a.bcs,fromJSONField:n=>a.fromJSONField(n),fromJSON:n=>a.fromJSON(n),fromSuiParsedData:n=>a.fromSuiParsedData(n),fromSuiObjectData:n=>a.fromSuiObjectData(n),fetch:async(n,i)=>a.fetch(n,i),new:n=>new a([],n),kind:"StructClassReified"}}static get r(){return a.reified()}static phantom(){return le(a.reified())}static get p(){return a.phantom()}static get bcs(){return v.struct("ID",{bytes:v.bytes(32).transform({input:n=>(0,E.fromHEX)(n),output:n=>(0,E.toHEX)(n)})})}static fromFields(n){return a.reified().new({bytes:K("address",n.bytes)})}static fromFieldsWithTypes(n){if(!$a(n.type))throw new Error("not a ID type");return a.reified().new({bytes:J("address",n.fields.bytes)})}static fromBcs(n){return a.fromFields(a.bcs.parse(n))}toJSONField(){return{bytes:this.bytes}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return a.reified().new({bytes:z("address",n.bytes)})}static fromJSON(n){if(n.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return a.fromJSONField(n)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!$a(n.type))throw new Error(`object at ${n.fields.id} is not a ID object`);return a.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!$a(n.bcs.type))throw new Error("object at is not a ID object");return a.fromBcs((0,E.fromB64)(n.bcs.bcsBytes))}if(n.content)return a.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i){let r=await n.getObject({id:i,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching ID object at id ${i}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!$a(r.data.bcs.type))throw new Error(`object at id ${i} is not a ID object`);return a.fromSuiObjectData(r.data)}};function qa(a){return a=S(a),a===`${gn}::object::UID`}var at=class a{__StructClass=!0;static get $typeName(){return`${gn}::object::UID`}static $numTypeParams=0;static $isPhantom=[];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;id;constructor(n,i){this.$fullTypeName=$(a.$typeName,...n),this.$typeArgs=n,this.id=i.id}static reified(){return{typeName:a.$typeName,fullTypeName:$(a.$typeName),typeArgs:[],isPhantom:a.$isPhantom,reifiedTypeArgs:[],fromFields:n=>a.fromFields(n),fromFieldsWithTypes:n=>a.fromFieldsWithTypes(n),fromBcs:n=>a.fromBcs(n),bcs:a.bcs,fromJSONField:n=>a.fromJSONField(n),fromJSON:n=>a.fromJSON(n),fromSuiParsedData:n=>a.fromSuiParsedData(n),fromSuiObjectData:n=>a.fromSuiObjectData(n),fetch:async(n,i)=>a.fetch(n,i),new:n=>new a([],n),kind:"StructClassReified"}}static get r(){return a.reified()}static phantom(){return le(a.reified())}static get p(){return a.phantom()}static get bcs(){return v.struct("UID",{id:Wn.bcs})}static fromFields(n){return a.reified().new({id:K(Wn.reified(),n.id)})}static fromFieldsWithTypes(n){if(!qa(n.type))throw new Error("not a UID type");return a.reified().new({id:J(Wn.reified(),n.fields.id)})}static fromBcs(n){return a.fromFields(a.bcs.parse(n))}toJSONField(){return{id:this.id}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n){return a.reified().new({id:z(Wn.reified(),n.id)})}static fromJSON(n){if(n.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return a.fromJSONField(n)}static fromSuiParsedData(n){if(n.dataType!=="moveObject")throw new Error("not an object");if(!qa(n.type))throw new Error(`object at ${n.fields.id} is not a UID object`);return a.fromFieldsWithTypes(n)}static fromSuiObjectData(n){if(n.bcs){if(n.bcs.dataType!=="moveObject"||!qa(n.bcs.type))throw new Error("object at is not a UID object");return a.fromBcs((0,E.fromB64)(n.bcs.bcsBytes))}if(n.content)return a.fromSuiParsedData(n.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i){let r=await n.getObject({id:i,options:{showBcs:!0}});if(r.error)throw new Error(`error fetching UID object at id ${i}: ${r.error.code}`);if(r.data?.bcs?.dataType!=="moveObject"||!qa(r.data.bcs.type))throw new Error(`object at id ${i} is not a UID object`);return a.fromSuiObjectData(r.data)}};function vt(a,n){return a.moveCall({target:`${bc.PUBLISHED_AT}::bytes32::from_hex`,arguments:[it(a,n,`${_a.$typeName}`)]})}async function St(a,n,i=[]){let r=await a(n),o=i.concat(r.data);return r.hasNextPage&&r.nextCursor?St(a,r.nextCursor,o):o}var En=class extends ve{constructor(i,r){super();this.nodeRpcUrlsConfig=i;this.api=r;this.client=new Ut({url:i.getNodeRpcUrl(this.chainSymbol)})}chainType="SUI";chainSymbol="SUI";client;send(){throw new h("Method send not implemented.")}async buildRawTransactionSwap(i){let r=i.sourceToken.suiAddresses;if(!r)throw new h("SUI token must contain 'suiAddresses'");(0,ds.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin);let o=He(this.chainType,i);return await this.buildRawTransactionSwapFromParams(o,r)}async buildRawTransactionSwapFromParams(i,r){let{amount:o,fromAccountAddress:s,fromTokenAddress:d,toTokenAddress:c,minimumReceiveAmount:g}=i,A=new Gt;A.setSender(s);let l={bridge:r.bridgeObjectAddress,coin:re({balance:BigInt(o),type:d}),receiveAmountMin:BigInt(g)},u=oc(A,[d,c],l),b=await St(C=>this.client.getCoins({owner:i.toAccountAddress,coinType:c,cursor:C}));return b.length===0||!b[0]?A.transferObjects([u],i.toAccountAddress):A.mergeCoins(b[0].coinObjectId,[u]),await A.toJSON({client:this.client})}async buildRawTransactionSendFromCustomTx(i,r,o){let s=Gt.from(i);return this.buildRawTransactionSendFromTx(o,s,r)}async buildRawTransactionSend(i){return this.buildRawTransactionSendFromTx(i,new Gt)}async buildRawTransactionSendFromTx(i,r,o){let s=await Pe(this.chainType,i,this.api),{messenger:d}=s,c=i.sourceToken.suiAddresses;if(!c)throw new h("SUI token must contain 'suiAddresses'");switch((0,ds.setAddress)(c.bridgeAddress,c.bridgeAddressOrigin),(0,Cc.setAddress)(c.utilsAddress),d){case 1:return this.buildRawTransactionAllbridgeSend(s,c,r,o);case 2:return this.buildRawTransactionWormholeSend(s,c,r,o);case 3:case 4:return this.buildRawTransactionCctpSend(i,s,c,r,o);case 5:throw new Te("Messenger OFT is not supported yet.")}}async buildRawTransactionAllbridgeSend(i,r,o,s){let{amount:d,fromAccountAddress:c,fromTokenAddress:g,toChainId:A,toAccountAddress:l,toTokenAddress:u,fee:b,gasFeePaymentMethod:C,extraGas:Y}=i,W=b;switch(Y&&(W=(0,er.Big)(W).plus(Y).toFixed()),o.setSender(c),C){case"native":{let F=W==="0"?re({balance:BigInt(W),useGasCoin:!1}):re({balance:BigInt(W)}),w={bridge:r.bridgeObjectAddress,messenger:r.allbridgeMessengerObjectAddress,amount:s??re({balance:BigInt(d),type:g}),destinationChainId:A,nonce:Nt(),recipient:vt(o,ct(l)),receiveToken:vt(o,ct(u)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:re({balance:BigInt(0),type:g}),feeSuiCoin:F};ts(o,g,w);break}case"stablecoin":{let F=BigInt(d)-BigInt(W),w,R;if(s){let[V]=o.splitCoins(s,[W]);w=s,R=V}else w=re({balance:F,type:g}),R=re({balance:BigInt(W),type:g});let G={bridge:r.bridgeObjectAddress,messenger:r.allbridgeMessengerObjectAddress,amount:w,destinationChainId:A,nonce:Nt(),recipient:vt(o,ct(l)),receiveToken:vt(o,ct(u)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:R,feeSuiCoin:re({balance:BigInt(0),useGasCoin:!1})};ts(o,g,G);break}case"abr":throw new h("SUI bridge does not support ARB0 payment method");default:return se(C,"Unhandled FeePaymentMethod")}return await o.toJSON({client:this.client})}async buildRawTransactionWormholeSend(i,r,o,s){let{amount:d,fromAccountAddress:c,fromTokenAddress:g,toChainId:A,toAccountAddress:l,toTokenAddress:u,fee:b,gasFeePaymentMethod:C,extraGas:Y}=i,W=b;switch(Y&&(W=(0,er.Big)(W).plus(Y).toFixed()),o.setSender(c),C){case"native":{let F=W==="0"?re({balance:BigInt(W),useGasCoin:!1}):re({balance:BigInt(W)}),w={bridge:r.bridgeObjectAddress,messenger:r.wormholeMessengerObjectAddress,wormholeState:r.wormholeStateObjectAddress,theClock:za,amount:s??re({balance:BigInt(d),type:g}),destinationChainId:A,nonce:Nt(),recipient:vt(o,ct(l)),receiveToken:vt(o,ct(u)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:re({balance:BigInt(0),type:g}),feeSuiCoin:F};es(o,g,w);break}case"stablecoin":{let F=BigInt(d)-BigInt(W),w,R;if(s){let[V]=o.splitCoins(s,[W]);w=s,R=V}else w=re({balance:F,type:g}),R=re({balance:BigInt(W),type:g});let G={bridge:r.bridgeObjectAddress,messenger:r.wormholeMessengerObjectAddress,wormholeState:r.wormholeStateObjectAddress,theClock:za,amount:w,destinationChainId:A,nonce:Nt(),recipient:vt(o,ct(l)),receiveToken:vt(o,ct(u)),gasOracle:r.gasOracleObjectAddress,feeTokenCoin:R,feeSuiCoin:re({balance:BigInt(0),useGasCoin:!1})};es(o,g,G);break}case"abr":throw new h("SUI bridge does not support ARB0 payment method");default:return se(C,"Unhandled FeePaymentMethod")}return await o.toJSON({client:this.client})}async buildRawTransactionCctpSend(i,r,o,s,d){let{amount:c,fromAccountAddress:g,fromTokenAddress:A,toChainId:l,toAccountAddress:u,fee:b,gasFeePaymentMethod:C,extraGas:Y}=r;(0,yc.setAddress)(o.cctpAddress,o.cctpAddressOrigin);let W=b;Y&&(W=(0,er.Big)(W).plus(Y).toFixed()),s.setSender(g);let F=vt(s,ct(u)),w;if(i.destinationToken.chainType==="SOLANA"){let R=await Ya(this.chainType,i.toAccountAddress,i.destinationToken.tokenAddress,this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"));w=vt(s,ct(R))}else w=F;switch(C){case"native":{let R=W==="0"?re({balance:BigInt(W),useGasCoin:!1}):re({balance:BigInt(W)}),G={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:d??re({balance:BigInt(c),type:A}),destinationChainId:l,recipient:w,recipientWalletAddress:F,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:re({balance:BigInt(0),type:A}),feeSuiCoin:R};as(s,A,G);break}case"stablecoin":{let R=BigInt(c)-BigInt(W),G,V;if(d){let[Z]=s.splitCoins(d,[W]);G=d,V=Z}else G=re({balance:R,type:A}),V=re({balance:BigInt(W),type:A});let x={cctpBridge:o.cctpObjectAddress,tokenMessengerMinterState:o.cctpTokenMessengerMinterStateObjectAddress,messageTransmitterState:o.cctpMessageTransmitterStateObjectAddress,treasury:o.cctpTreasuryObjectAddress,denyList:o.cctpDenyListObjectAddress,amount:G,destinationChainId:l,recipient:w,recipientWalletAddress:F,gasOracle:o.gasOracleObjectAddress,feeTokenCoin:V,feeSuiCoin:re({balance:BigInt(0),useGasCoin:!1})};as(s,A,x);break}case"abr":throw new h("SUI bridge does not support ARB0 payment method");default:return se(C,"Unhandled FeePaymentMethod")}return await s.toJSON({client:this.client})}};var vc=require("big.js");var Ic=ce(require("bn.js"));function tr(a){return"0x"+new Ic.default(a).toString("hex")}function hc(a){return new Promise(n=>setTimeout(()=>n(),a))}async function nr(a,n){let i=await a.trx.sign(n);if(!i.signature)throw new un("Transaction was not signed properly");let o=(await a.trx.sendRawTransaction(i)).transaction.txID;return await ul(a,o),{txId:o}}async function ul(a,n,i=1e4){let r=Date.now();for(;;){if(Date.now()-r>i)throw new Sn("Transaction not found");let o=await a.trx.getUnconfirmedTransactionInfo(n);if(!o?.receipt){await hc(2e3);continue}if(o.receipt.result==="SUCCESS")return o;throw new Sn(`Transaction status is ${o.receipt.result}`)}}var Qi=class extends ve{constructor(i,r){super();this.tronWeb=i;this.api=r}chainType="TRX";async send(i){let r=await Pe(this.chainType,i,this.api),o=await this.buildRawTransactionSendFromParams(i,r);return await nr(this.tronWeb,o)}async buildRawTransactionSwap(i){let r=He(this.chainType,i);return await this.buildRawTransactionSwapFromParams(r)}async buildRawTransactionSwapFromParams(i){let{amount:r,contractAddress:o,fromAccountAddress:s,fromTokenAddress:d,toAccountAddress:c,toTokenAddress:g,minimumReceiveAmount:A}=i,l=[{type:"uint256",value:r},{type:"bytes32",value:d},{type:"bytes32",value:g},{type:"address",value:c},{type:"uint256",value:A}];return this.buildRawTransaction(o,"swap(uint256,bytes32,bytes32,address,uint256)",l,"0",s)}async buildRawTransactionSend(i){let r=await Pe(this.chainType,i,this.api);return this.buildRawTransactionSendFromParams(i,r)}async buildRawTransactionSendFromParams(i,r){let{amount:o,contractAddress:s,fromAccountAddress:d,fromTokenAddress:c,toChainId:g,toAccountAddress:A,toTokenAddress:l,messenger:u,fee:b,gasFeePaymentMethod:C,extraGas:Y,extraGasDest:W}=r,F=b;Y&&(F=(0,vc.Big)(F).plus(Y).toFixed());let w=Nt().toString(),R,G,V;switch(u){case 3:case 4:switch(C){case"native":{R=[{type:"uint256",value:o},{type:"bytes32",value:A},{type:"uint256",value:g},{type:"uint256",value:0}],G=F;break}case"stablecoin":{R=[{type:"uint256",value:o},{type:"bytes32",value:A},{type:"uint256",value:g},{type:"uint256",value:F}],G="0";break}case"abr":throw new h("TRX bridge does not support ARB0 payment method");default:return se(C,"Unhandled FeePaymentMethod")}V="bridge(uint256,bytes32,uint256,uint256)";break;case 5:switch(C){case"native":{R=[{type:"address",value:i.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:A},{type:"uint256",value:g},{type:"uint256",value:0},{type:"uint256",value:W??"0"},{type:"uint256",value:"10"}],G=F;break}case"stablecoin":{R=[{type:"address",value:i.sourceToken.tokenAddress},{type:"uint256",value:o},{type:"bytes32",value:A},{type:"uint256",value:g},{type:"uint256",value:F},{type:"uint256",value:W??"0"},{type:"uint256",value:"10"}],G="0";break}case"abr":throw new h("TRX bridge does not support ARB0 payment method");default:return se(C,"Unhandled FeePaymentMethod")}V="bridge(address,uint256,bytes32,uint256,uint256,uint256,uint256)";break;case 1:case 2:switch(C){case"native":{R=[{type:"bytes32",value:c},{type:"uint256",value:o},{type:"bytes32",value:A},{type:"uint256",value:g},{type:"bytes32",value:l},{type:"uint256",value:w},{type:"uint8",value:u},{type:"uint256",value:0}],G=F;break}case"stablecoin":{R=[{type:"bytes32",value:c},{type:"uint256",value:o},{type:"bytes32",value:A},{type:"uint256",value:g},{type:"bytes32",value:l},{type:"uint256",value:w},{type:"uint8",value:u},{type:"uint256",value:F}],G="0";break}case"abr":throw new h("TRX bridge does not support ARB0 payment method");default:return se(C,"Unhandled FeePaymentMethod")}V="swapAndBridge(bytes32,uint256,bytes32,uint256,bytes32,uint256,uint8,uint256)";break}return this.buildRawTransaction(s,V,R,G,d)}async buildRawTransaction(i,r,o,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(i,r,{callValue:+s},o,d);if(!c?.result?.result)throw new h("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}};var ir=class{constructor(n,i,r,o){this.api=n;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=o;this.rawTxBuilder=new Ba(n,i,r,o)}rawTxBuilder;async getAllowance(n,i){let r,o;i?(r=n,o=i):o=n;let s=Ni(o.token,o.messenger,o.gasFeePaymentMethod);return await this.tokenService.getAllowance({...o,spender:s},r)}async checkAllowance(n,i){let r,o;i?(r=n,o=i):o=n;let s=Ni(o.token,o.messenger,o.gasFeePaymentMethod);return this.tokenService.checkAllowance({...o,spender:s},r)}async approve(n,i){let r=Ni(i.token,i.messenger,i.gasFeePaymentMethod);return this.tokenService.approve(n,{...i,spender:r})}async send(n,i){return Q(i.amount),O("amount",i.amount,i.sourceToken.decimals),Wa(i.sourceToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,n).send(i)}};function Ni(a,n=1,i="native"){if(i==="abr"){if(a.abrPayer)return a.abrPayer.payerAddress;throw new h("Token must contain 'abrPayer' for ARB0 payment method")}switch(n){case 3:if(a.cctpAddress)return a.cctpAddress;throw new We("Such route does not support CCTP protocol");case 4:if(a.cctpV2Address)return a.cctpV2Address;throw new We("Such route does not support CCTP V2 protocol");case 5:if(a.oftBridgeAddress)return a.oftBridgeAddress;throw new Te("Such route does not support OFT protocol");case 1:case 2:return a.bridgeAddress}}function Wa(a,n,i,r,o){switch(k.getChainProperty(a).chainType){case"EVM":{if(o)return new Fi(o,n,i);{let s=i.getNodeRpcUrl(a);return new Fi(new fc.Web3(s),n,i)}}case"TRX":{if(o)return new Qi(o,n);{let s=i.getNodeRpcUrl(a);return new Qi(new Rc.TronWeb({fullHost:s,solidityNode:s,eventServer:s}),n)}}case"SOLANA":return new Na(i.getNodeRpcUrl("SOL"),{wormholeMessengerProgramId:r.wormholeMessengerProgramId,solanaLookUpTable:r.solanaLookUpTable,cctpParams:r.cctpParams,jupiterParams:{jupiterUrl:r.jupiterUrl,jupiterApiKeyHeader:r.jupiterApiKeyHeader,jupiterMaxAccounts:r.jupiterMaxAccounts}},n);case"SRB":return new Ga(i,r,n);case"SUI":return new En(i,n);case"ALG":if(o){let s=o,d=cs.AlgorandClient.fromClients({algod:s});return new Wi(d,n)}else{let s=i.getNodeRpcUrl(a),d=cs.AlgorandClient.fromConfig({algodConfig:{server:s}});return new Wi(d,n)}case"STX":{let s=i.getNodeRpcUrl(a);return new Za(s,r,n)}}}var ys=require("@algorandfoundation/algokit-utils"),Mc=require("big.js");var pl=(a,n)=>a!==null&&Object.prototype.hasOwnProperty.call(a,n),Yc="__cache__",gs=function(a){return typeof a!="string"?Yc+JSON.stringify(a):Yc+a},As=class{constructor(n={defaultTtl:60*1e3}){this.cache={},this.defaultTtl=n.defaultTtl||60*1e3}put(n,i,r){let o=(r?r.ttl:void 0)||this.defaultTtl,s=(r?r.callback:void 0)||function(){},d=gs(n),c=this.cache[d];c&&clearTimeout(c.handle);let g=setTimeout(()=>this.remove(n),o);this.cache[d]={handle:g,data:i,callback:s}}get(n){let i=this.cache[gs(n)];return i&&i.data}remove(n){let i=gs(n),r=this.cache[i];r&&(clearTimeout(r.handle),delete this.cache[i],r.callback(n,r.data))}clear(){for(let n in this.cache)pl(this.cache,n)&&clearTimeout(this.cache[n].handle);this.cache={}}size(){return Object.keys(this.cache).length}},Qt=As;var Pc=require("tronweb"),ti=require("web3");var Vt=require("big.js");function Bc(a,n,i,r,o){let s=X(a,3),d=(0,Vt.Big)(s),c=(0,Vt.Big)(i),g=(0,Vt.Big)(r).plus(o),A,l;if(c.eq(0)||g.eq(0)){let b=d.div(2);A=(0,Vt.Big)(r).plus(b),l=(0,Vt.Big)(o).plus(b)}else A=(0,Vt.Big)(r).plus(d.mul(r).div(g)),l=(0,Vt.Big)(o).plus(d.mul(o).div(g));return(0,Vt.Big)(Ms(n,A.toFixed(),l.toFixed())).minus(c).toFixed()}function Wc(a){let n=X(a,3);return(0,Vt.Big)(n).round().toFixed()}var Dt=require("algosdk");var Tc=require("@algorandfoundation/algokit-utils/types/app-arc56"),Di=require("@algorandfoundation/algokit-utils/types/app-client"),ml=require("@algorandfoundation/algokit-utils/types/app-factory"),Fc=require("algosdk"),ar={name:"Pool",structs:{},methods:[{name:"createApplication",args:[{type:"address",name:"owner"},{type:"address",name:"router"},{type:"uint64",name:"a"},{type:"uint64",name:"asset"},{type:"uint64",name:"feeShareBP"},{type:"uint64",name:"balanceRatioMinBP"}],returns:{type:"void"},actions:{create:["NoOp"],call:[]},readonly:!1,events:[],recommendations:{}},{name:"optInToApplication",args:[],returns:{type:"void"},actions:{create:[],call:["OptIn"]},readonly:!1,events:[],recommendations:{}},{name:"closeOutOfApplication",args:[{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["CloseOut"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"optInAsset",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,desc:"Opt-in the application account to the ASA stored in `this.asset`.\nThis performs an inner axfer of 0 to the app's own address.\nCall once after deploy (or whenever you change the asset).",events:[],recommendations:{}},{name:"deposit",args:[{type:"axfer",name:"assetTransferRef"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp","OptIn"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"withdraw",args:[{type:"uint64",name:"amountLp",desc:"The Withdrawn amount"},{type:"uint64",name:"budget",defaultValue:{source:"literal",data:"AAAAAAAAC7g=",type:"uint64"}}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"swapToVUsd",args:[{type:"address",name:"user",desc:"The address of the sender."},{type:"uint64",name:"amount",desc:"The amount of tokens to swap."},{type:"bool",name:"zeroFee",desc:`When true it allows to swap without incurring any fees. It is intended for use with service
2
2
  accounts.`}],returns:{type:"uint64",desc:"returns the difference between the old and the new value of vUsdBalance"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"SwappedToVUsd",args:[{type:"address",name:"sender"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"fee"}]}],recommendations:{}},{name:"swapFromVUsd",args:[{type:"address",name:"user",desc:"The address of the recipient."},{type:"uint64",name:"amount",desc:"The amount of vUSD to swap."},{type:"uint64",name:"receiveAmountMin",desc:`The minimum amount of tokens required to be received during the swap, otherwise the
3
3
  transaction reverts.`},{type:"bool",name:"zeroFee",desc:`When true it allows to swap without incurring any fees. It is intended for use with service
4
4
  accounts.`}],returns:{type:"uint64",desc:"returns the difference between the old and the new value of vUsdBalance"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"SwappedFromVUsd",args:[{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"amount"},{type:"uint64",name:"fee"}]}],recommendations:{}},{name:"setFeeShare",args:[{type:"uint64",name:"feeShareBP"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"adjustTotalLpAmount",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]}],recommendations:{}},{name:"setBalanceRatioMinBP",args:[{type:"uint64",name:"balanceRatioMinBP"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopDeposit",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startDeposit",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"stopWithdraw",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"startWithdraw",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setStopAuthority",args:[{type:"address",name:"stopAuthority"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"setRouter",args:[{type:"address",name:"router"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"claimRewards",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]}],recommendations:{}},{name:"setAdminFeeShare",args:[{type:"uint64",name:"adminFeeShareBP"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"claimAdminFee",args:[],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}},{name:"pendingReward",args:[{type:"address",name:"user"}],returns:{type:"uint64"},actions:{create:[],call:["NoOp"]},readonly:!0,events:[],recommendations:{}},{name:"transferOwnership",args:[{type:"address",name:"newOwner"}],returns:{type:"void"},actions:{create:[],call:["NoOp"]},readonly:!1,events:[],recommendations:{}}],arcs:[22,28],desc:`4AD - D = 4A(x + y) - (D\xB3 / 4xy)
5
5
  X - is value of real stable token
6
- Y - is value of virtual usd`,networks:{},state:{schema:{global:{ints:15,bytes:4},local:{ints:2,bytes:0}},keys:{global:{feeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"ZmVlU2hhcmVCUA=="},router:{keyType:"AVMString",valueType:"address",key:"cm91dGVy"},tokenBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5CYWxhbmNl"},vUsdBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dlVzZEJhbGFuY2U="},balanceRatioMinBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZVJhdGlvTWluQlA="},reserves:{keyType:"AVMString",valueType:"AVMUint64",key:"cmVzZXJ2ZXM="},a:{keyType:"AVMString",valueType:"AVMUint64",key:"YQ=="},d:{keyType:"AVMString",valueType:"AVMUint64",key:"ZA=="},tokenAmountReduce:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRSZWR1Y2U="},tokenAmountIncrease:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRJbmNyZWFzZQ=="},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},canDeposit:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuRGVwb3NpdA=="},canWithdraw:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuV2l0aGRyYXc="},asset:{keyType:"AVMString",valueType:"AVMUint64",key:"YXNzZXQ="},adminFeeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVTaGFyZUJQ"},totalSupply:{keyType:"AVMString",valueType:"AVMUint64",key:"dG90YWxTdXBwbHk="},accRewardPerShareP:{keyType:"AVMString",valueType:"AVMBytes",key:"YWNjUmV3YXJkUGVyU2hhcmVQ"},adminFeeAmount:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVBbW91bnQ="},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{balance:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZQ=="},userRewardDebt:{keyType:"AVMString",valueType:"AVMUint64",key:"dXNlclJld2FyZERlYnQ="}},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[2040],errorMessage:'"Pool: withdraw prohibited'},{pc:[984],errorMessage:"Asset must go to app"},{pc:[998],errorMessage:"CloseTo not allowed"},{pc:[548],errorMessage:"OnCompletion must be CloseOut && can only call when not creating"},{pc:[372],errorMessage:"OnCompletion must be NoOp"},{pc:[559],errorMessage:"OnCompletion must be OptIn && can only call when not creating"},{pc:[536],errorMessage:"OnCompletion must be one of NoOp, OptIn && can only call when not creating"},{pc:[3277],errorMessage:"Only owner"},{pc:[955],errorMessage:"Pool: deposit prohibited"},{pc:[1959],errorMessage:"Pool: is not stopAuthority"},{pc:[2024],errorMessage:"Pool: low token balance"},{pc:[2e3],errorMessage:"Pool: low vUSD balance"},{pc:[1949],errorMessage:"Pool: only router"},{pc:[1480,2289],errorMessage:"Pool: reserves"},{pc:[1521],errorMessage:"Pool: slippage"},{pc:[1605,1667],errorMessage:"Pool: too large"},{pc:[1008],errorMessage:"Pool: too little"},{pc:[1100],errorMessage:"Pool: too much"},{pc:[2308],errorMessage:"Pool: zero D changes"},{pc:[2278],errorMessage:"Pool: zero changes"},{pc:[991],errorMessage:"Rekey not allowed"},{pc:[855],errorMessage:"RewardManager: claim rewards before close out"},{pc:[2061],errorMessage:"RewardManager: not enough amount"},{pc:[1851],errorMessage:"RewardManager: too high"},{pc:[850],errorMessage:"RewardManager: withdraw LP before close out"},{pc:[977],errorMessage:"Wrong asset"},{pc:[757],errorMessage:"asset exists"},{pc:[750,865,954,966,975,1013,1028,1038,1057,1067,1081,1091,1106,1144,1243,1274,1285,1294,1304,1312,1329,1426,1449,1471,1496,1526,1549,1623,1634,1767,1804,1869,1877,1882,1947,1957,1971,1981,1998,2022,2039,2045,2069,2122,2154,2206,2210,2248,2275,2283,2304,2313,2349,2358,2506,2511,2519,2627,2635,2676,2684,3037,3065,3073,3091,3111,3125,3186,3220,3275],errorMessage:"check GlobalState exists"},{pc:[832,848,1757,1784,2056,2093,2108,3031,3051,3136,3158,3172],errorMessage:"check LocalState exists"},{pc:[1220,1407],errorMessage:"invalid number of bytes for arc4.bool"},{pc:[669,677,1202,1379,1717,1734,1912,1931],errorMessage:"invalid number of bytes for arc4.static_array<arc4.uint8, 32>"},{pc:[685,694,703,712,820,932,1177,1186,1210,1387,1397,1596,1658,1842],errorMessage:"invalid number of bytes for arc4.uint64"},{pc:[2724],errorMessage:"n must be non-negative"},{pc:[1127,1158,2230,2262],errorMessage:"overflow"},{pc:[924],errorMessage:"transaction type is axfer"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMzIgMTAwMDAKICAgIGJ5dGVjYmxvY2sgInRva2VuQmFsYW5jZSIgInZVc2RCYWxhbmNlIiAiYXNzZXQiICJiYWxhbmNlIiAicmVzZXJ2ZXMiICJ1c2VyUmV3YXJkRGVidCIgImQiICJ0b3RhbFN1cHBseSIgImFjY1Jld2FyZFBlclNoYXJlUCIgMHgwMTAwMDAwMDAwMDAwMCAweDAxICJhZG1pbkZlZUFtb3VudCIgImNhbkRlcG9zaXQiICJjYW5XaXRoZHJhdyIgIm93bmVyIiAiZmVlU2hhcmVCUCIgImJhbGFuY2VSYXRpb01pbkJQIiAweDAyICJhZG1pbkZlZVNoYXJlQlAiICJhIiAicm91dGVyIiAic3RvcEF1dGhvcml0eSIgInRva2VuQW1vdW50UmVkdWNlIiAidG9rZW5BbW91bnRJbmNyZWFzZSIgMHgxNTFmN2M3NSAweGJhODE4MDc2IDB4MDMgMHgwNjgxMDEgMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICBwdXNoaW50IDIwMDAgLy8gMjAwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgcHVzaGJ5dGVzIDB4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgcHVzaGJ5dGVzcyAweDAxYTNhM2ZmIDB4MDQ1OWI3YWMgMHg5YjRiODIzNCAvLyBtZXRob2QgIm9wdEluVG9BcHBsaWNhdGlvbigpdm9pZCIsIG1ldGhvZCAiY2xvc2VPdXRPZkFwcGxpY2F0aW9uKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZXBvc2l0KGF4ZmVyLHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANCBtYWluX2Nsb3NlT3V0T2ZBcHBsaWNhdGlvbl9yb3V0ZUA1IG1haW5fZGVwb3NpdF9yb3V0ZUA2CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAyOAogICAgcHVzaGJ5dGVzcyAweDc2MTBhNDYwIDB4ZTNhZWIyNWMgMHhkOTc4YWQxNCAweDBkMWI0YzA2IDB4NzViZjlhMjggMHhmNDkzZDdlZCAweDhkNWNiNmRmIDB4ZmUwNGE1Y2UgMHgwMjhlMDg1OSAweDQxZmM5NjZlIDB4YWJmMjAwMTQgMHgwNGIxNjFmMSAweDY2NTkxY2NmIDB4YTVhZTZiZDEgMHhhMDRjNWJjNCAweDM2MWI2MTU5IDB4NTM4ZTkxMjcgMHhlMTdiYWZiNCAvLyBtZXRob2QgIm9wdEluQXNzZXQoKXZvaWQiLCBtZXRob2QgIndpdGhkcmF3KHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic3dhcEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic2V0RmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImFkanVzdFRvdGFsTHBBbW91bnQoKXZvaWQiLCBtZXRob2QgInNldEJhbGFuY2VSYXRpb01pbkJQKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wRGVwb3NpdCgpdm9pZCIsIG1ldGhvZCAic3RhcnREZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJzdG9wV2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInN0YXJ0V2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInNldFN0b3BBdXRob3JpdHkoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRSb3V0ZXIoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJjbGFpbVJld2FyZHMoKXZvaWQiLCBtZXRob2QgInNldEFkbWluRmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImNsYWltQWRtaW5GZWUoKXZvaWQiLCBtZXRob2QgInBlbmRpbmdSZXdhcmQoYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgInRyYW5zZmVyT3duZXJzaGlwKGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG9wdEluQXNzZXQgd2l0aGRyYXcgc3dhcFRvVlVzZCBzd2FwRnJvbVZVc2Qgc2V0RmVlU2hhcmUgYWRqdXN0VG90YWxMcEFtb3VudCBzZXRCYWxhbmNlUmF0aW9NaW5CUCBzdG9wRGVwb3NpdCBzdGFydERlcG9zaXQgc3RvcFdpdGhkcmF3IHN0YXJ0V2l0aGRyYXcgc2V0U3RvcEF1dGhvcml0eSBzZXRSb3V0ZXIgY2xhaW1SZXdhcmRzIHNldEFkbWluRmVlU2hhcmUgY2xhaW1BZG1pbkZlZSBwZW5kaW5nUmV3YXJkIHRyYW5zZmVyT3duZXJzaGlwCiAgICBlcnIKCm1haW5fY3JlYXRlX05vT3BAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOAogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICBwdXNoYnl0ZXMgMHg1MTZkMzQ3YiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGNyZWF0ZUFwcGxpY2F0aW9uCiAgICBlcnIKCm1haW5fZGVwb3NpdF9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgc2hsCiAgICBwdXNoaW50IDMgLy8gMwogICAgJgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgb25lIG9mIE5vT3AsIE9wdEluICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGIgZGVwb3NpdAoKbWFpbl9jbG9zZU91dE9mQXBwbGljYXRpb25fcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDIgLy8gQ2xvc2VPdXQKICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBDbG9zZU91dCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIGNsb3NlT3V0T2ZBcHBsaWNhdGlvbgoKbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBvcHRJblRvQXBwbGljYXRpb24oKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBPcHRJbiAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIG9wdEluVG9BcHBsaWNhdGlvbgoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZnJhbWVfZGlnIDAKICAgIGdsb2JhbCBPcGNvZGVCdWRnZXQKICAgID4KICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANgogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGJ5dGVjIDI3IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQogICAgYnl0ZWMgMjcgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGZyYW1lX2RpZyAtMQogICAgc3dpdGNoIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANToKICAgIGl0eG5fc3VibWl0CiAgICBiIGVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDEKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0OgogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzOgogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1CgplbnN1cmVfYnVkZ2V0X2FmdGVyX3doaWxlQDY6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6OmJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh2OiBieXRlcykgLT4gdWludDY0OgpiaWd1aW50VG9VaW50NjRNb2R1bG86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBiaWd1aW50VG9VaW50NjRNb2R1bG8odjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoxNwogICAgLy8gY29uc3QgbGVuID0gb3AubGVuKGIpOwogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE4CiAgICAvLyBjb25zdCBzdGFydDogdWludDY0ID0gbGVuID4gOCA/IChsZW4gLSA4KSA6IDA7CiAgICBpbnRjXzIgLy8gOAogICAgPgogICAgYnogYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfZmFsc2VAMgogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMiAvLyA4CiAgICAtCgpiaWd1aW50VG9VaW50NjRNb2R1bG9fdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE5CiAgICAvLyBjb25zdCBsYXN0OCA9IGIuc2xpY2Uoc3RhcnQpOyAgICAgICAgICAgLy8ga2VlcCBsZWFzdC1zaWduaWZpY2FudCA4IGJ5dGVzCiAgICBkdXAKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGNvdmVyIDMKICAgID49CiAgICBkaWcgMgogICAgc3dhcAogICAgc2VsZWN0CiAgICBmcmFtZV9kaWcgLTEKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShsYXN0OCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICByZXRzdWIKCmJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTgKICAgIC8vIGNvbnN0IHN0YXJ0OiB1aW50NjQgPSBsZW4gPiA4ID8gKGxlbiAtIDgpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X21lcmdlQDMKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5jcmVhdGVBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUFwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBBZGRyZXNzLCByb3V0ZXI6IEFkZHJlc3MsIGE6IHVpbnQ2NCwgYXNzZXQ6IEFzc2V0LCBmZWVTaGFyZUJQOiB1aW50NjQsIGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6OQogICAgLy8gdGhpcy5vd25lci52YWx1ZSA9IG93bmVyOwogICAgZGlnIDYKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozOAogICAgLy8gdGhpcy5hc3NldC52YWx1ZSA9IGFzc2V0OwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIGEgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxOSAvLyAiYSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyB0aGlzLmEudmFsdWUgPSBhOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIHJvdXRlciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMjAgLy8gInJvdXRlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyB0aGlzLnJvdXRlci52YWx1ZSA9IHJvdXRlcjsKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDIxIC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyB0aGlzLmZlZVNoYXJlQlAudmFsdWUgPSBmZWVTaGFyZUJQOwogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUgPSBiYWxhbmNlUmF0aW9NaW5CUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OAogICAgLy8gY29uc3QgZGVjaW1hbHMgPSB0aGlzLmFzc2V0LnZhbHVlLmRlY2ltYWxzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIGNvbnN0IGRlY2ltYWxzID0gdGhpcy5hc3NldC52YWx1ZS5kZWNpbWFsczsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA+CiAgICBieiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X2ZhbHNlQDMKICAgIGR1cAogICAgcHVzaGludCAzIC8vIDMKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRSZWR1Y2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAyMiAvLyAidG9rZW5BbW91bnRSZWR1Y2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MAogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgZHVwCiAgICBwdXNoaW50IDMgLy8gMwogICAgPAogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2CiAgICBwdXNoaW50IDMgLy8gMwogICAgZGlnIDEKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2MAogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldDogQXNzZXQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfbWVyZ2VANwoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDQKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5vcHRJblRvQXBwbGljYXRpb25bcm91dGluZ10oKSAtPiB2b2lkOgpvcHRJblRvQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3NAogICAgLy8gc3VwZXIub3B0SW5Ub0FwcGxpY2F0aW9uKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MwogICAgLy8gb3B0SW5Ub0FwcGxpY2F0aW9uKCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmNsb3NlT3V0T2ZBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsb3NlT3V0T2ZBcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo4NgogICAgLy8gY29uc3Qgc2VuZGVyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5MAogICAgLy8gaWYgKGxwQmFsYW5jZSA+IDApIHsKICAgIGJ6IGNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLndpdGhkcmF3KGxwQmFsYW5jZSwgYnVkZ2V0KTsKICAgIGR1cAogICAgZGlnIDMKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXcKCmNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTEKICAgIC8vIGNvbnN0IGxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlOwogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MQogICAgLy8gY29uc3QgbHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KGxwQW1vdW50ID09PSAwLCAnUmV3YXJkTWFuYWdlcjogd2l0aGRyYXcgTFAgYmVmb3JlIGNsb3NlIG91dCcpOwogICAgIQogICAgYXNzZXJ0IC8vIFJld2FyZE1hbmFnZXI6IHdpdGhkcmF3IExQIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NAogICAgLy8gY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ1Jld2FyZChmcm9tKTsKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NQogICAgLy8gYXNzZXJ0KHBlbmRpbmcgPT09IDAsICdSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQnKTsKICAgICEKICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTA2LTExMgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDgKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEwOAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMAogICAgLy8gYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTExCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTEyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTQKICAgIC8vIGxvZygnUG9vbDogb3B0LWluIGNvbXBsZXRlZCcpOwogICAgcHVzaGJ5dGVzICJQb29sOiBvcHQtaW4gY29tcGxldGVkIgogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDIKICAgIC8vIG9wdEluQXNzZXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZGVwb3NpdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTIKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU1CiAgICAvLyBpZiAoVHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5PcHRJbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBkZXBvc2l0X2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBzdXBlci5vcHRJblRvQXBwbGljYXRpb24oVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24KCmRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBhc3NlcnQodGhpcy5jYW5EZXBvc2l0LnZhbHVlLCAnUG9vbDogZGVwb3NpdCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzOQogICAgLy8gYXNzZXJ0KHRoaXMuY2FuRGVwb3NpdC52YWx1ZSwgJ1Bvb2w6IGRlcG9zaXQgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBQb29sOiBkZXBvc2l0IHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTYxCiAgICAvLyBjb25zdCBvbGREID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldC5pZCA9PT0gdGhpcy5hc3NldC52YWx1ZS5pZCwgYFdyb25nIGFzc2V0YCk7CiAgICBkaWcgMQogICAgZHVwCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkID09PSB0aGlzLmFzc2V0LnZhbHVlLmlkLCBgV3JvbmcgYXNzZXRgKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjQKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0UmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLCBgQXNzZXQgbXVzdCBnbyB0byBhcHBgKTsKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQXNzZXQgbXVzdCBnbyB0byBhcHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyNwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJUeG4ucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgUmVrZXkgbm90IGFsbG93ZWRgKTsKICAgIGR1cAogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJla2V5IG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjgKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0Q2xvc2VUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgQ2xvc2VUbyBub3QgYWxsb3dlZGApOwogICAgZHVwCiAgICBndHhucyBBc3NldENsb3NlVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBDbG9zZVRvIG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjkKICAgIC8vIHJldHVybiBhc3NldFRyYW5zZmVyVHhuLmFzc2V0QW1vdW50OwogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2NQogICAgLy8gY29uc3QgYW1vdW50U1AgPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCk7CiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICBkdXAKICAgIGJ1cnkgOAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnQoYW1vdW50U1AgPiAwLCAnUG9vbDogdG9vIGxpdHRsZScpOwogICAgZHVwCiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIGxpdHRsZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY5CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRTUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjkKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50U1A7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBidXJ5IDYKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICArCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3NQogICAgLy8gaWYgKG9sZEQgPT09IDAgfHwgb2xkQmFsYW5jZSA9PT0gMCkgewogICAgYnogZGVwb3NpdF9pZl9ib2R5QDUKICAgIGRpZyA0CiAgICBibnogZGVwb3NpdF9lbHNlX2JvZHlANgoKZGVwb3NpdF9pZl9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIGNvbnN0IGhhbGZBbW91bnQ6IHVpbnQ2NCA9IGFtb3VudFNQID4+IDE7CiAgICBkaWcgNQogICAgaW50Y18xIC8vIDEKICAgIHNocgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgpkZXBvc2l0X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gdGhpcy51cGRhdGVEKCk7CiAgICBjYWxsc3ViIHVwZGF0ZUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDUKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIGFzc2VydCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA8IE1BWF9UT0tFTl9CQUxBTkNFLCAnUG9vbDogdG9vIG11Y2gnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIDwgTUFYX1RPS0VOX0JBTEFOQ0UsICdQb29sOiB0b28gbXVjaCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMTA5OTUxMTYyNzc3NiAvLyAxMDk5NTExNjI3Nzc2CiAgICA8CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIG11Y2gKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJ10sIGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZGVwb3NpdF9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodG9rZW5CYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgIGl0b2IKICAgIGRpZyA0CiAgICBpdG9iCiAgICBkaWcgMQogICAgYioKICAgIGRpZyA3CiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODIKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA1CiAgICBpdG9iCiAgICB1bmNvdmVyIDQKICAgIGIqCiAgICB1bmNvdmVyIDMKICAgIGIvCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIHVuY292ZXIgMgogICAgYnwKICAgIGJ0b2kKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUA3CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5NwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN3YXBUb1ZVc2Rbcm91dGluZ10oKSAtPiB2b2lkOgpzd2FwVG9WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNDUtMjQ5CiAgICAvLyBzd2FwVG9WVXNkKAogICAgLy8gICB1c2VyOiBBZGRyZXNzLAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjUzCiAgICAvLyBsZXQgZmVlOiB1aW50NjQgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1NAogICAgLy8gaWYgKGFtb3VudCA+IDApIHsKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIGlmICghemVyb0ZlZSkgewogICAgZGlnIDIKICAgIGJueiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjU2CiAgICAvLyBmZWUgPSAoYW1vdW50ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTUgLy8gImZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTYKICAgIC8vIGZlZSA9IChhbW91bnQgKiB0aGlzLmZlZVNoYXJlQlAudmFsdWUpIC8gQlA7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDQKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgYnVyeSAxCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OAogICAgLy8gY29uc3QgYW1vdW50SW4gPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCAtIGZlZSk7CiAgICBkaWcgMwogICAgZHVwCiAgICBkaWcgMgogICAgLQogICAgY2FsbHN1YiB0b1N5c3RlbVByZWNpc2lvbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYwCiAgICAvLyBmZWUgPSBhbW91bnQgLSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50SW4pOwogICAgZHVwCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgLQogICAgYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYzCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBhbW91bnRJbjsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NAogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50SW47CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NgogICAgLy8gY29uc3QgdlVzZE5ld0Ftb3VudCA9IHRoaXMuZ2V0WSh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjYKICAgIC8vIGNvbnN0IHZVc2ROZXdBbW91bnQgPSB0aGlzLmdldFkodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGNhbGxzdWIgZ2V0WQogICAgZHVwCiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NwogICAgLy8gaWYgKHRoaXMudlVzZEJhbGFuY2UudmFsdWUgPiB2VXNkTmV3QW1vdW50KSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBpZiAodGhpcy52VXNkQmFsYW5jZS52YWx1ZSA+IHZVc2ROZXdBbW91bnQpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA8CiAgICBieiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY4CiAgICAvLyByZXN1bHQgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC0gdlVzZE5ld0Ftb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIHJlc3VsdCA9IHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLSB2VXNkTmV3QW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA2CiAgICAtCiAgICBidXJ5IDIKCnN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlID0gdlVzZE5ld0Ftb3VudDsKICAgIGRpZyA2CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcxCiAgICAvLyB0aGlzLmFkZFJld2FyZHMoZmVlKTsKICAgIGR1cAogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkaWcgNQogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgNAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMgogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MmJiYmVjYTMgLy8gbWV0aG9kICJTd2FwcGVkVG9WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI0NS0yNDkKICAgIC8vIHN3YXBUb1ZVc2QoCiAgICAvLyAgIHVzZXI6IEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICB6ZXJvRmVlOiBib29sZWFuLAogICAgLy8gKTogdWludDY0IHsKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3dhcEZyb21WVXNkW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEZyb21WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5NwogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5OQogICAgLy8gbGV0IHJlc3VsdFNQOiB1aW50NjQgPSAwOyAvLyAwIGJ5IGRlZmF1bHQKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIGxldCByZXN1bHQ6IHVpbnQ2NCA9IDA7IC8vIDAgYnkgZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMQogICAgLy8gbGV0IGZlZTogdWludDY0ID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGlmIChhbW91bnQgPiAwKSB7CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gYW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gY29uc3QgbmV3QW1vdW50ID0gdGhpcy5nZXRZKHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgY2FsbHN1YiBnZXRZCiAgICBkdXAKICAgIGJ1cnkgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDUKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSAxMQogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA2CiAgICAvLyBpZiAodG9rZW5CYWxhbmNlID4gbmV3QW1vdW50KSB7CiAgICA8CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDcKICAgIC8vIHJlc3VsdFNQID0gdG9rZW5CYWxhbmNlIC0gbmV3QW1vdW50OwogICAgZGlnIDcKICAgIGRpZyA5CiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA4CiAgICAvLyByZXN1bHQgPSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24ocmVzdWx0U1ApOwogICAgY2FsbHN1YiBmcm9tU3lzdGVtUHJlY2lzaW9uCiAgICBidXJ5IDIKCnN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkaWcgMQogICAgPD0KICAgIGFzc2VydCAvLyBQb29sOiByZXNlcnZlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNQogICAgLy8gaWYgKCF6ZXJvRmVlKSB7CiAgICBkaWcgMwogICAgYm56IHN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gZmVlID0gKHJlc3VsdCAqIHRoaXMuZmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gZmVlU2hhcmVCUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE1IC8vICJmZWVTaGFyZUJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyBmZWUgPSAocmVzdWx0ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAyCiAgICAqCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8KICAgIGJ1cnkgMQoKc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxOQogICAgLy8gcmVzdWx0IC09IGZlZTsKICAgIGR1cDIKICAgIGR1cAogICAgY292ZXIgMgogICAgLQogICAgZHVwCiAgICBidXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzIxCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA9IG5ld0Ftb3VudDsKICAgIGRpZyAxMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gYXNzZXJ0KHJlc3VsdCA+PSByZWNlaXZlQW1vdW50TWluLCAnUG9vbDogc2xpcHBhZ2UnKTsKICAgIGR1cAogICAgZGlnIDcKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogc2xpcHBhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI0CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDkKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjgKICAgIC8vIHRoaXMuYWRkUmV3YXJkcyhmZWUpOwogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBlbWl0PFN3YXBwZWRGcm9tVlVzZD4oeyByZWNpcGllbnQ6IHVzZXIsIHRva2VuSWQ6IHRoaXMuYXNzZXQudmFsdWUuaWQsIHZVc2RBbW91bnQ6IGFtb3VudCwgYW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzMAogICAgLy8gZW1pdDxTd2FwcGVkRnJvbVZVc2Q+KHsgcmVjaXBpZW50OiB1c2VyLCB0b2tlbklkOiB0aGlzLmFzc2V0LnZhbHVlLmlkLCB2VXNkQW1vdW50OiBhbW91bnQsIGFtb3VudDogcmVzdWx0LCBmZWUgfSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgZGlnIDcKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGRpZyAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGQzZjFkNTQyIC8vIG1ldGhvZCAiU3dhcHBlZEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzIKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBieXRlYyAyNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldEZlZVNoYXJlW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0RmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gYXNzZXJ0KGZlZVNoYXJlQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MgogICAgLy8gdGhpcy5mZWVTaGFyZUJQLnZhbHVlID0gZmVlU2hhcmVCUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmFkanVzdFRvdGFsTHBBbW91bnRbcm91dGluZ10oKSAtPiB2b2lkOgphZGp1c3RUb3RhbExwQW1vdW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NwogICAgLy8gY29uc3QgZCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ3CiAgICAvLyBjb25zdCBkID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNDgKICAgIC8vIGNvbnN0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyBjb25zdCB0b3RhbFN1cHBseSA9IHRoaXMudG90YWxTdXBwbHkudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTAKICAgIC8vIGlmIChkID4gdG90YWxTdXBwbHkpIHsKICAgID4KICAgIGJ6IGFkanVzdFRvdGFsTHBBbW91bnRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIHRoaXMuZGVwb3NpdExwKFR4bi5zZW5kZXIsIGQgLSB0b3RhbFN1cHBseSk7CiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMgogICAgZGlnIDIKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCgphZGp1c3RUb3RhbExwQW1vdW50X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NQogICAgLy8gYWRqdXN0VG90YWxMcEFtb3VudCgpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRCYWxhbmNlUmF0aW9NaW5CUFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEJhbGFuY2VSYXRpb01pbkJQOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTkKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYwCiAgICAvLyBhc3NlcnQoYmFsYW5jZVJhdGlvTWluQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlID0gYmFsYW5jZVJhdGlvTWluQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RvcERlcG9zaXRbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wRGVwb3NpdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NgogICAgLy8gdGhpcy5jYW5EZXBvc2l0LnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NAogICAgLy8gc3RvcERlcG9zaXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnREZXBvc2l0W3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnREZXBvc2l0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjYW5EZXBvc2l0ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTIgLy8gImNhbkRlcG9zaXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzEKICAgIC8vIHRoaXMuY2FuRGVwb3NpdC52YWx1ZSA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gc3RhcnREZXBvc2l0KCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN0b3BXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0b3BXaXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzYKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzc0CiAgICAvLyBzdG9wV2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnRXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0YXJ0V2l0aGRyYXc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODEKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzkKICAgIC8vIHN0YXJ0V2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc2V0U3RvcEF1dGhvcml0eVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldFN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODQKICAgIC8vIHNldFN0b3BBdXRob3JpdHkoc3RvcEF1dGhvcml0eTogQWRkcmVzcyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODUKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODYKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IHN0b3BBdXRob3JpdHk7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzg0CiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRSb3V0ZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSb3V0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODkKICAgIC8vIHNldFJvdXRlcihyb3V0ZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzkwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTEKICAgIC8vIHRoaXMucm91dGVyLnZhbHVlID0gcm91dGVyOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4OQogICAgLy8gc2V0Um91dGVyKHJvdXRlcjogQWRkcmVzcyk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5jbGFpbVJld2FyZHNbcm91dGluZ10oKSAtPiB2b2lkOgpjbGFpbVJld2FyZHM6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYxCiAgICAvLyBjb25zdCB1c2VyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjMKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjQKICAgIC8vIGNvbnN0IHJld2FyZHMgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgLyBQX1NDQUxFKTsKICAgIGR1cAogICAgaXRvYgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY0CiAgICAvLyBjb25zdCByZXdhcmRzID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlIC8gUF9TQ0FMRSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBjb25zdCBwZW5kaW5nOiB1aW50NjQgPSByZXdhcmRzIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGRpZyAyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjUKICAgIC8vIGNvbnN0IHBlbmRpbmc6IHVpbnQ2NCA9IHJld2FyZHMgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY2CiAgICAvLyBpZiAocGVuZGluZyA+IDApIHsKICAgIGJ6IGNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgMQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgNQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyA1CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY5CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHVzZXIpLCBwZW5kaW5nIH0pOwogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuc2V0QWRtaW5GZWVTaGFyZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEFkbWluRmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NzQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3NwogICAgLy8gYXNzZXJ0KGFkbWluRmVlU2hhcmVCUCA8PSBCUCwgJ1Jld2FyZE1hbmFnZXI6IHRvbyBoaWdoJyk7CiAgICBkdXAKICAgIGludGMgNCAvLyAxMDAwMAogICAgPD0KICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiB0b28gaGlnaAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3OAogICAgLy8gdGhpcy5hZG1pbkZlZVNoYXJlQlAudmFsdWUgPSBhZG1pbkZlZVNoYXJlQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuY2xhaW1BZG1pbkZlZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltQWRtaW5GZWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg0CiAgICAvLyBjb25zdCBhZG1pbkZlZUFtb3VudCA9IHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODQKICAgIC8vIGNvbnN0IGFkbWluRmVlQW1vdW50ID0gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg1CiAgICAvLyBpZiAoYWRtaW5GZWVBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbUFkbWluRmVlX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg3CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODcKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODkKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4OQogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKY2xhaW1BZG1pbkZlZV9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODEKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5wZW5kaW5nUmV3YXJkW3JvdXRpbmddKCkgLT4gdm9pZDoKcGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIGl0b2IKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6Ok93bmFibGUudHJhbnNmZXJPd25lcnNoaXBbcm91dGluZ10oKSAtPiB2b2lkOgp0cmFuc2Zlck93bmVyc2hpcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlSb3V0ZXIoKSAtPiB2b2lkOgpvbmx5Um91dGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5yb3V0ZXIudmFsdWUuYnl0ZXMsICdQb29sOiBvbmx5IHJvdXRlcicpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTgKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnJvdXRlci52YWx1ZS5ieXRlcywgJ1Bvb2w6IG9ubHkgcm91dGVyJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBQb29sOiBvbmx5IHJvdXRlcgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub25seVN0b3BBdXRob3JpdHkoKSAtPiB2b2lkOgpvbmx5U3RvcEF1dGhvcml0eToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1Bvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdQb29sOiBpcyBub3Qgc3RvcEF1dGhvcml0eScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gUG9vbDogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnZhbGlkYXRlQmFsYW5jZVJhdGlvKCkgLT4gdm9pZDoKdmFsaWRhdGVCYWxhbmNlUmF0aW86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHByaXZhdGUgdmFsaWRhdGVCYWxhbmNlUmF0aW8oKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gaWYgKHRva2VuQmFsYW5jZSA+IHZVc2RCYWxhbmNlKSB7CiAgICA+CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBhc3NlcnQoKHZVc2RCYWxhbmNlICogQlApIC8gdG9rZW5CYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdlVTRCBiYWxhbmNlJyk7CiAgICBmcmFtZV9kaWcgMQogICAgaW50YyA0IC8vIDEwMDAwCiAgICAqCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE2IC8vICJiYWxhbmNlUmF0aW9NaW5CUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMgogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHZVU0QgYmFsYW5jZQoKdmFsaWRhdGVCYWxhbmNlUmF0aW9fYWZ0ZXJfaWZfZWxzZUA1OgogICAgcmV0c3ViCgp2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gfSBlbHNlIGlmICh0b2tlbkJhbGFuY2UgPCB2VXNkQmFsYW5jZSkgewogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICA8CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNAogICAgLy8gYXNzZXJ0KCh0b2tlbkJhbGFuY2UgKiBCUCkgLyB2VXNkQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHRva2VuIGJhbGFuY2UnKTsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgICoKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHRva2VuIGJhbGFuY2UKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5Ny0xOTgKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMzAwMCB9IH0gfSkKICAgIC8vIHdpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5OQogICAgLy8gZW5zdXJlQnVkZ2V0KGJ1ZGdldCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE0MwogICAgLy8gYXNzZXJ0KHRoaXMuY2FuV2l0aGRyYXcudmFsdWUsICciUG9vbDogd2l0aGRyYXcgcHJvaGliaXRlZCcpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjYW5XaXRoZHJhdyA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIHdpdGhkcmF3biBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTMgLy8gImNhbldpdGhkcmF3IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQzCiAgICAvLyBhc3NlcnQodGhpcy5jYW5XaXRoZHJhdy52YWx1ZSwgJyJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vICJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDMKICAgIC8vIGNvbnN0IG9sZEQgPSB0aGlzLmQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIwMwogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIHRoaXMud2l0aGRyYXdMcChUeG4uc2VuZGVyLCBhbW91bnRMcCk7CiAgICB0eG4gU2VuZGVyCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzAKICAgIC8vIGxldCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMAogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIGFzc2VydCh1c2VyTHBBbW91bnQgPj0gbHBBbW91bnQsICdSZXdhcmRNYW5hZ2VyOiBub3QgZW5vdWdoIGFtb3VudCcpOwogICAgZHVwCiAgICBmcmFtZV9kaWcgLTIKICAgID49CiAgICBhc3NlcnQgLy8gUmV3YXJkTWFuYWdlcjogbm90IGVub3VnaCBhbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMgogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMwogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNAogICAgLy8gaWYgKHVzZXJMcEFtb3VudCA+IDApIHsKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAyCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLQogICAgZnJhbWVfYnVyeSA0CgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhd19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM3CiAgICAvLyB1c2VyTHBBbW91bnQgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOAogICAgLy8gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlIC09IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIGRpZyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSAtPSBscEFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgaXRvYgogICAgZnJhbWVfZGlnIDMKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MQogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgNAogICAgYnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQyCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogZnJvbSB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MwogICAgLy8gZW1pdDxSZXdhcmRzQ2xhaW1lZD4oeyB1c2VyOiBuZXcgQWRkcmVzcyhmcm9tKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWMgMjUgLy8gbWV0aG9kICJSZXdhcmRzQ2xhaW1lZChhZGRyZXNzLHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0NQogICAgLy8gZW1pdDxXaXRoZHJhdz4oeyBmcm9tOiBuZXcgQWRkcmVzcyhmcm9tKSwgbHBBbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAxCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhkM2FmYTRmMSAvLyBtZXRob2QgIldpdGhkcmF3KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTIKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICBkdXAyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIGRpZyAyCiAgICBpdG9iCiAgICBkaWcgNAogICAgYioKICAgIGRpZyAxCiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNQogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICA+CiAgICBhc3NlcnQgLy8gUG9vbDogemVybyBjaGFuZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHJlc2VydmVzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjIKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgLT0gYW1vdW50THA7CiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSAtPSBhbW91bnRMcDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjUKICAgIC8vIHRoaXMudXBkYXRlRCgpOwogICAgY2FsbHN1YiB1cGRhdGVECiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjYKICAgIC8vIGFzc2VydCh0aGlzLmQudmFsdWUgPCBvbGRELCAnUG9vbDogemVybyBEIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI2CiAgICAvLyBhc3NlcnQodGhpcy5kLnZhbHVlIDwgb2xkRCwgJ1Bvb2w6IHplcm8gRCBjaGFuZ2VzJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGFzc2VydCAvLyBQb29sOiB6ZXJvIEQgY2hhbmdlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI4LTIzMgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogdGhpcy5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudExwKSwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI5CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMzAKICAgIC8vIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMQogICAgLy8gYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyOC0yMzIKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHRoaXMuZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnRMcCksCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5nZXRZKHg6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRZOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk3CiAgICAvLyBwcml2YXRlIGdldFkoeDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk4CiAgICAvLyBjb25zdCB4XyA9IEJpZ1VpbnQoeCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwMAogICAgLy8gY29uc3QgYTQgPSBCaWdVaW50KHRoaXMuYS52YWx1ZSA8PCAyKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MAogICAgLy8gYSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE5IC8vICJhIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBjb25zdCBhNCA9IEJpZ1VpbnQodGhpcy5hLnZhbHVlIDw8IDIpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzaGwKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAxCiAgICAvLyBjb25zdCBhOCA9IEJpZ1VpbnQoYTQgKiAybik7CiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiKgogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAzCiAgICAvLyBjb25zdCBkTWludXNYSXNQb3NpdGl2ZSA9IGRfID49IHhfOwogICAgYjw9CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgYnogZ2V0WV90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgYi0KCmdldFlfdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA2CiAgICAvLyBjb25zdCBhNEJ5RE1pbnVzWEFiczogYmlndWludCA9IGE0ICogZE1pbnVzWEFiczsKICAgIGZyYW1lX2RpZyA0CiAgICBiKgogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTEKICAgIC8vIGlmIChkTWludXNYSXNQb3NpdGl2ZSkgewogICAgZnJhbWVfZGlnIDYKICAgIGJ6IGdldFlfZWxzZV9ib2R5QDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxMgogICAgLy8gaWYgKGE0QnlETWludXNYQWJzID49IGRfKSB7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGI+PQogICAgYnogZ2V0WV9lbHNlX2JvZHlANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEzCiAgICAvLyBwYXJ0MUFicyA9IGE0QnlETWludXNYQWJzIC0gZF87CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGItCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNAogICAgLy8gcGFydDFJc1Bvc2l0aXZlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCgpnZXRZX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNQogICAgLy8gY29uc3QgcGFydDI6IGJpZ3VpbnQgPSBCaWdVaW50KHgpICogKGE0ICogZF8gKiBkXyAqIGRfICsgeF8gKiAocGFydDFBYnMgKiBwYXJ0MUFicykpOwogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIqCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBiKgogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKwogICAgYioKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNgogICAgLy8gbGV0IG51bWVyYXRvcjogYmlndWludCA9IHRoaXMuc3FydChwYXJ0Mik7CiAgICBjYWxsc3ViIHNxcnQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyOQogICAgLy8gaWYgKHBhcnQxSXNQb3NpdGl2ZSkgewogICAgYnogZ2V0WV9lbHNlX2JvZHlAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzMAogICAgLy8gbnVtZXJhdG9yICs9IHhfICogcGFydDFBYnM7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIGIqCiAgICBiKwoKZ2V0WV9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM2CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKG51bWVyYXRvciAvIChhOCAqIHhfKSArIDFuKTsgLy8gKzEgdG8gb2Zmc2V0IHJvdW5kaW5nIGVycm9ycwogICAgZnJhbWVfZGlnIDUKICAgIGZyYW1lX2RpZyAyCiAgICBiKgogICAgYi8KICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGIrCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFlfZWxzZV9ib2R5QDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDMyCiAgICAvLyBudW1lcmF0b3IgLT0geF8gKiBwYXJ0MUFiczsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgYioKICAgIGItCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUAxMgoKZ2V0WV9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNgogICAgLy8gcGFydDFBYnMgPSBkXyAtIGE0QnlETWludXNYQWJzOwogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTcKICAgIC8vIHBhcnQxSXNQb3NpdGl2ZSA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGIgZ2V0WV9hZnRlcl9pZl9lbHNlQDkKCmdldFlfZWxzZV9ib2R5QDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjAKICAgIC8vIHBhcnQxQWJzID0gYTRCeURNaW51c1hBYnMgKyBkXzsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMwogICAgYisKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIxCiAgICAvLyBwYXJ0MUlzUG9zaXRpdmUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUA5CgpnZXRZX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAzCiAgICBiLQogICAgYiBnZXRZX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnVwZGF0ZUQoKSAtPiB2b2lkOgp1cGRhdGVEOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM5CiAgICAvLyBwcml2YXRlIHVwZGF0ZUQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0MAogICAgLy8gY29uc3QgeCA9IEJpZ1VpbnQodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQwCiAgICAvLyBjb25zdCB4ID0gQmlnVWludCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQxCiAgICAvLyBjb25zdCB5ID0gQmlnVWludCh0aGlzLnZVc2RCYWxhbmNlLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDEKICAgIC8vIGNvbnN0IHkgPSBCaWdVaW50KHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0NgogICAgLy8gY29uc3QgeHk6IGJpZ3VpbnQgPSB4ICogeTsKICAgIGR1cDIKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBhID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTkgLy8gImEiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0OQogICAgLy8gY29uc3QgcDE6IGJpZ3VpbnQgPSBhXyAqIHh5ICogKHggKyB5KTsKICAgIGR1cAogICAgZGlnIDIKICAgIGIqCiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgYisKICAgIGIqCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MQogICAgLy8gY29uc3QgcDI6IGJpZ3VpbnQgPSAoeHkgKiAoKGFfICogNG4pIC0gMW4pKSAvIDNuOwogICAgcHVzaGJ5dGVzIDB4MDQKICAgIGIqCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiLQogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MwogICAgLy8gY29uc3QgcDM6IGJpZ3VpbnQgPSB0aGlzLnNxcnQoKHAxICogcDEpICsgKHAyICogcDIgKiBwMikpOwogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYisKICAgIGNhbGxzdWIgc3FydAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTQKICAgIC8vIGxldCBkXyA9IHRoaXMuY2JydChwMSArIHAzKTsKICAgIGR1cDIKICAgIGIrCiAgICBjYWxsc3ViIGNicnQKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1NQogICAgLy8gaWYgKHAzID4gcDEpIHsKICAgIGI8CiAgICBieiB1cGRhdGVEX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTYKICAgIC8vIGRfIC09IHRoaXMuY2JydChwMyAtIHAxKTsKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgLQogICAgZnJhbWVfYnVyeSAxCgp1cGRhdGVEX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2MAogICAgLy8gdGhpcy5kLnZhbHVlID0gKGRfIDw8IDEpOwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICBzaGwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDYgLy8gImQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjAKICAgIC8vIHRoaXMuZC52YWx1ZSA9IChkXyA8PCAxKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCnVwZGF0ZURfZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTgKICAgIC8vIGRfICs9IHRoaXMuY2JydChwMSAtIHAzKTsKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIHVwZGF0ZURfYWZ0ZXJfaWZfZWxzZUAzCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wudG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpIC0+IHVpbnQ2NDoKdG9TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjMKICAgIC8vIHByaXZhdGUgdG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjQKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50UmVkdWNlID0gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudFJlZHVjZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIyIC8vICJ0b2tlbkFtb3VudFJlZHVjZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NAogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjUKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY1CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudEluY3JlYXNlID0gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NwogICAgLy8gaWYgKHRva2VuQW1vdW50UmVkdWNlID4gMCkgewogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2OAogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50UmVkdWNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY5CiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudEluY3JlYXNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMQogICAgKgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3MgogICAgLy8gcmV0dXJuIGFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudDogdWludDY0KSAtPiB1aW50NjQ6CmZyb21TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzUKICAgIC8vIHByaXZhdGUgZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NgogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50UmVkdWNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjIgLy8gInRva2VuQW1vdW50UmVkdWNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc2CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudFJlZHVjZSA9IHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NwogICAgLy8gY29uc3QgdG9rZW5BbW91bnRJbmNyZWFzZSA9IHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudEluY3JlYXNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjMgLy8gInRva2VuQW1vdW50SW5jcmVhc2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzcKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc5CiAgICAvLyBpZiAodG9rZW5BbW91bnRSZWR1Y2UgPiAwKSB7CiAgICBieiBmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudFJlZHVjZTsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDAKICAgICoKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgxCiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4MgogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50SW5jcmVhc2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODQKICAgIC8vIHJldHVybiBhbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3FydChuOiBieXRlcykgLT4gYnl0ZXM6CnNxcnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODcKICAgIC8vIHByaXZhdGUgc3FydChuOiBiaWd1aW50KTogYmlndWludCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OAogICAgLy8gYXNzZXJ0KG4gPiAwbiwgJ24gbXVzdCBiZSBub24tbmVnYXRpdmUnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPgogICAgYXNzZXJ0IC8vIG4gbXVzdCBiZSBub24tbmVnYXRpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMG47CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweAogICAgYj09CiAgICBieiBzcXJ0X2FmdGVyX2lmX2Vsc2VAMgogICAgcHVzaGJ5dGVzIDB4CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKc3FydF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTAKICAgIC8vIGlmIChuIDw9IDNuKSByZXR1cm4gMW47CiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjIDI2IC8vIDB4MDMKICAgIGI8PQogICAgYnogc3FydF9hZnRlcl9pZl9lbHNlQDQKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpzcXJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5MwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDEpIC8gMik7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgcHVzaGludCAyIC8vIDIKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDk3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMAogICAgLy8gbGV0IHk6IGJpZ3VpbnQgPSAoeCArIG4gLyB4KSAvIDJuOwogICAgZnJhbWVfZGlnIC0xCiAgICBkaWcgMQogICAgYi8KICAgIGIrCiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiLwogICAgZnJhbWVfYnVyeSAxCgpzcXJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAxCiAgICAvLyB3aGlsZSAoeSA8IHgpIHsKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgYjwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMS01MDQKICAgIC8vIHdoaWxlICh5IDwgeCkgewogICAgLy8gICB4ID0geTsKICAgIC8vICAgeSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICAvLyB9CiAgICBieiBzcXJ0X2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMwogICAgLy8geSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIvCiAgICBkaWcgMQogICAgYisKICAgIGJ5dGVjIDE3IC8vIDB4MDIKICAgIGIvCiAgICBmcmFtZV9idXJ5IDEKICAgIGZyYW1lX2J1cnkgMAogICAgYiBzcXJ0X3doaWxlX3RvcEA1CgpzcXJ0X2FmdGVyX3doaWxlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MDUKICAgIC8vIHJldHVybiB4OwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuY2JydChuOiBieXRlcykgLT4gdWludDY0OgpjYnJ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTA4CiAgICAvLyBwcml2YXRlIGNicnQobjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXBuIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwOQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAyCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEwCiAgICAvLyBpZiAobiA8IDhuKSByZXR1cm4gMTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4MDgKICAgIGI8CiAgICBieiBjYnJ0X2FmdGVyX2lmX2Vsc2VANAogICAgaW50Y18xIC8vIDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpjYnJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxMwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDIpIC8gMyk7CiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgcHVzaGludCAzIC8vIDMKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTE3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZnJhbWVfYnVyeSAxCgpjYnJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTIxCiAgICAvLyBjb25zdCB4MjogYmlndWludCA9IHggKiB4OwogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgYioKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjIKICAgIC8vIGlmICh4MiA9PT0gMG4pIGJyZWFrOyAvLyBzaG91bGQgbm90IGhhcHBlbiBmb3IgeD4wCiAgICBwdXNoYnl0ZXMgMHgKICAgIGI9PQogICAgYm56IGNicnRfd2hpbGVfdG9wQDE1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjMKICAgIC8vIGNvbnN0IG5leHQ6IGJpZ3VpbnQgPSAoMm4gKiB4ICsgbiAvIHgyKSAvIDNuOwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgYioKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDMKICAgIGIvCiAgICBiKwogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjQKICAgIC8vIGlmIChuZXh0ID09PSB4IHx8IG5leHQgPT09IHggLSAxbikgewogICAgYj09CiAgICBibnogY2JydF9pZl9ib2R5QDEwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2RpZyAwCiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAxMQoKY2JydF9pZl9ib2R5QDEwOgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2J1cnkgMQoKY2JydF93aGlsZV90b3BAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MzIKICAgIC8vIHdoaWxlICgoeCArIDFuKSAqICh4ICsgMW4pICogKHggKyAxbikgPD0gbikgeCArPSAxbjsKICAgIGZyYW1lX2RpZyAxCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgZGlnIDEKICAgIGIqCiAgICBiKgogICAgZnJhbWVfZGlnIC0xCiAgICBiPD0KICAgIGJ6IGNicnRfd2hpbGVfdG9wQDE4CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAxCiAgICBiIGNicnRfd2hpbGVfdG9wQDE1CgpjYnJ0X3doaWxlX3RvcEAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzMwogICAgLy8gd2hpbGUgKHggKiB4ICogeCA+IG4pIHggLT0gMW47CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgLTEKICAgIGI+CiAgICBieiBjYnJ0X2FmdGVyX3doaWxlQDIwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2J1cnkgMQogICAgYiBjYnJ0X3doaWxlX3RvcEAxOAoKY2JydF9hZnRlcl93aGlsZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzNAogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh4KTsKICAgIGZyYW1lX2RpZyAxCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgY2JydF93aGlsZV90b3BANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24odG86IGJ5dGVzKSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQxCiAgICAvLyBwcm90ZWN0ZWQgb3B0SW5Ub0FwcGxpY2F0aW9uKHRvOiBBY2NvdW50KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MgogICAgLy8gaWYgKCF0aGlzLmJhbGFuY2UodG8pLmhhc1ZhbHVlKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDIKICAgIC8vIGlmICghdGhpcy5iYWxhbmNlKHRvKS5oYXNWYWx1ZSkgewogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBibnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ1CiAgICAvLyBpZiAoIXRoaXMudXNlclJld2FyZERlYnQodG8pLmhhc1ZhbHVlKSB7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGJueiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZCh1c2VyOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NS05NgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwZW5kaW5nUmV3YXJkKHVzZXI6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NwogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh0aGlzLmJhbGFuY2UodXNlcikudmFsdWUpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUpIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBiKgogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk3CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5hZGRSZXdhcmRzKHJld2FyZEFtb3VudDogdWludDY0KSAtPiB2b2lkOgphZGRSZXdhcmRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMAogICAgLy8gcHJvdGVjdGVkIGFkZFJld2FyZHMocmV3YXJkQW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMgogICAgLy8gaWYgKHRvdGFsU3VwcGx5ID4gMCkgewogICAgYnogYWRkUmV3YXJkc19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDMKICAgIC8vIGNvbnN0IGFkbWluRmVlUmV3YXJkczogdWludDY0ID0gKHJld2FyZEFtb3VudCAqIHRoaXMuYWRtaW5GZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTAzCiAgICAvLyBjb25zdCBhZG1pbkZlZVJld2FyZHM6IHVpbnQ2NCA9IChyZXdhcmRBbW91bnQgKiB0aGlzLmFkbWluRmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNAogICAgLy8gcmV3YXJkQW1vdW50IC09IGFkbWluRmVlUmV3YXJkczsKICAgIGZyYW1lX2RpZyAtMQogICAgZGlnIDEKICAgIC0KICAgIGZyYW1lX2J1cnkgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGJ5dGVjIDggLy8gImFjY1Jld2FyZFBlclNoYXJlUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYioKICAgIGZyYW1lX2RpZyAwCiAgICBpdG9iCiAgICBiLwogICAgYisKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNQogICAgLy8gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgKz0gQmlnVWludChyZXdhcmRBbW91bnQpICogUF9TQ0FMRSAvIEJpZ1VpbnQodG90YWxTdXBwbHkpOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDYKICAgIC8vIHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWUgKz0gYWRtaW5GZWVSZXdhcmRzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNgogICAgLy8gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZSArPSBhZG1pbkZlZVJld2FyZHM7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlICs9IGFkbWluRmVlUmV3YXJkczsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgphZGRSZXdhcmRzX2FmdGVyX2lmX2Vsc2VAMjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5kZXBvc2l0THAodG86IGJ5dGVzLCBscEFtb3VudDogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0THA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEwCiAgICAvLyBwcm90ZWN0ZWQgZGVwb3NpdExwKHRvOiBBY2NvdW50LCBscEFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTEKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMQogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMgogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMwogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEzCiAgICAvLyBsZXQgdXNlckxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTQKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaXRvYgogICAgZnJhbWVfZGlnIDAKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIGZyYW1lX2J1cnkgMQoKZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTcKICAgIC8vIHVzZXJMcEFtb3VudCArPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTgKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgKz0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlICs9IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIGZyYW1lX2RpZyAtMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOAogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSArPSBscEFtb3VudDsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE5CiAgICAvLyB0aGlzLnRvdGFsU3VwcGx5LnZhbHVlICs9IGxwQW1vdW50OwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMjEKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSk7CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMAogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgLTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMQogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKTsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMgogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMwogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogdG8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTIzCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB0byB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTI0CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHRvKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNgogICAgLy8gZW1pdDxEZXBvc2l0Pih7IHRvOiBuZXcgQWRkcmVzcyh0byksIGxwQW1vdW50IH0pOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4Y2ZhYjg3MjMgLy8gbWV0aG9kICJEZXBvc2l0KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjEzCiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5vd25lci52YWx1ZS5ieXRlcywgJ09ubHkgb3duZXInKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgb3duZXIKICAgIHJldHN1Ygo=",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CyAFAAEIIJBOJh0MdG9rZW5CYWxhbmNlC3ZVc2RCYWxhbmNlBWFzc2V0B2JhbGFuY2UIcmVzZXJ2ZXMOdXNlclJld2FyZERlYnQBZAt0b3RhbFN1cHBseRJhY2NSZXdhcmRQZXJTaGFyZVAHAQAAAAAAAAEBDmFkbWluRmVlQW1vdW50CmNhbkRlcG9zaXQLY2FuV2l0aGRyYXcFb3duZXIKZmVlU2hhcmVCUBFiYWxhbmNlUmF0aW9NaW5CUAECD2FkbWluRmVlU2hhcmVCUAFhBnJvdXRlcg1zdG9wQXV0aG9yaXR5EXRva2VuQW1vdW50UmVkdWNlE3Rva2VuQW1vdW50SW5jcmVhc2UEFR98dQS6gYB2AQMDBoEBCQEAAAAAAAAAADEYQAApJxKB0A9nJwciZycIgABnJwsiZygiZykiZycEImcnBiJnJwwjZycNI2eCAwQBo6P/BARZt6wEm0uCNDYaAI4DALcAqwCdMRkURDEYQQCGghIEdhCkYATjrrJcBNl4rRQEDRtMBgR1v5ooBPST1+0EjVy23wT+BKXOBAKOCFkEQfyWbgSr8gAUBASxYfEEZlkczwSlrmvRBKBMW8QENhthWQRTjpEnBOF7r7Q2GgCOEgFbApMCqgNaBDYETQR0BIsElASdBKYErwTABNEFLAVDBXIFhQCABFFtNHs2GgCOAQCJACMxGZCBAxoxGBBEQgFyMRmBAhIxGBBEQgEFMRkjEjEYEERCAPOKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJxuyHicbsh+L/40CAAsABLNC/9syALIBQv/1IrIBQv/viYoBAYv/FUkkDUEAGIsAJAlJiwBJTgMPSwJMTYv/TE8CUhdMiSJC/+g2GgFJFSUSRDYaAkkVJRJENhoDSRUkEkQXNhoESRUkEkQXNhoFSRUkEkQXNhoGSRUkEkQXJw5LBmcqTwNnJxNPA2cnFE8DZycVTwNnJw9PAmcnEExnIiplRHEBTElPAkSBAw1BACZJgQMJgQpMlCcWTGdJgQMMQQAPgQNLAQmBCkyUJxdMZyNDIkL/9iJC/94xAIgIgCNDNhoBSRUkEkQXMQBJIitjTElPAkRBAAZJSwOIBKBLAUkiK2NEFESICHkURCNDiAlosSIqZUQyCrIUIrISshGBBLIQIrIBs4AWUG9vbDogb3B0LWluIGNvbXBsZXRlZLAjQ4AARwQxFiMJSTgQgQQSRDYaAUkVJBJEFyKI/okxGSMSQQAFMQCIB/UiJwxlREQiJwZlTElOAkUGREsBSTgRIiplRBJESTgUMgoSREk4IDIDEkRJOBUyAxJEOBKIBkxJRQhJRCInBGVECCcETGciKGVMSU4CRQZEIillTElOAkUGRAhFBkEABUsEQAA1SwUjkSIoZURLAQgoTGciKWVECClMZ4gFkTEAIicGZURLBQmIB+4iKGVEgYCAgICAIAxEI0MiKGVESwYWSwQWSwGjSwcWTEsBokkVJA5EJK9MSwGrF08ECChMZyIpZURLBRZPBKNPA6JJFSQORE8CqxcIKUxnQv+eNhoBSRUkEkQXNhoCSRUkEkQXiANDI0OAADYaAUkVJRJENhoCSRUkEkQXSTYaA0kVIxJEIlNMiALKIkwiTEEAXEsCQAANIicPZURLBAshBApFAUsDSUsCCYgFS0mIBXhPAkwJRQIiKGVESwEIKExnIicEZUQIJwRMZyIoZUSIBA5JRQciKWVEDEEACSIpZURLBglFAilLBmdJiAbAIiplRBZLBUxQSwQWUEsCFkxLAVBLAhZQgAQru+yjTFCwiAJXJxhMULAjQ4AASTYaAUkVJRJENhoCSRUkEkQXSTYaA0kVJBJEF0w2GgRJFSMSRCJTTIgCDyJMIkwiTEEAeyIpZURLBggpSwFniAODSUUKIihlTElOAkULRAxBAA1LB0sJCUlFBIgEsEUCIicEZURLA0lOAksBDkRMCScETGdLA0AADSInD2VESwILIQQKRQFKSU4CCUlFBChLC2dJSwcPRLEiKmVESwmyFLIRshKBBLIQIrIBs4gF5CIqZUQWSwdMUEsGFlBLAhZMSwFQSwIWUIAE0/HVQkxQsIgBeycYTFCwI0M2GgFJFSQSRBeIBoRJIQQORCcPTGcjQ4gGdiInBmVMSU8CRCInB2VMSU4CTgNEDUEACjEASwJLAgmIBb0jQzYaAUkVJBJEF4gGRkkhBA5EJxBMZyNDiAESJwwiZyNDiAYvJwwjZyNDiAEAJw0iZyNDiAYdJw0jZyNDNhoBSRUlEkSIBgwnFUxnI0M2GgFJFSUSRIgF+ycUTGcjQ4AASTEASSIrY0xJTwJEQQBISRYiJwhlRKMnCaKI+39JRQRLAiInBWNECUlFBUEAKUsBSScFSwVmsSIqZURLAbIUSwVJTgKyErIRgQSyECKyAbMWUCcZTFCwI0M2GgFJFSQSRBeIBY5JIQQORCcSTGcjQ4gFgCInC2VMSU8CREEAHrEiKmVEIicOZUSyFEsBshKyEYEEshAisgGzJwsiZyNDNhoBSRUlEkSIBFMWJxhMULAjQzYaAUkVJRJEiAU2Jw5MZyNDMQAiJxRlRBJEiTEAIicVZUQSRImKAAAiKGVMSU8CRCIpZUxJTgJOA0QNQQAQiwEhBAuLAAoiJxBlRA9EiYsAiwEMQf/3iwAhBAuLAQoiJxBlRA9EiYoCAIv/Ioj6QCInDWVERCInBmVEMQBJIitjTElPAkRJi/4PRCInCGVMTgJEIkxBABaLAhaLA6MnCaKI+keLASInBWNECYwEiwKL/gmLAUkiK2NEi/4JSwErTwJmIicHZUSL/gknB0xnTBaLA6MnCaKI+hEnBUxmiwRBACSxIiplRIsBSU4CshSLBElOArISshGBBLIQIrIBsxZQJxlMULCL/haLAUsBUIAE06+k8UxQsCIoZUQiKWVESghLAhZLBKNLARZMSwGiSRUkDkQkr0xLAasXTwVMCShMZyIpZURPBBZPBaNPA6JJFSQORE8CqxcJKUsBZyIoZUQIDUQiJwRlRIv+SwEORIv+CScETGeIAMgiJwZlRIsADESxIiplRIv+iAFaMQCyFLISshGBBLIQIrIBs4mKAQEiSYv/FkkiJwZlRBZJTgIiJxNlRIECkBZJTgMnEaNOAqZJQQB0iwOLAqGLBKOMAIsGQQBaiwCLA6dBAEeLAIsDoYwBI4sEiwNJTgKjSwGjo4sBSaOLAklPAqNPAqCjiAEWTEEAFYsCiwGjoIsFiwKjoicKoIj41IwAiYsCiwGjoUL/6IsDiwChjAEiQv+2iwCLA6CMASJC/6uLAosDoUL/iYoAACIoZUQWIillRBZKoyInE2VEFklLAqNPBE8EoKNJTgJOA4ABBKMnCqFPAqMnGqJLAUsCo0sBSwKjTwKjoIgAlElOAkqgiADyTgOkQQAViwChiADmiwFMCYwBiwEjkCcGTGeJiwBMoYgA0IsBCIwBQv/oigEBIicWZUxJTwJEIicXZUxOAkRBAAiL/4sACowAiYsBQQAIi/+LAQuMAImL/4wAiYoBASInFmVMSU8CRCInF2VMTgJEQQAIi/+LAAuMAImLAUEACIv/iwEKjACJi/+MAImKAQEiSYv/gAClRIv/gACoQQAFgACMAImL/ycapkEABScKjACJi/+TIwiBAgqBAkyVTBZMFkwnHKOgSYwAi/9LAaKgJxGijAGLAYsApEEAFYv/iwFJTgKiSwGgJxGijAGMAEL/44mKAQEiRwOL/4AAqEEABCKMAImL/4ABCKRBAAQjjACJi/+TgQIIgQMKgQJMlUwWTBZMJxyjoIwBiwFJo0mMA4AAqEAAJycRiwFJTgKji/+LA6KgJxqiSYwAqEAAC4sBJwqhiwCoQQA9iwCMAYsBJwqgSYwCSUsBo6OL/6ZBAAeLAowBQv/miwFJSwGjo4v/pUEACosBJwqhjAFC/+mLAYj2zYwAiYsAjAFC/4yKAQCL/yIrY0UBQAAFi/8rImaL/yInBWNFAUAABov/JwUiZomKAQGL/yIrY0QWIicIZUSjJwmiiPaJi/8iJwVjRAmJigEAIicHZUxJTwJEQQAwIicSZUSL/wshBAqL/0sBCYz/IicIZUSL/xYnCaOLABaioCcITGciJwtlRAgnC0xniYoCACInCGVEIov+IitjTElPAkRBABaLAhaLAKMnCaKI9h6L/iInBWNECYwBiwKL/wiL/iIrY0SL/wiL/itPAmYiJwdlRIv/CCcHTGcWiwCjJwmiiPXqi/4nBU8CZosBQQAksSIqZUSL/rIUiwFJTgKyErIRgQSyECKyAbMWi/5MUCcZTFCwi/8Wi/5MUIAEz6uHI0xQsIkxACInDmVEEkSJ",clear:"C4EBQw=="},events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]},{name:"SwappedToVUsd",args:[{type:"address",name:"sender"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"fee"}]},{name:"SwappedFromVUsd",args:[{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"amount"},{type:"uint64",name:"fee"}]}],templateVariables:{}},rr=class{constructor(n){this.value=n}asByteArray(){return this.value}asString(){return this.value!==void 0?Buffer.from(this.value).toString("utf-8"):void 0}},T=class a{static get create(){return{_resolveByMethod(n){switch(n.method){case"createApplication":case"createApplication(address,address,uint64,uint64,uint64,uint64)void":return a.create.createApplication(n)}throw new Error("Unknown ' + verb + ' method")},createApplication(n){return{...n,method:"createApplication(address,address,uint64,uint64,uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.owner,n.args.router,n.args.a,n.args.asset,n.args.feeShareBp,n.args.balanceRatioMinBp]}}}}static get optIn(){return{optInToApplication(n){return{...n,method:"optInToApplication()void",args:Array.isArray(n.args)?n.args:[]}},deposit(n){return{...n,method:"deposit(axfer,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetTransferRef,n.args.budget]}}}}static get closeOut(){return{closeOutOfApplication(n){return{...n,method:"closeOutOfApplication(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.budget]}}}}static optInAsset(n){return{...n,method:"optInAsset()void",args:Array.isArray(n.args)?n.args:[]}}static deposit(n){return{...n,method:"deposit(axfer,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetTransferRef,n.args.budget]}}static withdraw(n){return{...n,method:"withdraw(uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.amountLp,n.args.budget]}}static swapToVUsd(n){return{...n,method:"swapToVUsd(address,uint64,bool)uint64",args:Array.isArray(n.args)?n.args:[n.args.user,n.args.amount,n.args.zeroFee]}}static swapFromVUsd(n){return{...n,method:"swapFromVUsd(address,uint64,uint64,bool)uint64",args:Array.isArray(n.args)?n.args:[n.args.user,n.args.amount,n.args.receiveAmountMin,n.args.zeroFee]}}static setFeeShare(n){return{...n,method:"setFeeShare(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.feeShareBp]}}static adjustTotalLpAmount(n){return{...n,method:"adjustTotalLpAmount()void",args:Array.isArray(n.args)?n.args:[]}}static setBalanceRatioMinBp(n){return{...n,method:"setBalanceRatioMinBP(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.balanceRatioMinBp]}}static stopDeposit(n){return{...n,method:"stopDeposit()void",args:Array.isArray(n.args)?n.args:[]}}static startDeposit(n){return{...n,method:"startDeposit()void",args:Array.isArray(n.args)?n.args:[]}}static stopWithdraw(n){return{...n,method:"stopWithdraw()void",args:Array.isArray(n.args)?n.args:[]}}static startWithdraw(n){return{...n,method:"startWithdraw()void",args:Array.isArray(n.args)?n.args:[]}}static setStopAuthority(n){return{...n,method:"setStopAuthority(address)void",args:Array.isArray(n.args)?n.args:[n.args.stopAuthority]}}static setRouter(n){return{...n,method:"setRouter(address)void",args:Array.isArray(n.args)?n.args:[n.args.router]}}static claimRewards(n){return{...n,method:"claimRewards()void",args:Array.isArray(n.args)?n.args:[]}}static setAdminFeeShare(n){return{...n,method:"setAdminFeeShare(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.adminFeeShareBp]}}static claimAdminFee(n){return{...n,method:"claimAdminFee()void",args:Array.isArray(n.args)?n.args:[]}}static pendingReward(n){return{...n,method:"pendingReward(address)uint64",args:Array.isArray(n.args)?n.args:[n.args.user]}}static transferOwnership(n){return{...n,method:"transferOwnership(address)void",args:Array.isArray(n.args)?n.args:[n.args.newOwner]}}};var or=class a{appClient;constructor(n){this.appClient=n instanceof Di.AppClient?n:new Di.AppClient({...n,appSpec:ar})}decodeReturnValue(n,i){return i!==void 0?(0,Tc.getArc56ReturnValue)(i,this.appClient.getABIMethod(n),ar.structs):void 0}static async fromCreatorAndName(n){return new a(await Di.AppClient.fromCreatorAndName({...n,appSpec:ar}))}static async fromNetwork(n){return new a(await Di.AppClient.fromNetwork({...n,appSpec:ar}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={optIn:{optInToApplication:(n={args:[]})=>this.appClient.params.optIn(T.optIn.optInToApplication(n)),deposit:n=>this.appClient.params.optIn(T.optIn.deposit(n))},closeOut:{closeOutOfApplication:(n={args:[void 0]})=>this.appClient.params.closeOut(T.closeOut.closeOutOfApplication(n))},clearState:n=>this.appClient.params.bare.clearState(n),optInAsset:(n={args:[]})=>this.appClient.params.call(T.optInAsset(n)),deposit:n=>this.appClient.params.call(T.deposit(n)),withdraw:n=>this.appClient.params.call(T.withdraw(n)),swapToVUsd:n=>this.appClient.params.call(T.swapToVUsd(n)),swapFromVUsd:n=>this.appClient.params.call(T.swapFromVUsd(n)),setFeeShare:n=>this.appClient.params.call(T.setFeeShare(n)),adjustTotalLpAmount:(n={args:[]})=>this.appClient.params.call(T.adjustTotalLpAmount(n)),setBalanceRatioMinBp:n=>this.appClient.params.call(T.setBalanceRatioMinBp(n)),stopDeposit:(n={args:[]})=>this.appClient.params.call(T.stopDeposit(n)),startDeposit:(n={args:[]})=>this.appClient.params.call(T.startDeposit(n)),stopWithdraw:(n={args:[]})=>this.appClient.params.call(T.stopWithdraw(n)),startWithdraw:(n={args:[]})=>this.appClient.params.call(T.startWithdraw(n)),setStopAuthority:n=>this.appClient.params.call(T.setStopAuthority(n)),setRouter:n=>this.appClient.params.call(T.setRouter(n)),claimRewards:(n={args:[]})=>this.appClient.params.call(T.claimRewards(n)),setAdminFeeShare:n=>this.appClient.params.call(T.setAdminFeeShare(n)),claimAdminFee:(n={args:[]})=>this.appClient.params.call(T.claimAdminFee(n)),pendingReward:n=>this.appClient.params.call(T.pendingReward(n)),transferOwnership:n=>this.appClient.params.call(T.transferOwnership(n))};createTransaction={optIn:{optInToApplication:(n={args:[]})=>this.appClient.createTransaction.optIn(T.optIn.optInToApplication(n)),deposit:n=>this.appClient.createTransaction.optIn(T.optIn.deposit(n))},closeOut:{closeOutOfApplication:(n={args:[void 0]})=>this.appClient.createTransaction.closeOut(T.closeOut.closeOutOfApplication(n))},clearState:n=>this.appClient.createTransaction.bare.clearState(n),optInAsset:(n={args:[]})=>this.appClient.createTransaction.call(T.optInAsset(n)),deposit:n=>this.appClient.createTransaction.call(T.deposit(n)),withdraw:n=>this.appClient.createTransaction.call(T.withdraw(n)),swapToVUsd:n=>this.appClient.createTransaction.call(T.swapToVUsd(n)),swapFromVUsd:n=>this.appClient.createTransaction.call(T.swapFromVUsd(n)),setFeeShare:n=>this.appClient.createTransaction.call(T.setFeeShare(n)),adjustTotalLpAmount:(n={args:[]})=>this.appClient.createTransaction.call(T.adjustTotalLpAmount(n)),setBalanceRatioMinBp:n=>this.appClient.createTransaction.call(T.setBalanceRatioMinBp(n)),stopDeposit:(n={args:[]})=>this.appClient.createTransaction.call(T.stopDeposit(n)),startDeposit:(n={args:[]})=>this.appClient.createTransaction.call(T.startDeposit(n)),stopWithdraw:(n={args:[]})=>this.appClient.createTransaction.call(T.stopWithdraw(n)),startWithdraw:(n={args:[]})=>this.appClient.createTransaction.call(T.startWithdraw(n)),setStopAuthority:n=>this.appClient.createTransaction.call(T.setStopAuthority(n)),setRouter:n=>this.appClient.createTransaction.call(T.setRouter(n)),claimRewards:(n={args:[]})=>this.appClient.createTransaction.call(T.claimRewards(n)),setAdminFeeShare:n=>this.appClient.createTransaction.call(T.setAdminFeeShare(n)),claimAdminFee:(n={args:[]})=>this.appClient.createTransaction.call(T.claimAdminFee(n)),pendingReward:n=>this.appClient.createTransaction.call(T.pendingReward(n)),transferOwnership:n=>this.appClient.createTransaction.call(T.transferOwnership(n))};send={optIn:{optInToApplication:async(n={args:[]})=>{let i=await this.appClient.send.optIn(T.optIn.optInToApplication(n));return{...i,return:i.return}},deposit:async n=>{let i=await this.appClient.send.optIn(T.optIn.deposit(n));return{...i,return:i.return}}},closeOut:{closeOutOfApplication:async(n={args:[void 0]})=>{let i=await this.appClient.send.closeOut(T.closeOut.closeOutOfApplication(n));return{...i,return:i.return}}},clearState:n=>this.appClient.send.bare.clearState(n),optInAsset:async(n={args:[]})=>{let i=await this.appClient.send.call(T.optInAsset(n));return{...i,return:i.return}},deposit:async n=>{let i=await this.appClient.send.call(T.deposit(n));return{...i,return:i.return}},withdraw:async n=>{let i=await this.appClient.send.call(T.withdraw(n));return{...i,return:i.return}},swapToVUsd:async n=>{let i=await this.appClient.send.call(T.swapToVUsd(n));return{...i,return:i.return}},swapFromVUsd:async n=>{let i=await this.appClient.send.call(T.swapFromVUsd(n));return{...i,return:i.return}},setFeeShare:async n=>{let i=await this.appClient.send.call(T.setFeeShare(n));return{...i,return:i.return}},adjustTotalLpAmount:async(n={args:[]})=>{let i=await this.appClient.send.call(T.adjustTotalLpAmount(n));return{...i,return:i.return}},setBalanceRatioMinBp:async n=>{let i=await this.appClient.send.call(T.setBalanceRatioMinBp(n));return{...i,return:i.return}},stopDeposit:async(n={args:[]})=>{let i=await this.appClient.send.call(T.stopDeposit(n));return{...i,return:i.return}},startDeposit:async(n={args:[]})=>{let i=await this.appClient.send.call(T.startDeposit(n));return{...i,return:i.return}},stopWithdraw:async(n={args:[]})=>{let i=await this.appClient.send.call(T.stopWithdraw(n));return{...i,return:i.return}},startWithdraw:async(n={args:[]})=>{let i=await this.appClient.send.call(T.startWithdraw(n));return{...i,return:i.return}},setStopAuthority:async n=>{let i=await this.appClient.send.call(T.setStopAuthority(n));return{...i,return:i.return}},setRouter:async n=>{let i=await this.appClient.send.call(T.setRouter(n));return{...i,return:i.return}},claimRewards:async(n={args:[]})=>{let i=await this.appClient.send.call(T.claimRewards(n));return{...i,return:i.return}},setAdminFeeShare:async n=>{let i=await this.appClient.send.call(T.setAdminFeeShare(n));return{...i,return:i.return}},claimAdminFee:async(n={args:[]})=>{let i=await this.appClient.send.call(T.claimAdminFee(n));return{...i,return:i.return}},pendingReward:async n=>{let i=await this.appClient.send.call(T.pendingReward(n));return{...i,return:i.return}},transferOwnership:async n=>{let i=await this.appClient.send.call(T.transferOwnership(n));return{...i,return:i.return}}};clone(n){return new a(this.appClient.clone(n))}async pendingReward(n){return(await this.appClient.send.call(T.pendingReward(n))).return}state={global:{getAll:async()=>{let n=await this.appClient.state.global.getAll();return{feeShareBp:n.feeShareBP,router:n.router,tokenBalance:n.tokenBalance,vUsdBalance:n.vUsdBalance,balanceRatioMinBp:n.balanceRatioMinBP,reserves:n.reserves,a:n.a,d:n.d,tokenAmountReduce:n.tokenAmountReduce,tokenAmountIncrease:n.tokenAmountIncrease,stopAuthority:n.stopAuthority,canDeposit:n.canDeposit,canWithdraw:n.canWithdraw,asset:n.asset,adminFeeShareBp:n.adminFeeShareBP,totalSupply:n.totalSupply,accRewardPerShareP:new rr(n.accRewardPerShareP),adminFeeAmount:n.adminFeeAmount,owner:n.owner}},feeShareBp:async()=>await this.appClient.state.global.getValue("feeShareBP"),router:async()=>await this.appClient.state.global.getValue("router"),tokenBalance:async()=>await this.appClient.state.global.getValue("tokenBalance"),vUsdBalance:async()=>await this.appClient.state.global.getValue("vUsdBalance"),balanceRatioMinBp:async()=>await this.appClient.state.global.getValue("balanceRatioMinBP"),reserves:async()=>await this.appClient.state.global.getValue("reserves"),a:async()=>await this.appClient.state.global.getValue("a"),d:async()=>await this.appClient.state.global.getValue("d"),tokenAmountReduce:async()=>await this.appClient.state.global.getValue("tokenAmountReduce"),tokenAmountIncrease:async()=>await this.appClient.state.global.getValue("tokenAmountIncrease"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),canDeposit:async()=>await this.appClient.state.global.getValue("canDeposit"),canWithdraw:async()=>await this.appClient.state.global.getValue("canWithdraw"),asset:async()=>await this.appClient.state.global.getValue("asset"),adminFeeShareBp:async()=>await this.appClient.state.global.getValue("adminFeeShareBP"),totalSupply:async()=>await this.appClient.state.global.getValue("totalSupply"),accRewardPerShareP:async()=>new rr(await this.appClient.state.global.getValue("accRewardPerShareP")),adminFeeAmount:async()=>await this.appClient.state.global.getValue("adminFeeAmount"),owner:async()=>await this.appClient.state.global.getValue("owner")},local:n=>{let i=typeof n=="string"?n:(0,Fc.encodeAddress)(n.publicKey);return{getAll:async()=>{let r=await this.appClient.state.local(i).getAll();return{balance:r.balance,userRewardDebt:r.userRewardDebt}},balance:async()=>await this.appClient.state.local(i).getValue("balance"),userRewardDebt:async()=>await this.appClient.state.local(i).getValue("userRewardDebt")}}};newGroup(){let n=this,i=this.algorand.newGroup(),r=Promise.resolve(),o=[];return{optInAsset(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.optInAsset(s))),o.push(void 0),this},deposit(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.deposit(s))),o.push(void 0),this},withdraw(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.withdraw(s))),o.push(void 0),this},swapToVUsd(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.swapToVUsd(s))),o.push(d=>n.decodeReturnValue("swapToVUsd(address,uint64,bool)uint64",d)),this},swapFromVUsd(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.swapFromVUsd(s))),o.push(d=>n.decodeReturnValue("swapFromVUsd(address,uint64,uint64,bool)uint64",d)),this},setFeeShare(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setFeeShare(s))),o.push(void 0),this},adjustTotalLpAmount(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.adjustTotalLpAmount(s))),o.push(void 0),this},setBalanceRatioMinBp(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setBalanceRatioMinBp(s))),o.push(void 0),this},stopDeposit(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.stopDeposit(s))),o.push(void 0),this},startDeposit(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.startDeposit(s))),o.push(void 0),this},stopWithdraw(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.stopWithdraw(s))),o.push(void 0),this},startWithdraw(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.startWithdraw(s))),o.push(void 0),this},setStopAuthority(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setStopAuthority(s))),o.push(void 0),this},setRouter(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setRouter(s))),o.push(void 0),this},claimRewards(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.claimRewards(s))),o.push(void 0),this},setAdminFeeShare(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setAdminFeeShare(s))),o.push(void 0),this},claimAdminFee(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.claimAdminFee(s))),o.push(void 0),this},pendingReward(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.pendingReward(s))),o.push(d=>n.decodeReturnValue("pendingReward(address)uint64",d)),this},transferOwnership(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.transferOwnership(s))),o.push(void 0),this},get optIn(){return{optInToApplication:s=>(r=r.then(async()=>i.addAppCallMethodCall(await n.params.optIn.optInToApplication(s))),o.push(void 0),this),deposit:s=>(r=r.then(async()=>i.addAppCallMethodCall(await n.params.optIn.deposit(s))),o.push(void 0),this)}},get closeOut(){return{closeOutOfApplication:s=>(r=r.then(async()=>i.addAppCallMethodCall(await n.params.closeOut.closeOutOfApplication(s))),o.push(void 0),this)}},clearState(s){return r=r.then(()=>i.addAppCall(n.params.clearState(s))),this},addTransaction(s,d){return r=r.then(()=>i.addTransaction(s,d)),this},async composer(){return await r,i},async simulate(s){await r;let d=await(s?i.simulate(s):i.simulate());return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}},async send(s){await r;let d=await i.send(s);return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}}}}};var pe=class{lpAmount;rewardDebt;constructor(n){this.lpAmount=n.lpAmount,this.rewardDebt=n.rewardDebt}get userLiquidity(){return M(this.lpAmount,3).toFixed()}earned(n,i){let r=Vs(this.lpAmount,this.rewardDebt,n.accRewardPerShareP,n.p);return i?M(r,i).toFixed():r}};var Ye=class{};var Ei=class extends Ye{constructor(i,r){super();this.algorand=i;this.api=r}chainType="ALG";P=48;async buildRawTransactionClaimRewards(i){let r=i.accountAddress,o=BigInt(i.token.tokenAddress),s=BigInt(i.token.poolAddress),d=this.getPool(s),c=this.algorand.newGroup();c.addAppCallMethodCall(await d.params.claimRewards({args:[],sender:r,extraFee:$t(1),assetReferences:[o]}));let{transactions:g}=await c.buildTransactions();return g=(0,Dt.assignGroupID)(g),qt(...g)}async buildRawTransactionDeposit(i){let r=i.accountAddress,o=BigInt(i.amount),s=BigInt(i.token.tokenAddress),d=BigInt(i.token.poolAddress),c=this.getPool(d),A=await Ia(d,r,this.algorand)?Dt.OnApplicationComplete.NoOpOC:Dt.OnApplicationComplete.OptInOC,l=this.algorand.newGroup(),u=await this.algorand.createTransaction.assetTransfer({assetId:s,amount:o,sender:r,receiver:c.appAddress});l.addAppCallMethodCall(await c.params.deposit({args:{assetTransferRef:u},sender:r,onComplete:A,extraFee:$t(5)}));let{transactions:y}=await l.buildTransactions();return y=(0,Dt.assignGroupID)(y),qt(...y)}async buildRawTransactionWithdraw(i){let r=i.accountAddress,o=BigInt(i.amount),s=BigInt(i.token.tokenAddress),d=BigInt(i.token.poolAddress),c=this.getPool(d),g=this.algorand.newGroup();g.addAppCallMethodCall(await c.params.withdraw({args:{amountLp:o},sender:r,assetReferences:[s],extraFee:$t(7)}));let{transactions:A}=await g.buildTransactions();return A=(0,Dt.assignGroupID)(A),qt(...A)}async getPoolInfoFromChain(i){let o=await this.getPool(BigInt(i.poolAddress)).state.global.getAll(),s=o.a?.toString(),d=o.d?.toString(),c=o.tokenBalance?.toString(),g=o.vUsdBalance?.toString(),A=o.totalSupply?.toString(),l=(0,Dt.bytesToBigInt)(o.accRewardPerShareP?.asByteArray()??Uint8Array.from([])).toString();if(s&&d&&c&&g&&A&&l){let u=me({tokenBalance:c,vUsdBalance:g});return{aValue:s,dValue:d,tokenBalance:c,vUsdBalance:g,totalLpAmount:A,accRewardPerShareP:l,p:this.P,imbalance:u}}throw new h("Unable to pool info from chain")}async getUserBalanceInfo(i,r){let o=BigInt(r.poolAddress),s=this.getPool(o);try{let{balance:d,userRewardDebt:c}=await s.state.local(i).getAll();if(d!==void 0&&c!==void 0)return new pe({lpAmount:d.toString(),rewardDebt:c.toString()})}catch{let g=(await this.algorand.account.getInformation(i)).appsLocalState;if(g&&!g.find(({id:l})=>l===o))return new pe({lpAmount:"0",rewardDebt:"0"})}throw new h("Unable to get user balance")}getPool(i){return this.algorand.client.getTypedAppClientById(or,{appId:i})}};var Et=require("web3");var bl={abi:[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},_i=bl;var $i=class extends Ye{constructor(i,r){super();this.web3=i;this.api=r}chainType="EVM";P=52;async getUserBalanceInfo(i,r){let o;try{o=await ua(this.getUserBalanceInfoByBatch(i,r),`Cannot get UserBalanceInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{o=await Hr(()=>this.getUserBalanceInfoPerProperty(i,r),`Cannot get UserBalanceInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return o}async getPoolInfoFromChain(i){let r;try{r=await ua(this.getPoolInfoByBatch(i),`Cannot get PoolInfo for ${i.name} on ${i.chainSymbol}`,5e3)}catch{r=await Hr(()=>this.getPoolInfoPerProperty(i),`Cannot get PoolInfo for ${i.name} on ${i.chainSymbol}`,5,2e3)}return r}async getUserBalanceInfoByBatch(i,r){let o=new this.web3.eth.BatchRequest,s=this.getPoolContract(r.poolAddress),d=s.methods.userRewardDebt(i).encodeABI(),c=s.methods.balanceOf(i).encodeABI();o.add({method:"eth_call",params:[{to:r.poolAddress,data:d},"latest"]}),o.add({method:"eth_call",params:[{to:r.poolAddress,data:c},"latest"]});let[g,A]=await o.execute();if(g&&A&&!g.error&&!A.error)return new pe({lpAmount:Et.Web3.utils.toBigInt(A.result).toString(),rewardDebt:Et.Web3.utils.toBigInt(g.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(i,r){let o=(await this.getPoolContract(r.poolAddress).methods.userRewardDebt(i).call()).toString(),s=(await this.getPoolContract(r.poolAddress).methods.balanceOf(i).call()).toString();return new pe({lpAmount:s,rewardDebt:o})}async getPoolInfoByBatch(i){let r=new this.web3.eth.BatchRequest,o=this.getPoolContract(i.poolAddress),s=o.methods.a().encodeABI(),d=o.methods.d().encodeABI(),c=o.methods.tokenBalance().encodeABI(),g=o.methods.vUsdBalance().encodeABI(),A=o.methods.totalSupply().encodeABI(),l=o.methods.accRewardPerShareP().encodeABI();r.add({method:"eth_call",params:[{to:i.poolAddress,data:s},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:d},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:c},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:g},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:A},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:l},"latest"]});let[u,y,C,Y,W,F]=await r.execute();if(u&&y&&C&&Y&&W&&F&&!u.error&&!y.error&&!C.error&&!Y.error&&!W.error&&!F.error){let w=Et.Web3.utils.toBigInt(C.result).toString(),R=Et.Web3.utils.toBigInt(Y.result).toString(),G=me({tokenBalance:w,vUsdBalance:R});return{aValue:Et.Web3.utils.toBigInt(u.result).toString(),dValue:Et.Web3.utils.toBigInt(y.result).toString(),tokenBalance:w,vUsdBalance:R,totalLpAmount:Et.Web3.utils.toBigInt(W.result).toString(),accRewardPerShareP:Et.Web3.utils.toBigInt(F.result).toString(),p:this.P,imbalance:G}}throw new Error("Batched failed")}async getPoolInfoPerProperty(i){let r=this.getPoolContract(i.poolAddress),o=(await r.methods.a().call()).toString(),s=(await r.methods.d().call()).toString(),d=(await r.methods.tokenBalance().call()).toString(),c=(await r.methods.vUsdBalance().call()).toString(),g=(await r.methods.totalSupply().call()).toString(),A=(await r.methods.accRewardPerShareP().call()).toString(),l=me({tokenBalance:d,vUsdBalance:c});return{aValue:o,dValue:s,tokenBalance:d,vUsdBalance:c,totalLpAmount:g,accRewardPerShareP:A,p:this.P,imbalance:l}}async buildRawTransactionDeposit(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.deposit(i.amount).encodeABI()})}async buildRawTransactionWithdraw(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.withdraw(i.amount).encodeABI()})}async buildRawTransactionClaimRewards(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(i){return{from:i.accountAddress,to:i.token.poolAddress,value:"0"}}getPoolContract(i){return new this.web3.eth.Contract(_i.abi,i)}};var sr=class{constructor(n,i,r,o){this.api=n;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=o}async approve(n,i){if(i){let r=n,o=i;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress},r)}else{let r=n;return this.tokenService.buildRawTransactionApprove({...r,spender:r.token.poolAddress})}}async deposit(n,i){return Q(n.amount),O("amount",n.amount,n.token.decimals),n.amount=X(n.amount,n.token.decimals).toFixed(),_n(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionDeposit(n)}async withdraw(n,i){return Q(n.amount),O("amount",n.amount,n.token.decimals),n.amount=X(n.amount,3).toFixed(),_n(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionWithdraw(n)}async claimRewards(n,i){return _n(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionClaimRewards(n)}};var ft=require("@project-serum/anchor"),Rt=require("@solana/web3.js");var dr=class extends Ye{constructor(i,r){super();this.solanaRpcUrl=i;this.api=r}chainType="SOLANA";P=48;async getUserBalanceInfo(i,r){let o=this.buildAnchorProvider(i),s=this.getBridge(r.bridgeAddress,o),d=new Rt.PublicKey(r.poolAddress),c=await s.account.pool.fetch(d);try{let g=await _r(new Rt.PublicKey(i),c.mint,s.programId),{lpAmount:A,rewardDebt:l}=await s.account.userDeposit.fetch(g);return new pe({lpAmount:A.toString(),rewardDebt:l.toString()})}catch{return new pe({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(i){let r=this.buildAnchorProvider(i.bridgeAddress),o=await this.getBridge(i.bridgeAddress,r).account.pool.fetch(i.poolAddress),s=o.vUsdBalance.toString(),d=o.tokenBalance.toString(),c=me({tokenBalance:d,vUsdBalance:s});return{dValue:o.d.toString(),aValue:o.a.toString(),totalLpAmount:o.totalLpAmount.toString(),vUsdBalance:s,tokenBalance:d,accRewardPerShareP:o.accRewardPerShareP.toString(),p:this.P,imbalance:c}}async buildRawTransactionDeposit(i){let{bridge:r,accounts:o,preInstructions:s}=await this.prepareDataForTransaction(i),d=await r.methods.deposit(new ft.BN(i.amount)).accounts(o).preInstructions(s).transaction();return d.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,d.feePayer=new Rt.PublicKey(i.accountAddress),await kn(d,i.txFeeParams,this.solanaRpcUrl),d}async buildRawTransactionWithdraw(i){let{bridge:r,accounts:o,preInstructions:s}=await this.prepareDataForTransaction(i),d=await r.methods.withdraw(new ft.BN(i.amount)).accounts(o).preInstructions(s).transaction();return d.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,d.feePayer=new Rt.PublicKey(i.accountAddress),await kn(d,i.txFeeParams,this.solanaRpcUrl),d}async buildRawTransactionClaimRewards(i){let{bridge:r,accounts:o,preInstructions:s}=await this.prepareDataForTransaction(i),d=await r.methods.claimRewards().accounts(o).preInstructions(s).transaction();return d.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,d.feePayer=new Rt.PublicKey(i.accountAddress),await kn(d,i.txFeeParams,this.solanaRpcUrl),d}async prepareDataForTransaction(i){let r=this.buildAnchorProvider(i.accountAddress),o=this.getBridge(i.token.bridgeAddress,r),{accounts:s,preInstructions:d}=await this._getLPTransactionData(o,i.token.poolAddress,i.accountAddress,r);return{bridge:o,accounts:s,preInstructions:d}}getBridge(i,r){return new ft.Program(wi,i,r)}buildAnchorProvider(i){let r=new Rt.Connection(this.solanaRpcUrl,"confirmed"),o=new Rt.PublicKey(i);return new ft.AnchorProvider(r,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(i,r,o,s){let d=new Rt.PublicKey(o),c=await tn(i.programId),g=await Pn(i.programId),A=new Rt.PublicKey(r),u=(await i.account.pool.fetch(A)).mint,y=await At(d,u),C=await Ln(u,i.programId),Y=await _r(d,u,i.programId),W=[ft.web3.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await jn(y,s)}catch{let G=await ft.Spl.associatedToken(s).methods.create().accounts({mint:u,owner:d,associatedAccount:y}).instruction();W.push(G)}try{await i.account.userDeposit.fetch(Y)}catch{let R=await i.methods.initDepositAccount().accounts({mint:u,user:d,userDeposit:Y}).instruction();W.push(R)}return{accounts:{mint:u,user:d,config:c,pool:A,bridgeAuthority:g,userDeposit:Y,userToken:y,bridgeToken:C},preInstructions:W}}};var pv=require("@stellar/stellar-sdk");var e=require("@stellar/stellar-sdk"),yl=e.contract.Spec,Cl=e.contract.Client;var cr=class extends Cl{constructor(i){super(new yl(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),i);this.options=i}fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};var ls=require("@stellar/stellar-sdk"),Nc=ls.rpc.Api;function $n(a){let{simulation:n,options:i}=a;if(!n)throw new Error("Soroban assembled transaction does not have simulation");if(Nc.isSimulationSuccess(n))return n.result==null?void 0:i.parseResultXdr(n.result.retval);throw new Error(n.error)}function qn(a){let{simulation:n}=a;if(!n)throw new Error("Soroban assembled transaction does not have simulation");return Nc.isSimulationError(n)}var gr=class extends Ye{constructor(i,r,o){super();this.nodeRpcUrlsConfig=i;this.params=r;this.api=o}chainType="SRB";P=48;async getUserBalanceInfo(i,r){let s=await this.getContract(r.poolAddress).get_user_deposit({user:i});if(qn(s))throw new h;let d=$n(s);if(!d)throw new h;let c=d.unwrap();return new pe({lpAmount:c.lp_amount.toString(),rewardDebt:c.reward_debt.toString()})}async getPoolInfoFromChain(i){let o=await this.getContract(i.poolAddress).get_pool();if(qn(o))throw new h;let s=$n(o);if(!s)throw new h;let d=s.unwrap();return{aValue:d.a.toString(),accRewardPerShareP:d.acc_reward_per_share_p.toString(),dValue:d.d.toString(),tokenBalance:d.token_balance.toString(),p:this.P,totalLpAmount:d.total_lp_amount.toString(),vUsdBalance:d.v_usd_balance.toString(),imbalance:me({tokenBalance:d.token_balance.toString(),vUsdBalance:d.v_usd_balance.toString()})}}async buildRawTransactionDeposit(i){return(await this.getContract(i.token.poolAddress,i.accountAddress).deposit({sender:i.accountAddress,amount:BigInt(i.amount)})).toXDR()}async buildRawTransactionWithdraw(i){return(await this.getContract(i.token.poolAddress,i.accountAddress).withdraw({sender:i.accountAddress,amount_lp:BigInt(i.amount)})).toXDR()}async buildRawTransactionClaimRewards(i){return(await this.getContract(i.token.poolAddress,i.accountAddress).claim_rewards({sender:i.accountAddress})).toXDR()}getContract(i,r){let o={publicKey:r,contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new cr(o)}};var An=require("@clarigen/core"),wc=require("@stacks/network"),Ze=require("@stacks/transactions"),Gc=require("big.js");var Ar=class extends Ye{constructor(i,r,o){super();this.nodeRpcUrl=i;this.params=r;this.api=o;let s=(0,wc.createNetwork)({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new An.ClarigenClient(s,this.params.stxHeroApiKey)}chainType="STX";P=48;A="20";client;async getUserBalanceInfo(i,r){let o=(0,An.contractFactory)(lt.pool,r.poolAddress),s=await this.client.ro(o.getLpBalance({user:i})),d=await this.client.ro(o.getUserRewardDebt({user:i}));return new pe({lpAmount:s.toString(),rewardDebt:d.toString()})}async getPoolInfoFromChain(i){let r=(0,An.contractFactory)(lt.pool,i.poolAddress),[o,s,d,c,g]=await Promise.all([this.client.ro(r.getD()),this.client.ro(r.getTokenBalance()),this.client.ro(r.getVusdBalance()),this.client.ro(r.getLpTotalSupply()),this.client.ro(r.getAccRewardPerShareP())]),A=o.toString(),l=s.toString(),u=d.toString(),y=c.toString(),C=g.toString();if(A&&l&&u&&y&&C){let Y=me({tokenBalance:l,vUsdBalance:u});return{aValue:this.A,dValue:A,tokenBalance:l,vUsdBalance:u,totalLpAmount:y,accRewardPerShareP:C,p:this.P,imbalance:Y}}throw new h("Unable to pool info from chain")}async buildRawTransactionDeposit(i){let r=(0,An.contractFactory)(lt.pool,i.token.poolAddress),{contractAddress:o,contractName:s,functionName:d,functionArgs:c}=r.deposit({amount:BigInt(i.amount),ftRef:i.token.tokenAddress}),g=(0,Ze.makeRandomPrivKey)(),A=(0,Ze.privateKeyToPublic)(g),l=Lt(i.amount,"lte",i.accountAddress,i.token.tokenAddress,Pt(i.token)),u=Lt(0,"gte",i.token.poolAddress,i.token.tokenAddress,Pt(i.token)),y={contractAddress:o,contractName:s,functionName:d,functionArgs:c,publicKey:A,validateWithAbi:!0,network:this.client.network,postConditions:[l,u],postConditionMode:Ze.PostConditionMode.Deny};return(await(0,Ze.makeUnsignedContractCall)(y)).serialize()}async buildRawTransactionWithdraw(i){let r=(0,An.contractFactory)(lt.pool,i.token.poolAddress),{contractAddress:o,contractName:s,functionName:d,functionArgs:c}=r.withdraw({amountLp:BigInt(i.amount),ftRef:i.token.tokenAddress}),g=(0,Ze.makeRandomPrivKey)(),A=(0,Ze.privateKeyToPublic)(g),l=Lt(Ve(i.amount,i.token.decimals).toFixed(0,Gc.Big.roundDown),"gte",i.token.poolAddress,i.token.tokenAddress,Pt(i.token)),u={contractAddress:o,contractName:s,functionName:d,functionArgs:c,publicKey:A,validateWithAbi:!0,network:this.client.network,postConditions:[l],postConditionMode:Ze.PostConditionMode.Deny};return(await(0,Ze.makeUnsignedContractCall)(u)).serialize()}async buildRawTransactionClaimRewards(i){let r=(0,An.contractFactory)(lt.pool,i.token.poolAddress),{contractAddress:o,contractName:s,functionName:d,functionArgs:c}=r.claimRewards({ftRef:i.token.tokenAddress}),g=(0,Ze.makeRandomPrivKey)(),A=(0,Ze.privateKeyToPublic)(g),l=Lt(0,"gte",i.token.poolAddress,i.token.tokenAddress,Pt(i.token)),u={contractAddress:o,contractName:s,functionName:d,functionArgs:c,publicKey:A,validateWithAbi:!0,network:this.client.network,postConditions:[l],postConditionMode:Ze.PostConditionMode.Deny};return(await(0,Ze.makeUnsignedContractCall)(u)).serialize()}};var ei=ce(cn());fe();fe();Re();function lr(a){return a=S(a),a.startsWith(`${gn}::balance::Balance<`)}var Se=class a{__StructClass=!0;static get $typeName(){return`${gn}::balance::Balance`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;value;constructor(n,i){this.$fullTypeName=$(a.$typeName,...n),this.$typeArgs=n,this.value=i.value}static reified(n){return{typeName:a.$typeName,fullTypeName:$(a.$typeName,L(n)),typeArgs:[L(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,r)=>a.fetch(i,n,r),new:i=>new a([L(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return le(a.reified(n))}static get p(){return a.phantom}static get bcs(){return v.struct("Balance",{value:v.u64()})}static fromFields(n,i){return a.reified(n).new({value:K("u64",i.value)})}static fromFieldsWithTypes(n,i){if(!lr(i.type))throw new Error("not a Balance type");return Zt(i,[n]),a.reified(n).new({value:J("u64",i.fields.value)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({value:z("u64",i.value)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return ht($(a.$typeName,L(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!lr(i.type))throw new Error(`object at ${i.fields.id} is not a Balance object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!lr(i.bcs.type))throw new Error("object at is not a Balance object");let r=Ge(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let o=S(r[0]),s=S(L(n));if(o!==S(L(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${o}'`);return a.fromBcs(n,(0,E.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,r){let o=await n.getObject({id:r,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Balance object at id ${r}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!lr(o.data.bcs.type))throw new Error(`object at id ${r} is not a Balance object`);return a.fromSuiObjectData(i,o.data)}};var ms=ce(cn());fe();var us=ce(cn());Re();function ur(a){return a=S(a),a.startsWith(`${us.PKG_V1}::pool_rewards::PoolRewards<`)}var Tn=class a{__StructClass=!0;static get $typeName(){return`${us.PKG_V1}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(n,i){this.$fullTypeName=$(a.$typeName,...n),this.$typeArgs=n,this.accRewardPerShareP=i.accRewardPerShareP,this.adminFeeShareBp=i.adminFeeShareBp,this.adminFee=i.adminFee,this.rewards=i.rewards,this.lpSupply=i.lpSupply}static reified(n){return{typeName:a.$typeName,fullTypeName:$(a.$typeName,L(n)),typeArgs:[L(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,r)=>a.fetch(i,n,r),new:i=>new a([L(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return le(a.reified(n))}static get p(){return a.phantom}static get bcs(){return v.struct("PoolRewards",{acc_reward_per_share_p:v.u128(),admin_fee_share_bp:v.u64(),admin_fee:Se.bcs,rewards:Se.bcs,lp_supply:v.u64()})}static fromFields(n,i){return a.reified(n).new({accRewardPerShareP:K("u128",i.acc_reward_per_share_p),adminFeeShareBp:K("u64",i.admin_fee_share_bp),adminFee:K(Se.reified(n),i.admin_fee),rewards:K(Se.reified(n),i.rewards),lpSupply:K("u64",i.lp_supply)})}static fromFieldsWithTypes(n,i){if(!ur(i.type))throw new Error("not a PoolRewards type");return Zt(i,[n]),a.reified(n).new({accRewardPerShareP:J("u128",i.fields.acc_reward_per_share_p),adminFeeShareBp:J("u64",i.fields.admin_fee_share_bp),adminFee:J(Se.reified(n),i.fields.admin_fee),rewards:J(Se.reified(n),i.fields.rewards),lpSupply:J("u64",i.fields.lp_supply)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{accRewardPerShareP:this.accRewardPerShareP.toString(),adminFeeShareBp:this.adminFeeShareBp.toString(),adminFee:this.adminFee.toJSONField(),rewards:this.rewards.toJSONField(),lpSupply:this.lpSupply.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({accRewardPerShareP:z("u128",i.accRewardPerShareP),adminFeeShareBp:z("u64",i.adminFeeShareBp),adminFee:z(Se.reified(n),i.adminFee),rewards:z(Se.reified(n),i.rewards),lpSupply:z("u64",i.lpSupply)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return ht($(a.$typeName,L(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!ur(i.type))throw new Error(`object at ${i.fields.id} is not a PoolRewards object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!ur(i.bcs.type))throw new Error("object at is not a PoolRewards object");let r=Ge(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let o=S(r[0]),s=S(L(n));if(o!==S(L(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${o}'`);return a.fromBcs(n,(0,E.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,r){let o=await n.getObject({id:r,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolRewards object at id ${r}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!ur(o.data.bcs.type))throw new Error(`object at id ${r} is not a PoolRewards object`);return a.fromSuiObjectData(i,o.data)}};fe();var ps=ce(cn());Re();function pr(a){return a=S(a),a.startsWith(`${ps.PKG_V1}::pool_state::PoolState<`)}var Fn=class a{__StructClass=!0;static get $typeName(){return`${ps.PKG_V1}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(n,i){this.$fullTypeName=$(a.$typeName,...n),this.$typeArgs=n,this.tokenBalance=i.tokenBalance,this.vusdBalance=i.vusdBalance,this.d=i.d,this.a=i.a,this.balanceRatioMinBp=i.balanceRatioMinBp}static reified(n){return{typeName:a.$typeName,fullTypeName:$(a.$typeName,L(n)),typeArgs:[L(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,r)=>a.fetch(i,n,r),new:i=>new a([L(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return le(a.reified(n))}static get p(){return a.phantom}static get bcs(){return v.struct("PoolState",{token_balance:v.u64(),vusd_balance:v.u64(),d:v.u64(),a:v.u64(),balance_ratio_min_bp:v.u64()})}static fromFields(n,i){return a.reified(n).new({tokenBalance:K("u64",i.token_balance),vusdBalance:K("u64",i.vusd_balance),d:K("u64",i.d),a:K("u64",i.a),balanceRatioMinBp:K("u64",i.balance_ratio_min_bp)})}static fromFieldsWithTypes(n,i){if(!pr(i.type))throw new Error("not a PoolState type");return Zt(i,[n]),a.reified(n).new({tokenBalance:J("u64",i.fields.token_balance),vusdBalance:J("u64",i.fields.vusd_balance),d:J("u64",i.fields.d),a:J("u64",i.fields.a),balanceRatioMinBp:J("u64",i.fields.balance_ratio_min_bp)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{tokenBalance:this.tokenBalance.toString(),vusdBalance:this.vusdBalance.toString(),d:this.d.toString(),a:this.a.toString(),balanceRatioMinBp:this.balanceRatioMinBp.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({tokenBalance:z("u64",i.tokenBalance),vusdBalance:z("u64",i.vusdBalance),d:z("u64",i.d),a:z("u64",i.a),balanceRatioMinBp:z("u64",i.balanceRatioMinBp)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return ht($(a.$typeName,L(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!pr(i.type))throw new Error(`object at ${i.fields.id} is not a PoolState object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!pr(i.bcs.type))throw new Error("object at is not a PoolState object");let r=Ge(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let o=S(r[0]),s=S(L(n));if(o!==S(L(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${o}'`);return a.fromBcs(n,(0,E.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,r){let o=await n.getObject({id:r,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolState object at id ${r}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!pr(o.data.bcs.type))throw new Error(`object at id ${r} is not a PoolState object`);return a.fromSuiObjectData(i,o.data)}};Re();function mr(a){return a=S(a),a.startsWith(`${ms.PKG_V1}::pool::Pool<`)}var br=class a{__StructClass=!0;static get $typeName(){return`${ms.PKG_V1}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(n,i){this.$fullTypeName=$(a.$typeName,...n),this.$typeArgs=n,this.id=i.id,this.state=i.state,this.rewards=i.rewards,this.feeShareBp=i.feeShareBp,this.canDeposit=i.canDeposit,this.canWithdraw=i.canWithdraw,this.decimals=i.decimals,this.balance=i.balance}static reified(n){return{typeName:a.$typeName,fullTypeName:$(a.$typeName,L(n)),typeArgs:[L(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,r)=>a.fetch(i,n,r),new:i=>new a([L(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return le(a.reified(n))}static get p(){return a.phantom}static get bcs(){return v.struct("Pool",{id:at.bcs,state:Fn.bcs,rewards:Tn.bcs,fee_share_bp:v.u64(),can_deposit:v.bool(),can_withdraw:v.bool(),decimals:v.u8(),balance:Se.bcs})}static fromFields(n,i){return a.reified(n).new({id:K(at.reified(),i.id),state:K(Fn.reified(n),i.state),rewards:K(Tn.reified(n),i.rewards),feeShareBp:K("u64",i.fee_share_bp),canDeposit:K("bool",i.can_deposit),canWithdraw:K("bool",i.can_withdraw),decimals:K("u8",i.decimals),balance:K(Se.reified(n),i.balance)})}static fromFieldsWithTypes(n,i){if(!mr(i.type))throw new Error("not a Pool type");return Zt(i,[n]),a.reified(n).new({id:J(at.reified(),i.fields.id),state:J(Fn.reified(n),i.fields.state),rewards:J(Tn.reified(n),i.fields.rewards),feeShareBp:J("u64",i.fields.fee_share_bp),canDeposit:J("bool",i.fields.can_deposit),canWithdraw:J("bool",i.fields.can_withdraw),decimals:J("u8",i.fields.decimals),balance:J(Se.reified(n),i.fields.balance)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{id:this.id,state:this.state.toJSONField(),rewards:this.rewards.toJSONField(),feeShareBp:this.feeShareBp.toString(),canDeposit:this.canDeposit,canWithdraw:this.canWithdraw,decimals:this.decimals,balance:this.balance.toJSONField()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({id:z(at.reified(),i.id),state:z(Fn.reified(n),i.state),rewards:z(Tn.reified(n),i.rewards),feeShareBp:z("u64",i.feeShareBp),canDeposit:z("bool",i.canDeposit),canWithdraw:z("bool",i.canWithdraw),decimals:z("u8",i.decimals),balance:z(Se.reified(n),i.balance)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return ht($(a.$typeName,L(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!mr(i.type))throw new Error(`object at ${i.fields.id} is not a Pool object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!mr(i.bcs.type))throw new Error("object at is not a Pool object");let r=Ge(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let o=S(r[0]),s=S(L(n));if(o!==S(L(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${o}'`);return a.fromBcs(n,(0,E.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,r){let o=await n.getObject({id:r,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Pool object at id ${r}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!mr(o.data.bcs.type))throw new Error(`object at id ${r} is not a Pool object`);return a.fromSuiObjectData(i,o.data)}};fe();var bs=ce(cn());Re();function yr(a){return a=S(a),a.startsWith(`${bs.PKG_V1}::user_deposit::UserDeposit<`)}var Cr=class a{__StructClass=!0;static get $typeName(){return`${bs.PKG_V1}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;id;lpAmount;rewardDebt;constructor(n,i){this.$fullTypeName=$(a.$typeName,...n),this.$typeArgs=n,this.id=i.id,this.lpAmount=i.lpAmount,this.rewardDebt=i.rewardDebt}static reified(n){return{typeName:a.$typeName,fullTypeName:$(a.$typeName,L(n)),typeArgs:[L(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,r)=>a.fetch(i,n,r),new:i=>new a([L(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return le(a.reified(n))}static get p(){return a.phantom}static get bcs(){return v.struct("UserDeposit",{id:at.bcs,lp_amount:v.u64(),reward_debt:v.u64()})}static fromFields(n,i){return a.reified(n).new({id:K(at.reified(),i.id),lpAmount:K("u64",i.lp_amount),rewardDebt:K("u64",i.reward_debt)})}static fromFieldsWithTypes(n,i){if(!yr(i.type))throw new Error("not a UserDeposit type");return Zt(i,[n]),a.reified(n).new({id:J(at.reified(),i.fields.id),lpAmount:J("u64",i.fields.lp_amount),rewardDebt:J("u64",i.fields.reward_debt)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{id:this.id,lpAmount:this.lpAmount.toString(),rewardDebt:this.rewardDebt.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({id:z(at.reified(),i.id),lpAmount:z("u64",i.lpAmount),rewardDebt:z("u64",i.rewardDebt)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return ht($(a.$typeName,L(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!yr(i.type))throw new Error(`object at ${i.fields.id} is not a UserDeposit object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!yr(i.bcs.type))throw new Error("object at is not a UserDeposit object");let r=Ge(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let o=S(r[0]),s=S(L(n));if(o!==S(L(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${o}'`);return a.fromBcs(n,(0,E.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,r){let o=await n.getObject({id:r,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching UserDeposit object at id ${r}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!yr(o.data.bcs.type))throw new Error(`object at id ${r} is not a UserDeposit object`);return a.fromSuiObjectData(i,o.data)}};function Sc(a,n,i){if(n.length===0||!n[0])return[];let r=n[0],o=a.reduce((c,g)=>c+BigInt(g),BigInt(0)),s=BigInt(r.balance),d=[];for(let c of n.slice(1)){if(s>o)return Zc(i,r,d,a);s+=BigInt(c.balance),d.push(c)}return s>=o?Zc(i,r,d,a):[]}function Zc(a,n,i,r){let o=r.map(s=>a.pure.u64(s));return i.length>0&&a.mergeCoins(n.coinObjectId,i.map(s=>s.coinObjectId)),a.splitCoins(n.coinObjectId,o)}var Il="0x0000000000000000000000000000000000000000000000000000000000000000";async function Vc(a,n,i){let r=await a.devInspectTransactionBlock({sender:Il,transactionBlock:n});if(r.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(r,null,2)}`);let o=r.results?.pop()?.returnValues?.pop();if(!o)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(r,null,2)}`);let[s,d]=o;return typeof i=="object"?i.fromBcs(Uint8Array.from(s)).toJSONField():Ki(i).parse(Uint8Array.from(s))}var Ir=class extends Ye{constructor(i,r){super();this.suiRpcUrl=i;this.api=r;this.client=new Ut({url:i})}chainType="SUI";client;async getUserBalanceInfo(i,r){if(!r.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=r.suiAddresses;if(!o)throw new h("SUI token must contain 'suiAddresses'");(0,ei.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin);let d=(await this.fetchDeposits(i,r.originTokenAddress)).reduce((c,g)=>{if(g.data)return c.lpAmount+=BigInt(g.data.content.fields.lp_amount),c.rewardDebt+=BigInt(g.data.content.fields.reward_debt),c;throw new h("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new pe({lpAmount:d.lpAmount.toString(),rewardDebt:d.rewardDebt.toString()})}async fetchDeposits(i,r){return await St(o=>this.client.getOwnedObjects({owner:i,filter:{StructType:Cr.phantom(le(r)).phantomType},options:{showContent:!0},cursor:o}))}async getPoolInfoFromChain(i){let r=i.suiAddresses;if(!r)throw new h("SUI token must contain 'suiAddresses'");if((0,ei.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin),!i.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=48,s=new Gt;gc(s,i.originTokenAddress,r.bridgeObjectAddress);let d=await Vc(this.client,s,br.reified(le(i.originTokenAddress))),c=d.state.tokenBalance,g=d.state.vusdBalance,A=me({tokenBalance:c,vUsdBalance:g});return{dValue:d.state.d,aValue:d.state.a,totalLpAmount:d.rewards.lpSupply,vUsdBalance:g,tokenBalance:c,accRewardPerShareP:d.rewards.accRewardPerShareP,p:o,imbalance:A}}async buildRawTransactionDeposit(i){let r=i.token.suiAddresses;if(!r)throw new h("SUI token must contain 'suiAddresses'");if((0,ei.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin),!i.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=await St(u=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:u}));if(o.length===0||!o[0])throw new dt("No coins to deposit");let s=o[0],d=new Gt;d.setSender(i.accountAddress);let{depositObj:c,isNewDeposit:g}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,d),[A]=Sc([i.amount],o,d);if(!A)throw new dt("No coins to deposit");if(!i.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let l=sc(d,i.token.originTokenAddress,{bridge:r.bridgeObjectAddress,userDeposit:c,coin:A});return d.mergeCoins(s.coinObjectId,[l]),g&&d.transferObjects([c],i.accountAddress),await d.toJSON({client:this.client})}async getDepositObject(i,r,o){let s=await this.fetchDeposits(i,r);if(s.length===0||!s[0]){let d=le(r).phantomType;return{depositObj:Ac(o,d),isNewDeposit:!0}}else{if(s[0].data?.objectId)return{depositObj:s[0].data.objectId,isNewDeposit:!1};throw new h("Something went wrong while deposit")}}async buildRawTransactionWithdraw(i){let r=i.token.suiAddresses;if(!r)throw new h("SUI token must contain 'suiAddresses'");if((0,ei.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin),!i.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=le(i.token.originTokenAddress).phantomType,s=new Gt;s.setSender(i.accountAddress);let{depositObj:d,isNewDeposit:c}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,s);if(c)throw new dt("No deposit found");let g=dc(s,o,{bridge:r.bridgeObjectAddress,userDeposit:d,amountLp:BigInt(i.amount)}),A=await St(l=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:l}));if(!g[0]||!g[1])throw new h("No rewards found");return A[0]?s.mergeCoins(A[0].coinObjectId,[g[0],g[1]]):(s.mergeCoins(g[0],[g[1]]),s.transferObjects([g[0]],i.accountAddress)),await s.toJSON({client:this.client})}async buildRawTransactionClaimRewards(i){let r=i.token.suiAddresses;if(!r)throw new h("SUI token must contain 'suiAddresses'");if((0,ei.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin),!i.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=le(i.token.originTokenAddress).phantomType,s=new Gt;s.setSender(i.accountAddress);let{depositObj:d,isNewDeposit:c}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,s);if(c)throw new dt("No deposit found");let g=cc(s,o,{bridge:r.bridgeObjectAddress,userDeposit:d}),A=await St(l=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:l}));return A[0]?s.mergeCoins(A[0].coinObjectId,[g]):s.transferObjects([g],i.accountAddress),await s.toJSON({client:this.client})}};var qi=require("web3"),Xc=require("web3-eth-abi");var ea=class extends Ye{constructor(i,r,o){super();this.tronWeb=i;this.api=r;this.tronJsonRpc=o}chainType="TRX";P=52;async getUserBalanceInfo(i,r){let o;if(this.tronJsonRpc)try{o=await this.getUserBalanceInfoByBatch(this.tronJsonRpc,i,r)}catch{o=await this.getUserBalanceInfoPerProperty(i,r)}else o=await this.getUserBalanceInfoPerProperty(i,r);return o}async getUserBalanceInfoByBatch(i,r,o){let s=Yi(o.poolAddress),d=Yi(r),c=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("userRewardDebt",d)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("balanceOf",d)},"latest"]}],A=await(await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)})).json();if(Array.isArray(A)&&A.length===2){let l=u=>{let y=A.find(C=>C.id===u);if(!y||!y.result)throw new Error(`Missing or invalid result for id ${u}`);return qi.Web3.utils.toBigInt(y.result).toString()};return new pe({lpAmount:qi.Web3.utils.toBigInt(l(2)).toString(),rewardDebt:qi.Web3.utils.toBigInt(l(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(i,r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(i);let o=this.getContract(r.poolAddress),s=(await o.methods.userRewardDebt(i).call()).toString(),d=(await o.methods.balanceOf(i).call()).toString();return new pe({lpAmount:d,rewardDebt:s})}async getPoolInfoFromChain(i){let r;if(this.tronJsonRpc)try{r=await this.getPoolInfoByBatch(this.tronJsonRpc,i)}catch{r=await this.getPoolInfoPerProperty(i)}else r=await this.getPoolInfoPerProperty(i);return r}async getPoolInfoByBatch(i,r){let o=Yi(r.poolAddress),s=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("a")},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("d")},"latest"]},{jsonrpc:"2.0",id:3,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("tokenBalance")},"latest"]},{jsonrpc:"2.0",id:4,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("vUsdBalance")},"latest"]},{jsonrpc:"2.0",id:5,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("totalSupply")},"latest"]},{jsonrpc:"2.0",id:6,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("accRewardPerShareP")},"latest"]}],c=await(await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)})).json();if(Array.isArray(c)&&c.length===6){let g=y=>{let C=c.find(Y=>Y.id===y);if(!C||!C.result)throw new Error(`Missing or invalid result for id ${y}`);return qi.Web3.utils.toBigInt(C.result).toString()},A=g(3),l=g(4),u=me({tokenBalance:A,vUsdBalance:l});return{aValue:g(1),dValue:g(2),tokenBalance:A,vUsdBalance:l,totalLpAmount:g(5),accRewardPerShareP:g(6),p:this.P,imbalance:u}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(i){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(i.poolAddress);let r=this.getContract(i.poolAddress),[o,s,d,c,g,A]=await Promise.all([r.methods.a().call(),r.methods.d().call(),r.methods.tokenBalance().call(),r.methods.vUsdBalance().call(),r.methods.totalSupply().call(),r.methods.accRewardPerShareP().call()]),l=d.toString(),u=c.toString(),y=me({tokenBalance:l,vUsdBalance:u});return{aValue:o.toString(),dValue:s.toString(),tokenBalance:l,vUsdBalance:u,totalLpAmount:g.toString(),accRewardPerShareP:A.toString(),p:this.P,imbalance:y}}buildRawTransactionDeposit(i){let{amount:r,accountAddress:o}=i,s=[{type:"uint256",value:r}];return this.buildRawTransaction(i.token.poolAddress,"deposit(uint256)",s,"0",o)}buildRawTransactionWithdraw(i){let{amount:r,accountAddress:o}=i,s=[{type:"uint256",value:r}];return this.buildRawTransaction(i.token.poolAddress,"withdraw(uint256)",s,"0",o)}buildRawTransactionClaimRewards(i){let{accountAddress:r}=i,o=[];return this.buildRawTransaction(i.token.poolAddress,"claimRewards()",o,"0",r)}async buildRawTransaction(i,r,o,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(i,r,{callValue:+s},o,d);if(!c?.result?.result)throw new h("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}getContract(i){return this.tronWeb.contract(_i.abi,i)}getFunctionAbi(i,...r){let o=_i.abi.find(s=>s.type==="function"&&"name"in s&&s.name===i);if(!o)throw new Error(`${i} method not found in Pool ABI`);return(0,Xc.encodeFunctionCall)(o,r)}};var hr=class{constructor(n,i,r,o){this.api=n;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=o;this.rawTxBuilder=new sr(n,i,this.params,o);let s=r.cachePoolInfoChainSec>0?r.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new Qt({defaultTtl:s})}rawTxBuilder;cache;async getAllowance(n,i){if(i){let r=n,o=i;return await this.tokenService.getAllowance({...o,spender:o.token.poolAddress},r)}else{let r=n;return await this.tokenService.getAllowance({...r,spender:r.token.poolAddress})}}async checkAllowance(n,i){if(i){let r=n,o=i;return this.tokenService.checkAllowance({...o,spender:o.token.poolAddress},r)}else{let r=n;return this.tokenService.checkAllowance({...r,spender:r.token.poolAddress})}}async approve(n,i){return this.tokenService.approve(n,{...i,spender:i.token.poolAddress})}async getAmountToBeDeposited(n,i,r){Q(n),O("amount",n,i.decimals);let o=await this.getPoolInfoFromChain(i,r),{vUsdBalance:s,tokenBalance:d,aValue:c,dValue:g}=o,A=Bc(n,c,g,d,s);return M(A,3).toFixed()}async getAmountToBeWithdrawn(n,i,r,o){Q(n),O("amount",n,r.decimals);let s=await this.getPoolInfoFromChain(r,o),d=Wc(n),c=Ve(d,r.decimals),A=(await this.getUserBalanceInfo(i,r,o)).earned(s)||"0",l=(0,Mc.Big)(c).plus(A).toFixed();return M(l,r.decimals).toFixed()}async getUserBalanceInfo(n,i,r){return _n(i.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).getUserBalanceInfo(n,i)}async getPoolInfoFromChain(n,i){let r={chainSymbol:n.chainSymbol,poolAddress:n.poolAddress},o=this.cache.get(r);if(o)return o;{let s=await _n(n.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).getPoolInfoFromChain(n);return this.cache.put(r,s),this.api.cachePut({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress},s),s}}};function _n(a,n,i,r,o){switch(k.getChainProperty(a).chainType){case"EVM":{if(o)return new $i(o,n);{let s=i.getNodeRpcUrl(a),d=new ti.Web3(s);return d.defaultReturnFormat={number:ti.FMT_NUMBER.STR,bytes:ti.FMT_BYTES.HEX},new $i(d,n)}}case"TRX":{let s=i.getNodeRpcUrl(a),d=r.tronJsonRpc;if(o)return new ea(o,n,d);{let c=new Pc.TronWeb({fullHost:s});return new ea(c,n,d)}}case"SOLANA":{let s=i.getNodeRpcUrl(a);return new dr(s,n)}case"SRB":return new gr(i,r,n);case"SUI":return new Ir(i.getNodeRpcUrl(a),n);case"ALG":if(o){let s=o,d=ys.AlgorandClient.fromClients({algod:s});return new Ei(d,n)}else{let s=i.getNodeRpcUrl(a),d=ys.AlgorandClient.fromConfig({algodConfig:{server:s}});return new Ei(d,n)}case"STX":{let s=i.getNodeRpcUrl(a);return new Ar(s,r,n)}}}var jc=require("tronweb"),ii=require("web3");var hl={abi:[{inputs:[{internalType:"string",name:"tokenName_",type:"string"},{internalType:"string",name:"tokenSymbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"lpAmount",type:"uint256"}],name:"Deposited",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"DepositedRewards",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[4]",name:"values",type:"uint256[4]"}],name:"MultiTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdrawn",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"NUM_TOKENS",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"minVirtualAmount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"depositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"getEstimatedAmountOnDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getRewardsAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"getWithdrawProportionAmount",outputs:[{internalType:"uint256[4]",name:"",type:"uint256[4]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"pools",outputs:[{internalType:"contract IPool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"contract IPool",name:"pool",type:"address"}],name:"setPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subBalanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subDepositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subTotalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"tokens",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},vr=hl;var Nn=class{};var ta=class extends Nn{constructor(i,r){super();this.web3=i;this.api=r}chainType="EVM";async balanceOf(i){let r=(await this.getYieldContract(i.token.yieldAddress).methods.balanceOf(i.owner).call()).toString();return M(r,3).toFixed()}async getEstimatedAmountOnDeposit(i){let r=X(i.amount,i.token.decimals).toFixed(),o=(await this.getYieldContract(i.token.yieldAddress).methods.getEstimatedAmountOnDeposit(r,i.token.yieldId).call()).toString();return M(o,3).toFixed()}async getWithdrawProportionAmount(i){let r=X(i.amount,3).toFixed();return await this.getYieldContract(i.cydToken.yieldAddress).methods.getWithdrawProportionAmount(i.owner,r).call()}async buildRawTransactionDeposit(i){return Promise.resolve({...this.buildTxParams({owner:i.owner,yieldAddress:i.token.yieldAddress}),data:this.getYieldContract(i.token.yieldAddress).methods.deposit(i.amount,i.token.yieldId,i.minVirtualAmount).encodeABI()})}async buildRawTransactionWithdraw(i){return Promise.resolve({...this.buildTxParams({owner:i.owner,yieldAddress:i.token.yieldAddress}),data:this.getYieldContract(i.token.yieldAddress).methods.withdraw(i.amount).encodeABI()})}buildTxParams(i){return{from:i.owner,to:i.yieldAddress,value:"0"}}getYieldContract(i){return new this.web3.eth.Contract(vr.abi,i)}};var Rr=class{constructor(n,i,r,o){this.api=n;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=o}async approve(n,i){return this.tokenService.buildRawTransactionApprove({...n,spender:n.token.yieldAddress},i)}async deposit(n,i){return Q(n.amount),O("amount",n.amount,n.token.decimals),Q(n.minVirtualAmount),O("minVirtualAmount",n.minVirtualAmount,3),n.amount=X(n.amount,n.token.decimals).toFixed(),n.minVirtualAmount=X(n.minVirtualAmount,3).toFixed(),ni(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,i).buildRawTransactionDeposit(n)}async withdraw(n,i){return Q(n.amount),O("amount",n.amount,3),n.amount=X(n.amount,3).toFixed(),ni(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,i).buildRawTransactionWithdraw(n)}};var na=class extends Nn{constructor(i,r){super();this.tronWeb=i;this.api=r}chainType="TRX";async balanceOf(i){let r=(await(await this.getContract(i.token.yieldAddress)).methods.balanceOf(i.owner).call()).toString();return M(r,3).toFixed()}async getEstimatedAmountOnDeposit(i){let r=X(i.amount,i.token.decimals).toFixed(),o=(await(await this.getContract(i.token.yieldAddress)).methods.getEstimatedAmountOnDeposit(r,i.token.yieldId).call()).toString();return M(o,3).toFixed()}async getWithdrawProportionAmount(i){let r=X(i.amount,3).toFixed();return(await(await this.getContract(i.cydToken.yieldAddress)).methods.getWithdrawProportionAmount(i.owner,r).call()).toString().split(",")}async buildRawTransactionDeposit(i){let{amount:r,owner:o,token:s,minVirtualAmount:d}=i,c=[{type:"uint256",value:r},{type:"uint256",value:s.yieldId},{type:"uint256",value:d}];return this.buildRawTransaction(i.token.yieldAddress,"deposit(uint256,uint256,uint256)",c,"0",o)}async buildRawTransactionWithdraw(i){let{amount:r,owner:o}=i,s=[{type:"uint256",value:r}];return this.buildRawTransaction(i.token.yieldAddress,"withdraw(uint256)",s,"0",o)}async buildRawTransaction(i,r,o,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(i,r,{callValue:+s},o,d);if(!c?.result?.result)throw new h("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}getContract(i){return this.tronWeb.contract(vr.abi,i)}};function Lc(a){if(!ia(a))throw new yi("Token does not support Yield")}function ia(a){return!!a.yieldAddress&&a.yieldId!==void 0}var fr=class{constructor(n,i,r,o){this.api=n;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=o;this.rawTxBuilder=new Rr(n,i,r,o)}rawTxBuilder;async getCYDTokens(){let n=[],i=await this.api.getChainDetailsMap("pool");return Object.values(i).forEach(r=>{if(r.yieldAddress){let o=r.tokens.find(d=>d.tokenAddress===r.yieldAddress),s=r.tokens.filter(ia);if(s.length>0){let d=o??{allbridgeChainId:r.allbridgeChainId,apr:"",apr30d:"",apr7d:"",bridgeId:r.bridgeId,paddingUtilId:r.paddingUtilId,bridgeAddress:r.bridgeAddress,chainId:r.chainId,chainName:r.name,chainSymbol:r.chainSymbol,chainType:r.chainType,confirmations:r.confirmations,decimals:3,feeShare:"",lpRate:"",name:"Core Yield",poolAddress:"",symbol:"CYD",tokenAddress:r.yieldAddress,transferTime:{},txCostAmount:{maxAmount:"0",swap:"0",transfer:"0"},yieldAddress:r.yieldAddress};n.push({...d,yieldAddress:r.yieldAddress,tokens:s})}}}),n}async getAllowance(n,i){return await this.tokenService.getAllowance({...n,spender:n.token.yieldAddress},i)}async checkAllowance(n,i){return this.tokenService.checkAllowance({...n,spender:n.token.yieldAddress},i)}async balanceOf(n,i){return ni(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,i).balanceOf(n)}async getEstimatedAmountOnDeposit(n,i){return Q(n.amount),O("amount",n.amount,n.token.decimals),ni(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.token.yieldAddress,i).getEstimatedAmountOnDeposit(n)}async getWithdrawAmounts(n,i){Q(n.amount),O("amount",n.amount,3);let r=await ni(n.cydToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,i).getWithdrawProportionAmount(n);return n.cydToken.tokens.filter(o=>r[o.yieldId]!==void 0).map(o=>({amount:M(r[o.yieldId],o.decimals).toFixed(),token:o}))}};function ni(a,n,i,r,o){switch(k.getChainProperty(a).chainType){case"EVM":{if(o)return new ta(o,n);{let s=i.getNodeRpcUrl(a),d=new ii.Web3(s);return d.defaultReturnFormat={number:ii.FMT_NUMBER.STR,bytes:ii.FMT_BYTES.HEX},new ta(d,n)}}case"TRX":{if(o)return new na(o,n);{let s=i.getNodeRpcUrl(a),d=new jc.TronWeb({fullHost:s});return d.setAddress(r),new na(d,n)}}case"SOLANA":throw new H;case"SRB":throw new H;case"SUI":throw new H;case"ALG":throw new H;case"STX":throw new H}}var ue=require("big.js");function Jc(a,n,i){let r=vl(a,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo),o=Rl(r.amountIncludingCommissionInSystemPrecision,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo);return{swapToVUsdCalcResult:r,swapFromVUsdCalcResult:o}}function zc(a,n,i){let r=fl(a,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo),o=Yl(r.amountIncludingCommissionInSystemPrecision,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo);return{swapToVUsdCalcResult:r,swapFromVUsdCalcResult:o}}function vl(a,{feeShare:n,decimals:i},r){let o=(0,ue.Big)(a),s=o.times(n),d=o.minus(s);return{bridgeFeeInTokenPrecision:s.round().toFixed(),amountIncludingCommissionInSystemPrecision:kc(pn(d,i),r),amountExcludingCommissionInSystemPrecision:kc(pn(o,i),r)}}function kc(a,n){if(a.eq(0))return"0";let i=(0,ue.Big)(n.tokenBalance).plus(a),r=Ft(i.toFixed(),n.aValue,n.dValue);return(0,ue.Big)(n.vUsdBalance).minus(r).round().toFixed()}function Rl(a,{feeShare:n,decimals:i},r){if((0,ue.Big)(a).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let s=(0,ue.Big)(a).plus(r.vUsdBalance),d=Ft(s,r.aValue,r.dValue),c=Ve((0,ue.Big)(r.tokenBalance).minus(d),i),g=(0,ue.Big)(c).times(n),A=(0,ue.Big)(c).minus(g).round();return{bridgeFeeInTokenPrecision:g.round().toFixed(),amountIncludingCommissionInTokenPrecision:A.toFixed(),amountExcludingCommissionInTokenPrecision:c.toFixed()}}function fl(a,{feeShare:n,decimals:i},r){let o=(0,ue.Big)(n).div((0,ue.Big)(1).minus(n)),s=(0,ue.Big)(a).times(o),d=(0,ue.Big)(a).plus(s);return{bridgeFeeInTokenPrecision:s.round().toFixed(),amountIncludingCommissionInSystemPrecision:Hc(pn(d,i),r),amountExcludingCommissionInSystemPrecision:Hc(pn(a,i),r)}}function Hc(a,n){let i=(0,ue.Big)(n.tokenBalance).minus(a),r=Ft(i.toFixed(),n.aValue,n.dValue);return(0,ue.Big)(r).minus(n.vUsdBalance).round().toFixed()}function Yl(a,{feeShare:n,decimals:i},r){if((0,ue.Big)(a).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=(0,ue.Big)(r.vUsdBalance).minus(a),s=Ft(o.toFixed(),r.aValue,r.dValue),d=(0,ue.Big)(s).minus(r.tokenBalance),c=Ve(d.toFixed(),i),g=(0,ue.Big)(n).div((0,ue.Big)(1).minus(n)),A=(0,ue.Big)(c).times(g),l=(0,ue.Big)(c).plus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.round().toFixed(),amountExcludingCommissionInTokenPrecision:c.toFixed()}}var _t=require("big.js");function xc(a,n,i,r,o){let s=Tt(a,n,i),d=Ve(s,n.decimals),c=Ri(s,r,o),g=(0,_t.Big)(a).times(n.feeShare),A=(0,_t.Big)(c).div((0,_t.Big)(1).minus(r.feeShare)).minus(c);return{sourceLPSwap:{fee:M(g,n.decimals).neg().round(n.decimals,_t.Big.roundUp).toFixed(),swap:M((0,_t.Big)(a).minus(d).minus(g),n.decimals).neg().round(n.decimals,_t.Big.roundUp).toFixed()},destLPSwap:{fee:M(A,r.decimals).neg().round(r.decimals,_t.Big.roundUp).toFixed(),swap:M(Ve(s,r.decimals).minus(c).minus(A),r.decimals).neg().round(r.decimals,_t.Big.roundUp).toFixed()}}}var Cs=require("@algorandfoundation/algokit-utils"),Br=require("algosdk");var Yr=class{constructor(n){this.nodeRpcUrlsConfig=n}async checkAssetOptIn(n,i,r){let o=this.getAlgorand(r);return Ca(n,i,o)}async buildRawTransactionAssetOptIn(n,i,r){let o=this.getAlgorand(r);typeof n=="string"&&(n=BigInt(n));let s=await o.createTransaction.assetOptIn({assetId:n,sender:i});return qt(s)}async checkAppOptIn(n,i,r){let o=this.getAlgorand(r);return Ia(n,i,o)}async buildRawTransactionAppOptIn(n,i,r){let o=this.getAlgorand(r);typeof n=="string"&&(n=BigInt(n));let s=o.newGroup(),d=o.account.random();s.addAppCallMethodCall({appId:n,method:new Br.ABIMethod({name:"optInToApplication",desc:void 0,args:[],returns:{type:"void",desc:void 0},events:[],readonly:!1}),args:[],sender:i,signer:d,onComplete:Br.OnApplicationComplete.OptInOC});let{transactions:c}=await s.buildTransactions();return qt(...c)}getAlgorand(n){if(n)return Cs.AlgorandClient.fromClients({algod:n});{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl("ALG");return Cs.AlgorandClient.fromConfig({algodConfig:{server:i}})}}};var Ec=ce(require("axios"));var Oc="3.27.0-alpha.15";function Uc(a){return Object.entries(a).reduce((n,i)=>{let r=i[0],o=i[1],s=Nl(r,o);return s&&(n[r]=s),n},{})}function Kc(a){let n={};for(let[i,r]of Object.entries(a)){let o=i;for(let s of r.tokens){let d=ai({chainSymbol:o,poolAddress:s.poolAddress}),c=me(s.poolInfo);n[d]={...s.poolInfo,imbalance:c}}}return n}function Bl(a,n){let{name:i,...r}=a,{poolInfo:o,...s}=n;return{...s,...r,chainName:i}}function Wl(a){switch(a){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5}}function Tl(a){return Object.entries(a).reduce((n,[i,r])=>(n[i]=Fl(r),n),{})}function Fl(a){return Object.entries(a).reduce((n,[i,r])=>{let o=Wl(i);return o&&r!=null&&(n[o]=r),n},{})}function Nl(a,n){let i=k.getChainsProperties()[a];if(!i)return null;let r={...i,allbridgeChainId:n.chainId,bridgeId:n.bridgeId,paddingUtilId:n.paddingUtilId,bridgeAddress:n.bridgeAddress,oftBridgeAddress:n.oftBridgeAddress,yieldAddress:n.yieldAddress,abrPayer:n.abrPayer?{payerAddress:n.abrPayer.payerAddress,abrToken:{chainSymbol:a,tokenAddress:n.abrPayer.tokenAddress,decimals:n.abrPayer.tokenDecimals},payerAvailability:wl(n.abrPayer.payerAvailability)}:void 0,transferTime:Tl(n.transferTime),txCostAmount:n.txCostAmount,confirmations:n.confirmations,suiAddresses:n.suiAddresses};return{...r,tokens:n.tokens.map(o=>Bl(r,o))}}function wl(a){if(!a)return{};let n={};for(let[i,r]of Object.entries(a)){if(!r)continue;let o=Gl[i];o&&(n[o]=!0)}return n}var Gl=Object.fromEntries(Object.entries(jr).map(([a,n])=>[n,a]));function ai(a){return a.chainSymbol+"_"+a.poolAddress}function Qc(a){let n=[];for(let[i,r]of Object.entries(a)){let o=i;for(let s of r.tokens)n.push({chainSymbol:o,poolAddress:s.poolAddress})}return n}function Dc(a){let n={};for(let[i,r]of Object.entries(a)){let o=i;for(let[s,d]of Object.entries(r))d.imbalance=me(d),n[ai({chainSymbol:o,poolAddress:s})]=d}return n}var ri=class{api;constructor(n){this.api=Ec.default.create({baseURL:n.coreApiUrl,headers:{Accept:"application/json",...n.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Oc},params:n.coreApiQueryParams})}async getTokenInfo(){let{data:n}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Uc(n),poolInfoMap:Kc(n)}}async getPendingInfo(){let{data:n}=await this.api.get("/pending-info");return n}async getGasBalance(n,i){let{data:r}=await this.api.get(`/check/${n}/${i}`);return r}async getTransferStatus(n,i){let{data:r}=await this.api.get(`/chain/${n}/${i}`);return r}async getReceiveTransactionCost(n){if(n.messenger===5&&!n.sourceToken)throw new ui("For OFT sourceToken required");let{data:i}=await this.api.post("/receive-fee",n,{headers:{"Content-Type":"application/json"}});return{exchangeRate:i.exchangeRate,fee:i.fee,sourceNativeTokenPrice:i.sourceNativeTokenPrice,abrExchangeRate:i.abrExchangeRate??"50000",adminFeeShareWithExtras:i.adminFeeShareWithExtras}}async getPoolInfoMap(n){let i=n instanceof Array?n:[n],{data:r}=await this.api.post("/pool-info",{pools:i},{headers:{"Content-Type":"application/json"}});return Dc(r)}};var Is=20*1e3,Zl=55*1e3,oi=class{constructor(n){this.apiClient=n;this.tokenInfoCache=new Qt({defaultTtl:Zl}),this.receivedTransactionCache=new Qt({defaultTtl:Is}),this.pendingInfoCache=new Qt({defaultTtl:Is}),this.gasBalanceCache=new Qt({defaultTtl:Is})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let n="TOKEN_INFO_CACHE_KEY",i=this.tokenInfoCache.get(n);if(i)return i;let r=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(n,r),r}async getGasBalance(n,i){let r=`GAS_BALANCE_${n}_${i}`,o=this.gasBalanceCache.get(r);if(o)return o;let s=this.apiClient.getGasBalance(n,i);return this.gasBalanceCache.put(r,s),s}async getPendingInfo(){let n="PENDING_INFO_CACHE_KEY",i=this.pendingInfoCache.get(n);if(i)return i;let r=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(n,r),r}async getReceiveTransactionCost(n){let i=`RECEIVE_TX_COST_${n.sourceChainId}_${n.destinationChainId}_${n.messenger}${n.sourceToken?"_"+n.sourceToken:""}`,r=this.receivedTransactionCache.get(i);if(r)return r;let o=await this.apiClient.getReceiveTransactionCost(n);return this.receivedTransactionCache.put(i,o),o}async getTransferStatus(n,i){return this.apiClient.getTransferStatus(n,i)}async getPoolInfoMap(n){return this.apiClient.getPoolInfoMap(n)}};var si=class{constructor(n){this.apiClient=n}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let n=await this.getChainDetailsMap();return Object.values(n).flatMap(i=>i.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(n,i){return this.apiClient.getGasBalance(n,i)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(n,i){return await this.apiClient.getTransferStatus(n,i)}async getReceiveTransactionCost(n){return await this.apiClient.getReceiveTransactionCost(n)}async getPoolInfoMap(n){return await this.apiClient.getPoolInfoMap(n)}};var di=class{constructor(n,i){this.client=n;this.isStaging=i.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(n){let i=await this.client.getChainDetailsMap(),r={};for(let o in i){let s=i[o];s&&(r[o]={...s,tokens:_c(s.tokens,n,this.isStaging)})}return r}async tokens(n){return _c(await this.client.tokens(),n,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(n,i){return this.client.getGasBalance(n,i)}async getTransferStatus(n,i){return await this.client.getTransferStatus(n,i)}async getReceiveTransactionCost(n){return await this.client.getReceiveTransactionCost(n)}cachePut(n,i){return this.client.cachePut(n,i)}getPoolInfoByKey(n){return this.client.getPoolInfoByKey(n)}refreshPoolInfo(n){return this.client.refreshPoolInfo(n)}};function _c(a,n,i){return a.filter(r=>i?!0:r.flags[n]).map(Sl)}function Sl(a){let{flags:n,...i}=a;return i}var Vl=55*1e3,ci=class{constructor(n){this.client=n;this.poolInfoCache=new hs}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(n,i){return this.client.getTransferStatus(n,i)}getReceiveTransactionCost(n){return this.client.getReceiveTransactionCost(n)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(n,i){return this.client.getGasBalance(n,i)}async getPoolInfoByKey(n){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let i=this.poolInfoCache.get(n);if(i)return i;{let r=await this.client.getPoolInfoMap(n);this.poolInfoCache.putAll(r);let o=r[ai(n)];if(o)return o;throw new h("Cannot find pool info for "+n.poolAddress+" on chain "+n.chainSymbol)}}async refreshPoolInfo(n){let i;if(n)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),i=await this.client.getPoolInfoMap(n);else{let r=await this.client.getChainDetailsMapAndPoolInfoMap();i=await this.client.getPoolInfoMap(Qc(r.chainDetailsMap))}this.poolInfoCache.putAll(i)}cachePut(n,i){this.poolInfoCache.put(ai(n),i)}},hs=class{cache;constructor(){this.cache=new Qt({defaultTtl:Vl})}putAll(n){for(let[i,r]of Object.entries(n))this.cache.put(i,r)}putAllIfNotExists(n){for(let[i,r]of Object.entries(n))this.cache.get(i)||this.cache.put(i,r)}put(n,i){this.cache.put(n,i)}get(n){let i=ai(n);return this.cache.get(i)}};var fs=require("@algorandfoundation/algokit-utils"),eg=require("big.js"),tg=require("tronweb"),ng=require("web3");var vs=require("big.js"),Be=class{async checkAllowance(n){let i=await this.getAllowance(n);return(0,vs.Big)(i).gte((0,vs.Big)(n.amount))}};var aa=class extends Be{constructor(i,r){super();this.algorand=i;this.api=r}chainType="SUI";approve(i){throw new H}buildRawTransactionApprove(i){throw new H}getAllowance(i){throw new H}async getNativeTokenBalance(i){let{account:r}=i;return(await this.algorand.account.getInformation(r)).balance.microAlgo.toString()}async getTokenBalance(i){let{account:r,token:o}=i;try{return(await this.algorand.asset.getAccountInformation(r,BigInt(o.tokenAddress))).balance.toString()}catch(s){if(s instanceof Error)return s.message.includes("account asset info not found"),"0";throw s}}};var Xl={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Wr=Xl;var Ml="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Pl="0xdac17f958d2ee523a2206206994597c13d831ec7",Ll=1e5,ra=class extends Be{constructor(i,r){super();this.web3=i;this.api=r}chainType="EVM";getAllowance(i){let r=i.token.tokenAddress,o=i.owner,s=i.spender;return this.getAllowanceByTokenAddress(r,o,s)}getAllowanceByTokenAddress(i,r,o){return this.getERC20Contract(i).methods.allowance(r,o).call()}async getTokenBalance(i){return await this.getERC20Contract(i.token.tokenAddress).methods.balanceOf(i.account).call()}async getNativeTokenBalance(i){return(await this.web3.eth.getBalance(i.account)).toString()}async approve(i){if(this.isUsdt(i.tokenAddress)&&await this.getAllowanceByTokenAddress(i.tokenAddress,i.owner,i.spender)!=="0"){let s=await this.buildRawTransactionApprove({...i,amount:"0"});await this.sendRawTransaction(s,i.chainSymbol)}let r=await this.buildRawTransactionApprove(i);return await this.sendRawTransaction(r,i.chainSymbol)}isUsdt(i){return i.toLowerCase()===Pl}buildRawTransactionApprove(i){let{tokenAddress:r,spender:o,owner:s,amount:d}=i,g=this.getERC20Contract(r).methods.approve(o,d==null?Ml:tr(d));return Promise.resolve({from:s,to:r,value:"0",data:g.encodeABI()})}async sendRawTransaction(i,r){let o=i,s={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};r==="POL"?o.gas=Ll:o.gas=await this.web3.eth.estimateGas(i);let{transactionHash:d}=await this.web3.eth.sendTransaction({...o,...s});return{txId:d.toString()}}getERC20Contract(i){return new this.web3.eth.Contract(Wr.abi,i)}};var $c=require("@project-serum/anchor"),wn=require("@solana/web3.js");var Tr=class extends Be{constructor(i,r){super();this.solanaRpcUrl=i;this.api=r}chainType="SOLANA";approve(i){throw new H}buildRawTransactionApprove(i){throw new H}buildAnchorProvider(i){let r=new wn.Connection(this.solanaRpcUrl,"confirmed"),o=new wn.PublicKey(i);return new $c.AnchorProvider(r,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(i){throw new H}async getTokenBalance(i){let{account:r,token:o}=i;try{let s=await At(new wn.PublicKey(r),new wn.PublicKey(o.tokenAddress));return(await jn(s,this.buildAnchorProvider(r))).amount.toString()}catch(s){if(s instanceof Error)return s.message.startsWith("Account does not exist"),"0";throw s}}async getNativeTokenBalance(i){return(await this.buildAnchorProvider(i.account).connection.getBalance(new wn.PublicKey(i.account))).toString()}};var Rs=require("@stellar/stellar-sdk");var Fr=class extends Be{constructor(i,r,o){super();this.nodeRpcUrlsConfig=i;this.params=r;this.api=o}chainType="SRB";getAllowance(){throw new H}async getTokenBalance(i){if(!i.token.originTokenAddress)throw new h("OriginTokenAddress missing");let[r,o]=i.token.originTokenAddress.split(":"),s=new Rs.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),d;try{d=await s.loadAccount(i.account)}catch(A){if(A instanceof Rs.NotFoundError)return"0";throw A}let g=d.balances.find(A=>(A.asset_type==="credit_alphanum4"||A.asset_type==="credit_alphanum12")&&A.asset_code==r&&A.asset_issuer==o);return g?.balance?X(g.balance,k.getChainDecimalsByType(k.getChainProperty(i.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(i){let d=(await new Rs.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(i.account)).balances.find(c=>c.asset_type==="native");return d?.balance?X(d.balance,k.getChainDecimalsByType(k.getChainProperty(i.chainSymbol).chainType)).toFixed():"0"}approve(){throw new H}buildRawTransactionApprove(){throw new H}};var wr=require("@clarigen/core"),qc=require("@stacks/network");var Nr=class extends Be{constructor(i,r,o){super();this.nodeRpcUrl=i;this.params=r;this.api=o;let s=(0,qc.createNetwork)({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new wr.ClarigenClient(s,this.params.stxHeroApiKey)}chainType="STX";client;async getTokenBalance(i){let r=(0,wr.contractFactory)(lt.ftToken,i.token.tokenAddress);return(await this.client.roOk(r.getBalance({owner:i.account}))).toString()}async getNativeTokenBalance(i){let r=`${this.nodeRpcUrl}/extended/v1/address/${i.account}/stx`,o=await fetch(r,{headers:this.params.stxHeroApiKey?{"x-api-key":this.params.stxHeroApiKey}:void 0});if(!o.ok)throw new Error(`Failed to fetch account: ${o.status}`);let d=(await o.json()).balance;return BigInt(d).toString()}getAllowance(i){throw new H}checkAllowance(i){throw new H}approve(i){throw new H}buildRawTransactionApprove(i){throw new H}};var Gr=class extends Be{constructor(i,r){super();this.suiRpcUrl=i;this.api=r;this.suiClient=new Ut({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(i){throw new H}buildRawTransactionApprove(i){throw new H}getAllowance(i){throw new H}async getTokenBalance(i){if(!i.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:i.account,coinType:i.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(i){let r=await St(o=>this.suiClient.getCoins({owner:i.account,cursor:o}));return r.length===0?"0":r.reduce((o,s)=>o+BigInt(s.balance),BigInt(0)).toString()}};var jl="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",oa=class extends Be{constructor(i,r){super();this.tronWeb=i;this.api=r}chainType="TRX";async getAllowance(i){let{token:{tokenAddress:r},owner:o}=i;return(await(await this.getContract(r)).methods.allowance(o,i.spender).call()).toString()}async getTokenBalance(i){return(await(await this.getContract(i.token.tokenAddress)).balanceOf(i.account).call()).toString()}async getNativeTokenBalance(i){return(await this.tronWeb.trx.getBalance(i.account)).toString()}async approve(i){let r=await this.buildRawTransactionApprove(i);return await nr(this.tronWeb,r)}async buildRawTransactionApprove(i){let{tokenAddress:r,spender:o,owner:s,amount:d}=i,c=d==null?jl:tr(d),g=[{type:"address",value:o},{type:"uint256",value:c}];return this.buildRawTransaction(r,"approve(address,uint256)",g,"0",s)}getContract(i){return this.tronWeb.contract(Wr.abi,i)}async buildRawTransaction(i,r,o,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(i,r,{callValue:+s},o,d);if(!c?.result?.result)throw new h("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}};var gi=class{constructor(n,i,r){this.api=n;this.nodeRpcUrlsConfig=i;this.params=r}async getAllowance(n,i){let r=await this.getChainTokenService(n.token.chainSymbol,n.owner,i).getAllowance(n);return M(r,n.token.decimals).toFixed()}async checkAllowance(n,i){return Q(n.amount),O("amount",n.amount,n.token.decimals),this.getChainTokenService(n.token.chainSymbol,n.owner,i).checkAllowance(this.prepareCheckAllowanceParams(n))}async approve(n,i){return i.amount&&(kr(i.amount),O("amount",i.amount,i.token.decimals)),this.getChainTokenService(i.token.chainSymbol,i.owner,n).approve(this.prepareApproveParams(i))}async buildRawTransactionApprove(n,i){return n.amount&&(kr(n.amount),O("amount",n.amount,n.token.decimals)),this.getChainTokenService(n.token.chainSymbol,n.owner,i).buildRawTransactionApprove(this.prepareApproveParams(n))}async getTokenBalance(n,i){let r=await this.getChainTokenService(n.token.chainSymbol,n.account,i).getTokenBalance(n);return n.token.decimals?M(r,n.token.decimals).toFixed():r}async getNativeTokenBalance(n,i){let r=await this.getChainTokenService(n.chainSymbol,n.account,i).getNativeTokenBalance(n);return{int:r,float:M(r,k.getChainDecimalsByType(k.getChainProperty(n.chainSymbol).chainType)).toFixed()}}getChainTokenService(n,i,r){switch(k.getChainProperty(n).chainType){case"EVM":{if(r)return new ra(r,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new ra(new ng.Web3(o),this.api)}}case"TRX":{if(r)return new oa(r,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n),s=new tg.TronWeb({fullHost:o});return s.setAddress(i),new oa(s,this.api)}}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new Tr(o,this.api)}case"SRB":return new Fr(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new Gr(this.nodeRpcUrlsConfig.getNodeRpcUrl(n),this.api);case"ALG":if(r){let o=r,s=fs.AlgorandClient.fromClients({algod:o});return new aa(s,this.api)}else{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n),s=fs.AlgorandClient.fromConfig({algodConfig:{server:o}});return new aa(s,this.api)}case"STX":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new Nr(o,this.params,this.api)}}}prepareCheckAllowanceParams(n){return{...n,amount:X(n.amount,n.token.decimals)}}prepareApproveParams(n){return{tokenAddress:n.token.tokenAddress,owner:n.owner,spender:n.spender,chainSymbol:n.token.chainSymbol,amount:n.amount==null?void 0:(0,eg.Big)(n.amount).toFixed()}}};var Zr=class{constructor(n,i){this.nodeRpcUrlsConfig=n;this.params=i;let r=new ri(i),o=new oi(r),s=new si(o),d=new ci(s);this.api=new di(d,i),this.tokenService=new gi(this.api,n,i)}api;tokenService;buildRawTransactionApprove(n,i){return this.tokenService.buildRawTransactionApprove(n,i)}checkAllowance(n,i){return this.tokenService.checkAllowance(n,i)}getAllowance(n,i){return this.tokenService.getAllowance(n,i)}};var Ai=require("@solana/web3.js");var Sr=class{constructor(n,i){this.nodeRpcUrlsConfig=n;this.params=i}async addMemoToTx(n,i){if(i.length>28)throw new h("InvalidArgumentException memo cannot be more than 28 characters");let r=new Ai.Connection(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await bn(n,r),s=Ai.TransactionMessage.decompile(n.message,{addressLookupTableAccounts:o}),d=s.instructions[s.instructions.length-1];if(!d?.keys)throw new h("Last instruction or its keys are invalid.");d.keys.push({pubkey:new Ai.PublicKey(Buffer.from(i)),isSigner:!1,isWritable:!1}),n.message=s.compileToV0Message(o)}};var ie=require("@stellar/stellar-sdk");var BN=require("@stellar/stellar-sdk"),kl=BN.contract.Spec,Hl=BN.contract.Client;var sa=class extends Hl{constructor(i){super(new kl(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),i);this.options=i}fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}};var Jl=100,zl=180,Vr=class{constructor(n,i){this.nodeRpcUrlsConfig=n;this.params=i}async buildChangeTrustLineXdrTx(n){let r=await new ie.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(n.sender),s=await this.getContract(sa,n.tokenAddress).name();if(qn(s))throw new h;let d=$n(s);if(!d)throw new h;let[c,g]=d.split(":");if(c===void 0||g===void 0)throw new h("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let A=new ie.Asset(c,g),l=ie.Operation.changeTrust({asset:A,limit:n.limit});return new ie.TransactionBuilder(r,{fee:Jl.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(l).setTimeout(zl).build().toXDR()}async getBalanceLine(n,i){let o=await this.getContract(sa,i).name();if(qn(o))throw new h;let s=$n(o);if(!s)throw new h;let[d,c]=s.split(":"),g=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new ie.Horizon.Server(g).loadAccount(n)).balances.find(y=>(y.asset_type==="credit_alphanum4"||y.asset_type==="credit_alphanum12")&&y.asset_code==d&&y.asset_issuer==c)}async submitTransactionStellar(n){let i=new ie.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),r=ie.TransactionBuilder.fromXDR(n,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await i.submitTransaction(r)}async simulateAndCheckRestoreTxRequiredSoroban(n,i){let r=new ie.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await r.getAccount(i),s=ie.TransactionBuilder.fromXDR(n,this.params.sorobanNetworkPassphrase),d=await r.simulateTransaction(s);if(ie.rpc.Api.isSimulationRestore(d))return new ie.TransactionBuilder(o,{fee:(+ie.BASE_FEE+ +d.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(d.restorePreamble.transactionData.build()).addOperation(ie.Operation.restoreFootprint({})).setTimeout(ie.TimeoutInfinite).build().toXDR()}async sendTransactionSoroban(n){let i=new ie.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=ie.TransactionBuilder.fromXDR(n,this.params.sorobanNetworkPassphrase);return i.sendTransaction(r)}async confirmTx(n,i=15){let r=new ie.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await Ts(()=>r.getTransaction(n),d=>d.status===ie.rpc.Api.GetTransactionStatus.NOT_FOUND,i);if(o.length===0)throw new h("No transaction responses found.");let s=o[o.length-1];if(!s)throw new h("Unexpected error: last response is undefined.");return s}getContract(n,i){let r={contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new n(r)}};var Xr=class{constructor(n,i){this.nodeRpcUrlsConfig=n;this.api=i}_suiBridgeService;async buildSendTxFromCustomTx(n,i,r){return this.suiBridgeService.buildRawTransactionSendFromCustomTx(n,i,r)}get suiBridgeService(){return this._suiBridgeService||(this._suiBridgeService=new En(this.nodeRpcUrlsConfig,this.api)),this._suiBridgeService}};var Mr=class{constructor(n){this.service=n;this.srb=new Vr(n.nodeRpcUrlsConfig,n.params),this.sol=new Sr(n.nodeRpcUrlsConfig,n.params),this.sui=new Xr(n.nodeRpcUrlsConfig,n.api),this.evm=new Zr(n.nodeRpcUrlsConfig,n.params),this.alg=new Yr(n.nodeRpcUrlsConfig)}srb;sol;sui;evm;alg};var gt=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r.WITH_ARB="abr",r))(gt||{}),Bi=(i=>(i.INT="int",i.FLOAT="float",i))(Bi||{});var ye=require("big.js");var da=class{constructor(n){this.nodeRpcUrls=n}getNodeRpcUrl(n){let i=this.nodeRpcUrls[n];if(i!==void 0)return i;throw new bi(n)}},Pr=class{constructor(n,i=li){this.nodeRpcUrlsConfig=n;k.addChainsProperties(i.additionalChainsProperties);let r=new ri(i),o=new oi(r),s=new si(o),d=new ci(s);this.api=new di(d,i),this.tokenService=new gi(this.api,n,i),this.bridge=new ir(this.api,n,i,this.tokenService),this.pool=new hr(this.api,n,i,this.tokenService),this.yield=new fr(this.api,n,i,this.tokenService),this.params=i}api;tokenService;params;bridge;pool;yield;async chainDetailsMap(n){return this.api.getChainDetailsMap(n)}async tokens(n){return this.api.tokens(n)}async tokensByChain(n,i){let o=(await this.api.getChainDetailsMap(i))[n];return o?o.tokens:[]}async getTransferStatus(n,i){return this.api.getTransferStatus(n,i)}async getGasBalance(n,i){return this.api.getGasBalance(n,i)}async checkAddress(){return new Promise(n=>{n({status:"OK",gasBalance:null})})}async getPendingStatusInfo(n,i,r,o){Q(n);let s;i=="float"?(O("amount",n,r.decimals),s=X(n,r.decimals).toFixed()):s=n;let d=Tt(s,r,await Ce(this.api,r)),c=await Ce(this.api,o),g=this.getAmountFromVUsdFormatted(d,o,c),A,l=await this.api.getPendingInfo();for(let u in l[o.chainSymbol]){let y=l[o.chainSymbol];if(!y)throw new h("Cannot find pending info for "+o.chainSymbol);A=y[u]}if(A){let u=Gs(A.totalSentAmount,c),y=this.getAmountFromVUsdFormatted(d,o,u),C;return(0,ye.Big)(y.int).gt(g.int)?C={min:g,max:y}:C={min:y,max:g},{pendingTxs:A.pendingTxs,pendingAmount:{int:Xe(A.totalSentAmount,3,o.decimals).toFixed(0),float:M(A.totalSentAmount,3).toFixed()},estimatedAmount:C}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:g,max:g}}}async getTokenBalance(n,i){return this.tokenService.getTokenBalance(n,i)}async getNativeTokenBalance(n,i){return this.tokenService.getNativeTokenBalance(n,i)}async calculateFeePercentOnSourceChain(n,i){Q(n),O("amountFloat",n,i.decimals);let r=X(n,i.decimals);if(r.eq(0))return 0;let o=Tt(r,i,await Ce(this.api,i)),s=Ve(o,i.decimals);return zr(r,s)}async calculateFeePercentOnDestinationChain(n,i,r){Q(n),O("amountFloat",n,i.decimals);let o=X(n,i.decimals);if(o.eq(0))return 0;let s=Tt(o,i,await Ce(this.api,i)),d=Ri(s,r,await Ce(this.api,r)),c=Ve(s,r.decimals);return zr(c,d)}async getAmountToBeReceivedAndGasFeeOptions(n,i,r,o){return Q(n),O("amountToSendFloat",n,i.decimals),{amountToSendFloat:(0,ye.Big)(n).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(n,i,r,o),gasFeeOptions:await this.getGasFeeOptions(i,r,o)}}async getAmountToSendAndGasFeeOptions(n,i,r,o){return Q(n),O("amountToBeReceivedFloat",n,r.decimals),{amountToSendFloat:await this.getAmountToSend(n,i,r,o),amountToBeReceivedFloat:(0,ye.Big)(n).toFixed(),gasFeeOptions:await this.getGasFeeOptions(i,r,o)}}async getAmountToBeReceived(n,i,r,o){return this.getAmountToBeReceivedCompute(n,i,r,o,async()=>await Ce(this.api,i),async()=>await Ce(this.api,r))}async getAmountToBeReceivedFromChain(n,i,r,o,s,d){return this.getAmountToBeReceivedCompute(n,i,r,o,async()=>await this.pool.getPoolInfoFromChain(i,s),async()=>await this.pool.getPoolInfoFromChain(r,d))}async getAmountToBeReceivedCompute(n,i,r,o=1,s,d){switch(o){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(n,i,r,await s(),await d());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(n,i,r,o);case 5:return this.getAmountToBeReceivedComputeOft(n,i,r)}}getAmountToBeReceivedComputeWithPools(n,i,r,o,s){Q(n),O("amountToSendFloat",n,i.decimals);let d=X(n,i.decimals),c=Tt(d,i,o);return this.getAmountFromVUsdFormatted(c,r,s).float}getAmountToBeReceivedComputeCctp(n,i,r,o){Q(n),O("amountToSendFloat",n,i.decimals);let s=X(n,i.decimals);switch(o){case 3:{if(!i.cctpAddress||!r.cctpAddress||!i.cctpFeeShare)throw new We("Such route does not support CCTP protocol");let d=s.mul((0,ye.Big)(1).minus(i.cctpFeeShare)).round(0,ye.Big.roundUp),c=Xe(d,i.decimals,r.decimals).round(0);return M(c,r.decimals).toFixed()}case 4:{if(!i.cctpV2Address||!r.cctpV2Address||!i.cctpV2FeeShare)throw new We("Such route does not support CCTP V2 protocol");let d=s.mul((0,ye.Big)(1).minus(i.cctpV2FeeShare)).round(0,ye.Big.roundUp),c=Xe(d,i.decimals,r.decimals).round(0);return M(c,r.decimals).toFixed()}}}async getAmountToBeReceivedComputeOft(n,i,r){Q(n),O("amountToSendFloat",n,i.decimals);let o=X(n,i.decimals);if(!i.oftBridgeAddress||!r.oftBridgeAddress||i.oftId!==r.oftId)throw new Te("Such route does not support OFT protocol");let{adminFeeShareWithExtras:s}=await this.api.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:r.allbridgeChainId,messenger:5,sourceToken:i.tokenAddress});if(!s)throw new Te("Such route does not support OFT protocol");let d=o.mul((0,ye.Big)(1).minus(s)).round(0,ye.Big.roundUp),c=Xe(d,i.decimals,r.decimals).round(0);return M(c,r.decimals).toFixed()}async getAmountToSend(n,i,r,o){return this.getAmountToSendCompute(n,i,r,o,()=>Ce(this.api,i),()=>Ce(this.api,r))}async getAmountToSendFromChain(n,i,r,o,s,d){return this.getAmountToSendCompute(n,i,r,o,()=>this.pool.getPoolInfoFromChain(i,s),()=>this.pool.getPoolInfoFromChain(r,d))}async getAmountToSendCompute(n,i,r,o=1,s,d){switch(o){case 1:case 2:return this.getAmountToSendComputeWithPools(n,i,r,await s(),await d());case 3:case 4:return this.getAmountToSendComputeCctp(n,i,r,o);case 5:return this.getAmountToSendComputeOft(n,i,r)}}getAmountToSendComputeWithPools(n,i,r,o,s){Q(n),O("amountToBeReceivedFloat",n,r.decimals);let d=X(n,r.decimals),c=Ss(d,r,s),g=Zs(c,i,o);if((0,ye.Big)(g).lte(0))throw new Wt;return M(g,i.decimals).toFixed()}getAmountToSendComputeCctp(n,i,r,o){Q(n),O("amountToBeReceivedFloat",n,r.decimals);let s=X(n,r.decimals);switch(o){case 3:{if(!i.cctpAddress||!r.cctpAddress||!i.cctpFeeShare)throw new We("Such route does not support CCTP protocol");let d=s.div((0,ye.Big)(1).minus(i.cctpFeeShare)).round(0,ye.Big.roundDown),c=Xe(d,r.decimals,i.decimals).round(0);return M(c,i.decimals).toFixed()}case 4:{if(!i.cctpV2Address||!r.cctpV2Address||!i.cctpV2FeeShare)throw new We("Such route does not support CCTP V2 protocol");let d=s.div((0,ye.Big)(1).minus(i.cctpV2FeeShare)).round(0,ye.Big.roundDown),c=Xe(d,r.decimals,i.decimals).round(0);return M(c,i.decimals).toFixed()}}}async getAmountToSendComputeOft(n,i,r){Q(n),O("amountToBeReceivedFloat",n,r.decimals);let o=X(n,r.decimals);if(!i.oftId||!r.oftId||!i.oftBridgeAddress||i.oftId!==r.oftId)throw new Te("Such route does not support OFT protocol");let{adminFeeShareWithExtras:s}=await this.api.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:r.allbridgeChainId,messenger:5,sourceToken:i.tokenAddress});if(!s)throw new Te("Such route does not support OFT protocol");let d=o.div((0,ye.Big)(1).minus(s)).round(0,ye.Big.roundDown),c=Xe(d,r.decimals,i.decimals).round(0);return M(c,i.decimals).toFixed()}async getGasFeeOptions(n,i,r){return Kr(n,i.allbridgeChainId,r,this.api)}getAverageTransferTime(n,i,r){return n.transferTime?.[i.chainSymbol]?.[r]??null}async getPoolInfoByToken(n){return await this.api.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}async refreshPoolInfo(n){if(n){let r=(n instanceof Array?n:[n]).map(o=>({chainSymbol:o.chainSymbol,poolAddress:o.poolAddress}));return this.api.refreshPoolInfo(r)}return this.api.refreshPoolInfo()}aprInPercents(n){return Xs(n)}async getExtraGasMaxLimits(n,i,r){return await Qr(n,i,r,this.api)}async getVUsdFromAmount(n,i,r){Q(n);let o;i=="float"?(O("amount",n,r.decimals),o=X(n,r.decimals).toFixed()):o=n;let s=Tt(o,r,await Ce(this.api,r));return{int:s,float:M(s,3).toFixed()}}async getAmountFromVUsd(n,i){return this.getAmountFromVUsdFormatted(n,i,await Ce(this.api,i))}getAmountFromVUsdFormatted(n,i,r){Q(n);let o=Ri(n,i,r);if((0,ye.Big)(o).lt(0))throw new Wt;return{int:o,float:M(o,i.decimals).toFixed()}}async swapAndBridgeFeeCalculation(n,i,r){return Jc(n,{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await Ce(this.api,i)},{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Ce(this.api,r)})}async swapAndBridgeFeeCalculationReverse(n,i,r){let o=zc(n,{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await Ce(this.api,i)},{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Ce(this.api,r)}),s=o.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if((0,ye.Big)(s).lt(0))throw new Wt;return o}async getSendAmountDetails(n,i,r,o){Q(n);let s;return i=="float"?(O("amount",n,r.decimals),s=X(n,r.decimals).toFixed()):s=n,xc(s,r,await Ce(this.api,r),o,await Ce(this.api,o))}};function xl(a){return"solanaRpcUrl"in a}var Ys=class{params;bridge;pool;yield;utils;service;constructor(n,i=li){let r;xl(n)?r=new da({SOL:n.solanaRpcUrl,TRX:n.tronRpcUrl}):r=new da(n),this.service=new Pr(r,i),this.bridge=this.service.bridge,this.pool=this.service.pool,this.yield=this.service.yield,this.utils=new Mr(this.service),this.params=i}async chainDetailsMap(n="swap"){return this.service.chainDetailsMap(n)}async tokens(n="swap"){return this.service.tokens(n)}async tokensByChain(n,i="swap"){return this.service.tokensByChain(n,i)}async getTransferStatus(n,i){return this.service.getTransferStatus(n,i)}async getGasBalance(n,i){return this.service.getGasBalance(n,i)}async checkAddress(n,i,r){return await this.service.checkAddress()}async getPendingStatusInfo(n,i,r,o){return this.service.getPendingStatusInfo(n,i,r,o)}async getTokenBalance(n,i){return this.service.getTokenBalance(n,i)}async getNativeTokenBalance(n,i){return this.service.getNativeTokenBalance(n,i)}async calculateFeePercentOnSourceChain(n,i){return this.service.calculateFeePercentOnSourceChain(n,i)}async calculateFeePercentOnDestinationChain(n,i,r){return this.service.calculateFeePercentOnDestinationChain(n,i,r)}async getAmountToBeReceivedAndGasFeeOptions(n,i,r,o){return this.service.getAmountToBeReceivedAndGasFeeOptions(n,i,r,o)}async getAmountToSendAndGasFeeOptions(n,i,r,o){return this.service.getAmountToSendAndGasFeeOptions(n,i,r,o)}async getAmountToBeReceived(n,i,r,o=1){return this.service.getAmountToBeReceived(n,i,r,o)}async getAmountToBeReceivedFromChain(n,i,r,o=1,s,d){return this.service.getAmountToBeReceivedFromChain(n,i,r,o,s,d)}getAmountToBeReceivedFromPools(n,i,r,o,s,d=1){switch(d){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(n,i,r,o,s);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(n,i,r,d)}}async getAmountToSend(n,i,r,o=1){return this.service.getAmountToSend(n,i,r,o)}async getAmountToSendFromChain(n,i,r,o=1,s,d){return this.service.getAmountToSendFromChain(n,i,r,o,s,d)}getAmountToSendFromPools(n,i,r,o,s,d=1){switch(d){case 1:case 2:return this.service.getAmountToSendComputeWithPools(n,i,r,o,s);case 3:case 4:return this.service.getAmountToSendComputeCctp(n,i,r,d)}}async getGasFeeOptions(n,i,r){return this.service.getGasFeeOptions(n,i,r)}getAverageTransferTime(n,i,r){return this.service.getAverageTransferTime(n,i,r)}async getPoolInfoByToken(n){return this.service.getPoolInfoByToken(n)}async refreshPoolInfo(n){return this.service.refreshPoolInfo(n)}aprInPercents(n){return this.service.aprInPercents(n)}async getExtraGasMaxLimits(n,i,r=1){return this.service.getExtraGasMaxLimits(n,i,r)}async getVUsdFromAmount(n,i,r){return this.service.getVUsdFromAmount(n,i,r)}async getAmountFromVUsd(n,i){return this.service.getAmountFromVUsd(n,i)}async swapAndBridgeFeeCalculation(n,i,r){return this.service.swapAndBridgeFeeCalculation(n,i,r)}async swapAndBridgeFeeCalculationReverse(n,i,r){return this.service.swapAndBridgeFeeCalculationReverse(n,i,r)}async getSendAmountDetails(n,i,r,o){return this.service.getSendAmountDetails(n,i,r,o)}};0&&(module.exports={AddressStatus,AllbridgeCoreSdk,AmountFormat,AmountNotEnoughError,ArgumentInvalidDecimalsError,CCTPDoesNotSupportedError,ChainSymbol,ChainType,ErrorCode,ExtraGasMaxLimitExceededError,FeePaymentMethod,InsufficientPoolLiquidityError,InvalidAmountError,InvalidGasFeePaymentOptionError,InvalidMessengerOptionError,InvalidTxError,JupiterError,Messenger,MethodNotSupportedError,NodeRpcUrlNotInitializedError,OFTDoesNotSupportedError,SdkError,SdkRootError,SolanaAutoTxFee,TimeoutError,TxTooLargeError,VerifyTxError,YieldDoesNotSupportedError,assertYieldIsSupported,isYieldSupported,mainnet,nodeRpcUrlsDefault,nodeUrlsDefault});
6
+ Y - is value of virtual usd`,networks:{},state:{schema:{global:{ints:15,bytes:4},local:{ints:2,bytes:0}},keys:{global:{feeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"ZmVlU2hhcmVCUA=="},router:{keyType:"AVMString",valueType:"address",key:"cm91dGVy"},tokenBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5CYWxhbmNl"},vUsdBalance:{keyType:"AVMString",valueType:"AVMUint64",key:"dlVzZEJhbGFuY2U="},balanceRatioMinBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZVJhdGlvTWluQlA="},reserves:{keyType:"AVMString",valueType:"AVMUint64",key:"cmVzZXJ2ZXM="},a:{keyType:"AVMString",valueType:"AVMUint64",key:"YQ=="},d:{keyType:"AVMString",valueType:"AVMUint64",key:"ZA=="},tokenAmountReduce:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRSZWR1Y2U="},tokenAmountIncrease:{keyType:"AVMString",valueType:"AVMUint64",key:"dG9rZW5BbW91bnRJbmNyZWFzZQ=="},stopAuthority:{keyType:"AVMString",valueType:"address",key:"c3RvcEF1dGhvcml0eQ=="},canDeposit:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuRGVwb3NpdA=="},canWithdraw:{keyType:"AVMString",valueType:"AVMUint64",key:"Y2FuV2l0aGRyYXc="},asset:{keyType:"AVMString",valueType:"AVMUint64",key:"YXNzZXQ="},adminFeeShareBP:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVTaGFyZUJQ"},totalSupply:{keyType:"AVMString",valueType:"AVMUint64",key:"dG90YWxTdXBwbHk="},accRewardPerShareP:{keyType:"AVMString",valueType:"AVMBytes",key:"YWNjUmV3YXJkUGVyU2hhcmVQ"},adminFeeAmount:{keyType:"AVMString",valueType:"AVMUint64",key:"YWRtaW5GZWVBbW91bnQ="},owner:{keyType:"AVMString",valueType:"address",key:"b3duZXI="}},local:{balance:{keyType:"AVMString",valueType:"AVMUint64",key:"YmFsYW5jZQ=="},userRewardDebt:{keyType:"AVMString",valueType:"AVMUint64",key:"dXNlclJld2FyZERlYnQ="}},box:{}},maps:{global:{},local:{},box:{}}},bareActions:{create:[],call:[]},sourceInfo:{approval:{sourceInfo:[{pc:[2040],errorMessage:'"Pool: withdraw prohibited'},{pc:[984],errorMessage:"Asset must go to app"},{pc:[998],errorMessage:"CloseTo not allowed"},{pc:[548],errorMessage:"OnCompletion must be CloseOut && can only call when not creating"},{pc:[372],errorMessage:"OnCompletion must be NoOp"},{pc:[559],errorMessage:"OnCompletion must be OptIn && can only call when not creating"},{pc:[536],errorMessage:"OnCompletion must be one of NoOp, OptIn && can only call when not creating"},{pc:[3277],errorMessage:"Only owner"},{pc:[955],errorMessage:"Pool: deposit prohibited"},{pc:[1959],errorMessage:"Pool: is not stopAuthority"},{pc:[2024],errorMessage:"Pool: low token balance"},{pc:[2e3],errorMessage:"Pool: low vUSD balance"},{pc:[1949],errorMessage:"Pool: only router"},{pc:[1480,2289],errorMessage:"Pool: reserves"},{pc:[1521],errorMessage:"Pool: slippage"},{pc:[1605,1667],errorMessage:"Pool: too large"},{pc:[1008],errorMessage:"Pool: too little"},{pc:[1100],errorMessage:"Pool: too much"},{pc:[2308],errorMessage:"Pool: zero D changes"},{pc:[2278],errorMessage:"Pool: zero changes"},{pc:[991],errorMessage:"Rekey not allowed"},{pc:[855],errorMessage:"RewardManager: claim rewards before close out"},{pc:[2061],errorMessage:"RewardManager: not enough amount"},{pc:[1851],errorMessage:"RewardManager: too high"},{pc:[850],errorMessage:"RewardManager: withdraw LP before close out"},{pc:[977],errorMessage:"Wrong asset"},{pc:[757],errorMessage:"asset exists"},{pc:[750,865,954,966,975,1013,1028,1038,1057,1067,1081,1091,1106,1144,1243,1274,1285,1294,1304,1312,1329,1426,1449,1471,1496,1526,1549,1623,1634,1767,1804,1869,1877,1882,1947,1957,1971,1981,1998,2022,2039,2045,2069,2122,2154,2206,2210,2248,2275,2283,2304,2313,2349,2358,2506,2511,2519,2627,2635,2676,2684,3037,3065,3073,3091,3111,3125,3186,3220,3275],errorMessage:"check GlobalState exists"},{pc:[832,848,1757,1784,2056,2093,2108,3031,3051,3136,3158,3172],errorMessage:"check LocalState exists"},{pc:[1220,1407],errorMessage:"invalid number of bytes for arc4.bool"},{pc:[669,677,1202,1379,1717,1734,1912,1931],errorMessage:"invalid number of bytes for arc4.static_array<arc4.uint8, 32>"},{pc:[685,694,703,712,820,932,1177,1186,1210,1387,1397,1596,1658,1842],errorMessage:"invalid number of bytes for arc4.uint64"},{pc:[2724],errorMessage:"n must be non-negative"},{pc:[1127,1158,2230,2262],errorMessage:"overflow"},{pc:[924],errorMessage:"transaction type is axfer"}],pcOffsetMethod:"none"},clear:{sourceInfo:[],pcOffsetMethod:"none"}},source:{approval:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMzIgMTAwMDAKICAgIGJ5dGVjYmxvY2sgInRva2VuQmFsYW5jZSIgInZVc2RCYWxhbmNlIiAiYXNzZXQiICJiYWxhbmNlIiAicmVzZXJ2ZXMiICJ1c2VyUmV3YXJkRGVidCIgImQiICJ0b3RhbFN1cHBseSIgImFjY1Jld2FyZFBlclNoYXJlUCIgMHgwMTAwMDAwMDAwMDAwMCAweDAxICJhZG1pbkZlZUFtb3VudCIgImNhbkRlcG9zaXQiICJjYW5XaXRoZHJhdyIgIm93bmVyIiAiZmVlU2hhcmVCUCIgImJhbGFuY2VSYXRpb01pbkJQIiAweDAyICJhZG1pbkZlZVNoYXJlQlAiICJhIiAicm91dGVyIiAic3RvcEF1dGhvcml0eSIgInRva2VuQW1vdW50UmVkdWNlIiAidG9rZW5BbW91bnRJbmNyZWFzZSIgMHgxNTFmN2M3NSAweGJhODE4MDc2IDB4MDMgMHgwNjgxMDEgMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICBwdXNoaW50IDIwMDAgLy8gMjAwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgcHVzaGJ5dGVzIDB4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgcHVzaGJ5dGVzcyAweDAxYTNhM2ZmIDB4MDQ1OWI3YWMgMHg5YjRiODIzNCAvLyBtZXRob2QgIm9wdEluVG9BcHBsaWNhdGlvbigpdm9pZCIsIG1ldGhvZCAiY2xvc2VPdXRPZkFwcGxpY2F0aW9uKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZXBvc2l0KGF4ZmVyLHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANCBtYWluX2Nsb3NlT3V0T2ZBcHBsaWNhdGlvbl9yb3V0ZUA1IG1haW5fZGVwb3NpdF9yb3V0ZUA2CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAyOAogICAgcHVzaGJ5dGVzcyAweDc2MTBhNDYwIDB4ZTNhZWIyNWMgMHhkOTc4YWQxNCAweDBkMWI0YzA2IDB4NzViZjlhMjggMHhmNDkzZDdlZCAweDhkNWNiNmRmIDB4ZmUwNGE1Y2UgMHgwMjhlMDg1OSAweDQxZmM5NjZlIDB4YWJmMjAwMTQgMHgwNGIxNjFmMSAweDY2NTkxY2NmIDB4YTVhZTZiZDEgMHhhMDRjNWJjNCAweDM2MWI2MTU5IDB4NTM4ZTkxMjcgMHhlMTdiYWZiNCAvLyBtZXRob2QgIm9wdEluQXNzZXQoKXZvaWQiLCBtZXRob2QgIndpdGhkcmF3KHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic3dhcEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic2V0RmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImFkanVzdFRvdGFsTHBBbW91bnQoKXZvaWQiLCBtZXRob2QgInNldEJhbGFuY2VSYXRpb01pbkJQKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wRGVwb3NpdCgpdm9pZCIsIG1ldGhvZCAic3RhcnREZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJzdG9wV2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInN0YXJ0V2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInNldFN0b3BBdXRob3JpdHkoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRSb3V0ZXIoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJjbGFpbVJld2FyZHMoKXZvaWQiLCBtZXRob2QgInNldEFkbWluRmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImNsYWltQWRtaW5GZWUoKXZvaWQiLCBtZXRob2QgInBlbmRpbmdSZXdhcmQoYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgInRyYW5zZmVyT3duZXJzaGlwKGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG9wdEluQXNzZXQgd2l0aGRyYXcgc3dhcFRvVlVzZCBzd2FwRnJvbVZVc2Qgc2V0RmVlU2hhcmUgYWRqdXN0VG90YWxMcEFtb3VudCBzZXRCYWxhbmNlUmF0aW9NaW5CUCBzdG9wRGVwb3NpdCBzdGFydERlcG9zaXQgc3RvcFdpdGhkcmF3IHN0YXJ0V2l0aGRyYXcgc2V0U3RvcEF1dGhvcml0eSBzZXRSb3V0ZXIgY2xhaW1SZXdhcmRzIHNldEFkbWluRmVlU2hhcmUgY2xhaW1BZG1pbkZlZSBwZW5kaW5nUmV3YXJkIHRyYW5zZmVyT3duZXJzaGlwCiAgICBlcnIKCm1haW5fY3JlYXRlX05vT3BAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOAogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICBwdXNoYnl0ZXMgMHg1MTZkMzQ3YiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGNyZWF0ZUFwcGxpY2F0aW9uCiAgICBlcnIKCm1haW5fZGVwb3NpdF9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgc2hsCiAgICBwdXNoaW50IDMgLy8gMwogICAgJgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgb25lIG9mIE5vT3AsIE9wdEluICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGIgZGVwb3NpdAoKbWFpbl9jbG9zZU91dE9mQXBwbGljYXRpb25fcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDIgLy8gQ2xvc2VPdXQKICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBDbG9zZU91dCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIGNsb3NlT3V0T2ZBcHBsaWNhdGlvbgoKbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBvcHRJblRvQXBwbGljYXRpb24oKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBPcHRJbiAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIG9wdEluVG9BcHBsaWNhdGlvbgoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZnJhbWVfZGlnIDAKICAgIGdsb2JhbCBPcGNvZGVCdWRnZXQKICAgID4KICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANgogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGJ5dGVjIDI3IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQogICAgYnl0ZWMgMjcgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGZyYW1lX2RpZyAtMQogICAgc3dpdGNoIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANToKICAgIGl0eG5fc3VibWl0CiAgICBiIGVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDEKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0OgogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzOgogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1CgplbnN1cmVfYnVkZ2V0X2FmdGVyX3doaWxlQDY6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6OmJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh2OiBieXRlcykgLT4gdWludDY0OgpiaWd1aW50VG9VaW50NjRNb2R1bG86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBiaWd1aW50VG9VaW50NjRNb2R1bG8odjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoxNwogICAgLy8gY29uc3QgbGVuID0gb3AubGVuKGIpOwogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE4CiAgICAvLyBjb25zdCBzdGFydDogdWludDY0ID0gbGVuID4gOCA/IChsZW4gLSA4KSA6IDA7CiAgICBpbnRjXzIgLy8gOAogICAgPgogICAgYnogYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfZmFsc2VAMgogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMiAvLyA4CiAgICAtCgpiaWd1aW50VG9VaW50NjRNb2R1bG9fdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE5CiAgICAvLyBjb25zdCBsYXN0OCA9IGIuc2xpY2Uoc3RhcnQpOyAgICAgICAgICAgLy8ga2VlcCBsZWFzdC1zaWduaWZpY2FudCA4IGJ5dGVzCiAgICBkdXAKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGNvdmVyIDMKICAgID49CiAgICBkaWcgMgogICAgc3dhcAogICAgc2VsZWN0CiAgICBmcmFtZV9kaWcgLTEKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShsYXN0OCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICByZXRzdWIKCmJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTgKICAgIC8vIGNvbnN0IHN0YXJ0OiB1aW50NjQgPSBsZW4gPiA4ID8gKGxlbiAtIDgpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X21lcmdlQDMKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5jcmVhdGVBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUFwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBBZGRyZXNzLCByb3V0ZXI6IEFkZHJlc3MsIGE6IHVpbnQ2NCwgYXNzZXQ6IEFzc2V0LCBmZWVTaGFyZUJQOiB1aW50NjQsIGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6OQogICAgLy8gdGhpcy5vd25lci52YWx1ZSA9IG93bmVyOwogICAgZGlnIDYKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozOAogICAgLy8gdGhpcy5hc3NldC52YWx1ZSA9IGFzc2V0OwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIGEgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxOSAvLyAiYSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyB0aGlzLmEudmFsdWUgPSBhOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIHJvdXRlciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMjAgLy8gInJvdXRlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyB0aGlzLnJvdXRlci52YWx1ZSA9IHJvdXRlcjsKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDIxIC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyB0aGlzLmZlZVNoYXJlQlAudmFsdWUgPSBmZWVTaGFyZUJQOwogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUgPSBiYWxhbmNlUmF0aW9NaW5CUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OAogICAgLy8gY29uc3QgZGVjaW1hbHMgPSB0aGlzLmFzc2V0LnZhbHVlLmRlY2ltYWxzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIGNvbnN0IGRlY2ltYWxzID0gdGhpcy5hc3NldC52YWx1ZS5kZWNpbWFsczsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA+CiAgICBieiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X2ZhbHNlQDMKICAgIGR1cAogICAgcHVzaGludCAzIC8vIDMKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRSZWR1Y2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAyMiAvLyAidG9rZW5BbW91bnRSZWR1Y2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MAogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgZHVwCiAgICBwdXNoaW50IDMgLy8gMwogICAgPAogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2CiAgICBwdXNoaW50IDMgLy8gMwogICAgZGlnIDEKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2MAogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldDogQXNzZXQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfbWVyZ2VANwoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDQKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5vcHRJblRvQXBwbGljYXRpb25bcm91dGluZ10oKSAtPiB2b2lkOgpvcHRJblRvQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3NAogICAgLy8gc3VwZXIub3B0SW5Ub0FwcGxpY2F0aW9uKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MwogICAgLy8gb3B0SW5Ub0FwcGxpY2F0aW9uKCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmNsb3NlT3V0T2ZBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsb3NlT3V0T2ZBcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo4NgogICAgLy8gY29uc3Qgc2VuZGVyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5MAogICAgLy8gaWYgKGxwQmFsYW5jZSA+IDApIHsKICAgIGJ6IGNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLndpdGhkcmF3KGxwQmFsYW5jZSwgYnVkZ2V0KTsKICAgIGR1cAogICAgZGlnIDMKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXcKCmNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTEKICAgIC8vIGNvbnN0IGxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlOwogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MQogICAgLy8gY29uc3QgbHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KGxwQW1vdW50ID09PSAwLCAnUmV3YXJkTWFuYWdlcjogd2l0aGRyYXcgTFAgYmVmb3JlIGNsb3NlIG91dCcpOwogICAgIQogICAgYXNzZXJ0IC8vIFJld2FyZE1hbmFnZXI6IHdpdGhkcmF3IExQIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NAogICAgLy8gY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ1Jld2FyZChmcm9tKTsKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NQogICAgLy8gYXNzZXJ0KHBlbmRpbmcgPT09IDAsICdSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQnKTsKICAgICEKICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTA2LTExMgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDgKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEwOAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMAogICAgLy8gYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTExCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTEyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTQKICAgIC8vIGxvZygnUG9vbDogb3B0LWluIGNvbXBsZXRlZCcpOwogICAgcHVzaGJ5dGVzICJQb29sOiBvcHQtaW4gY29tcGxldGVkIgogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDIKICAgIC8vIG9wdEluQXNzZXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZGVwb3NpdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTIKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU1CiAgICAvLyBpZiAoVHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5PcHRJbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBkZXBvc2l0X2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBzdXBlci5vcHRJblRvQXBwbGljYXRpb24oVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24KCmRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBhc3NlcnQodGhpcy5jYW5EZXBvc2l0LnZhbHVlLCAnUG9vbDogZGVwb3NpdCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzOQogICAgLy8gYXNzZXJ0KHRoaXMuY2FuRGVwb3NpdC52YWx1ZSwgJ1Bvb2w6IGRlcG9zaXQgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBQb29sOiBkZXBvc2l0IHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTYxCiAgICAvLyBjb25zdCBvbGREID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldC5pZCA9PT0gdGhpcy5hc3NldC52YWx1ZS5pZCwgYFdyb25nIGFzc2V0YCk7CiAgICBkaWcgMQogICAgZHVwCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkID09PSB0aGlzLmFzc2V0LnZhbHVlLmlkLCBgV3JvbmcgYXNzZXRgKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjQKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0UmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLCBgQXNzZXQgbXVzdCBnbyB0byBhcHBgKTsKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQXNzZXQgbXVzdCBnbyB0byBhcHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyNwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJUeG4ucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgUmVrZXkgbm90IGFsbG93ZWRgKTsKICAgIGR1cAogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJla2V5IG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjgKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0Q2xvc2VUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgQ2xvc2VUbyBub3QgYWxsb3dlZGApOwogICAgZHVwCiAgICBndHhucyBBc3NldENsb3NlVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBDbG9zZVRvIG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjkKICAgIC8vIHJldHVybiBhc3NldFRyYW5zZmVyVHhuLmFzc2V0QW1vdW50OwogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2NQogICAgLy8gY29uc3QgYW1vdW50U1AgPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCk7CiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICBkdXAKICAgIGJ1cnkgOAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnQoYW1vdW50U1AgPiAwLCAnUG9vbDogdG9vIGxpdHRsZScpOwogICAgZHVwCiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIGxpdHRsZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY5CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRTUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjkKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50U1A7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBidXJ5IDYKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICArCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3NQogICAgLy8gaWYgKG9sZEQgPT09IDAgfHwgb2xkQmFsYW5jZSA9PT0gMCkgewogICAgYnogZGVwb3NpdF9pZl9ib2R5QDUKICAgIGRpZyA0CiAgICBibnogZGVwb3NpdF9lbHNlX2JvZHlANgoKZGVwb3NpdF9pZl9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIGNvbnN0IGhhbGZBbW91bnQ6IHVpbnQ2NCA9IGFtb3VudFNQID4+IDE7CiAgICBkaWcgNQogICAgaW50Y18xIC8vIDEKICAgIHNocgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgpkZXBvc2l0X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gdGhpcy51cGRhdGVEKCk7CiAgICBjYWxsc3ViIHVwZGF0ZUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDUKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIGFzc2VydCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA8IE1BWF9UT0tFTl9CQUxBTkNFLCAnUG9vbDogdG9vIG11Y2gnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIDwgTUFYX1RPS0VOX0JBTEFOQ0UsICdQb29sOiB0b28gbXVjaCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMTA5OTUxMTYyNzc3NiAvLyAxMDk5NTExNjI3Nzc2CiAgICA8CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIG11Y2gKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJ10sIGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZGVwb3NpdF9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodG9rZW5CYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgIGl0b2IKICAgIGRpZyA0CiAgICBpdG9iCiAgICBkaWcgMQogICAgYioKICAgIGRpZyA3CiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODIKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA1CiAgICBpdG9iCiAgICB1bmNvdmVyIDQKICAgIGIqCiAgICB1bmNvdmVyIDMKICAgIGIvCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIHVuY292ZXIgMgogICAgYnwKICAgIGJ0b2kKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUA3CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5NwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN3YXBUb1ZVc2Rbcm91dGluZ10oKSAtPiB2b2lkOgpzd2FwVG9WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNDUtMjQ5CiAgICAvLyBzd2FwVG9WVXNkKAogICAgLy8gICB1c2VyOiBBZGRyZXNzLAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjUzCiAgICAvLyBsZXQgZmVlOiB1aW50NjQgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1NAogICAgLy8gaWYgKGFtb3VudCA+IDApIHsKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIGlmICghemVyb0ZlZSkgewogICAgZGlnIDIKICAgIGJueiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjU2CiAgICAvLyBmZWUgPSAoYW1vdW50ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTUgLy8gImZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTYKICAgIC8vIGZlZSA9IChhbW91bnQgKiB0aGlzLmZlZVNoYXJlQlAudmFsdWUpIC8gQlA7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDQKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgYnVyeSAxCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OAogICAgLy8gY29uc3QgYW1vdW50SW4gPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCAtIGZlZSk7CiAgICBkaWcgMwogICAgZHVwCiAgICBkaWcgMgogICAgLQogICAgY2FsbHN1YiB0b1N5c3RlbVByZWNpc2lvbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYwCiAgICAvLyBmZWUgPSBhbW91bnQgLSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50SW4pOwogICAgZHVwCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgLQogICAgYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYzCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBhbW91bnRJbjsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NAogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50SW47CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NgogICAgLy8gY29uc3QgdlVzZE5ld0Ftb3VudCA9IHRoaXMuZ2V0WSh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjYKICAgIC8vIGNvbnN0IHZVc2ROZXdBbW91bnQgPSB0aGlzLmdldFkodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGNhbGxzdWIgZ2V0WQogICAgZHVwCiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NwogICAgLy8gaWYgKHRoaXMudlVzZEJhbGFuY2UudmFsdWUgPiB2VXNkTmV3QW1vdW50KSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBpZiAodGhpcy52VXNkQmFsYW5jZS52YWx1ZSA+IHZVc2ROZXdBbW91bnQpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA8CiAgICBieiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY4CiAgICAvLyByZXN1bHQgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC0gdlVzZE5ld0Ftb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIHJlc3VsdCA9IHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLSB2VXNkTmV3QW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA2CiAgICAtCiAgICBidXJ5IDIKCnN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlID0gdlVzZE5ld0Ftb3VudDsKICAgIGRpZyA2CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcxCiAgICAvLyB0aGlzLmFkZFJld2FyZHMoZmVlKTsKICAgIGR1cAogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkaWcgNQogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgNAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMgogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MmJiYmVjYTMgLy8gbWV0aG9kICJTd2FwcGVkVG9WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI0NS0yNDkKICAgIC8vIHN3YXBUb1ZVc2QoCiAgICAvLyAgIHVzZXI6IEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICB6ZXJvRmVlOiBib29sZWFuLAogICAgLy8gKTogdWludDY0IHsKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3dhcEZyb21WVXNkW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEZyb21WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5NwogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5OQogICAgLy8gbGV0IHJlc3VsdFNQOiB1aW50NjQgPSAwOyAvLyAwIGJ5IGRlZmF1bHQKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIGxldCByZXN1bHQ6IHVpbnQ2NCA9IDA7IC8vIDAgYnkgZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMQogICAgLy8gbGV0IGZlZTogdWludDY0ID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGlmIChhbW91bnQgPiAwKSB7CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gYW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gY29uc3QgbmV3QW1vdW50ID0gdGhpcy5nZXRZKHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgY2FsbHN1YiBnZXRZCiAgICBkdXAKICAgIGJ1cnkgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDUKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSAxMQogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA2CiAgICAvLyBpZiAodG9rZW5CYWxhbmNlID4gbmV3QW1vdW50KSB7CiAgICA8CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDcKICAgIC8vIHJlc3VsdFNQID0gdG9rZW5CYWxhbmNlIC0gbmV3QW1vdW50OwogICAgZGlnIDcKICAgIGRpZyA5CiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA4CiAgICAvLyByZXN1bHQgPSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24ocmVzdWx0U1ApOwogICAgY2FsbHN1YiBmcm9tU3lzdGVtUHJlY2lzaW9uCiAgICBidXJ5IDIKCnN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkaWcgMQogICAgPD0KICAgIGFzc2VydCAvLyBQb29sOiByZXNlcnZlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNQogICAgLy8gaWYgKCF6ZXJvRmVlKSB7CiAgICBkaWcgMwogICAgYm56IHN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gZmVlID0gKHJlc3VsdCAqIHRoaXMuZmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gZmVlU2hhcmVCUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE1IC8vICJmZWVTaGFyZUJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyBmZWUgPSAocmVzdWx0ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAyCiAgICAqCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8KICAgIGJ1cnkgMQoKc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxOQogICAgLy8gcmVzdWx0IC09IGZlZTsKICAgIGR1cDIKICAgIGR1cAogICAgY292ZXIgMgogICAgLQogICAgZHVwCiAgICBidXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzIxCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA9IG5ld0Ftb3VudDsKICAgIGRpZyAxMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gYXNzZXJ0KHJlc3VsdCA+PSByZWNlaXZlQW1vdW50TWluLCAnUG9vbDogc2xpcHBhZ2UnKTsKICAgIGR1cAogICAgZGlnIDcKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogc2xpcHBhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI0CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDkKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjgKICAgIC8vIHRoaXMuYWRkUmV3YXJkcyhmZWUpOwogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBlbWl0PFN3YXBwZWRGcm9tVlVzZD4oeyByZWNpcGllbnQ6IHVzZXIsIHRva2VuSWQ6IHRoaXMuYXNzZXQudmFsdWUuaWQsIHZVc2RBbW91bnQ6IGFtb3VudCwgYW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzMAogICAgLy8gZW1pdDxTd2FwcGVkRnJvbVZVc2Q+KHsgcmVjaXBpZW50OiB1c2VyLCB0b2tlbklkOiB0aGlzLmFzc2V0LnZhbHVlLmlkLCB2VXNkQW1vdW50OiBhbW91bnQsIGFtb3VudDogcmVzdWx0LCBmZWUgfSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgZGlnIDcKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGRpZyAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGQzZjFkNTQyIC8vIG1ldGhvZCAiU3dhcHBlZEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzIKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBieXRlYyAyNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldEZlZVNoYXJlW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0RmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gYXNzZXJ0KGZlZVNoYXJlQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MgogICAgLy8gdGhpcy5mZWVTaGFyZUJQLnZhbHVlID0gZmVlU2hhcmVCUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmFkanVzdFRvdGFsTHBBbW91bnRbcm91dGluZ10oKSAtPiB2b2lkOgphZGp1c3RUb3RhbExwQW1vdW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NwogICAgLy8gY29uc3QgZCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ3CiAgICAvLyBjb25zdCBkID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNDgKICAgIC8vIGNvbnN0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyBjb25zdCB0b3RhbFN1cHBseSA9IHRoaXMudG90YWxTdXBwbHkudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTAKICAgIC8vIGlmIChkID4gdG90YWxTdXBwbHkpIHsKICAgID4KICAgIGJ6IGFkanVzdFRvdGFsTHBBbW91bnRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIHRoaXMuZGVwb3NpdExwKFR4bi5zZW5kZXIsIGQgLSB0b3RhbFN1cHBseSk7CiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMgogICAgZGlnIDIKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCgphZGp1c3RUb3RhbExwQW1vdW50X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NQogICAgLy8gYWRqdXN0VG90YWxMcEFtb3VudCgpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRCYWxhbmNlUmF0aW9NaW5CUFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEJhbGFuY2VSYXRpb01pbkJQOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTkKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYwCiAgICAvLyBhc3NlcnQoYmFsYW5jZVJhdGlvTWluQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlID0gYmFsYW5jZVJhdGlvTWluQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RvcERlcG9zaXRbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wRGVwb3NpdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NgogICAgLy8gdGhpcy5jYW5EZXBvc2l0LnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NAogICAgLy8gc3RvcERlcG9zaXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnREZXBvc2l0W3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnREZXBvc2l0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjYW5EZXBvc2l0ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTIgLy8gImNhbkRlcG9zaXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzEKICAgIC8vIHRoaXMuY2FuRGVwb3NpdC52YWx1ZSA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gc3RhcnREZXBvc2l0KCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN0b3BXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0b3BXaXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzYKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzc0CiAgICAvLyBzdG9wV2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnRXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0YXJ0V2l0aGRyYXc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODEKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzkKICAgIC8vIHN0YXJ0V2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc2V0U3RvcEF1dGhvcml0eVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldFN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODQKICAgIC8vIHNldFN0b3BBdXRob3JpdHkoc3RvcEF1dGhvcml0eTogQWRkcmVzcyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODUKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODYKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IHN0b3BBdXRob3JpdHk7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzg0CiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRSb3V0ZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSb3V0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODkKICAgIC8vIHNldFJvdXRlcihyb3V0ZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzkwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTEKICAgIC8vIHRoaXMucm91dGVyLnZhbHVlID0gcm91dGVyOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4OQogICAgLy8gc2V0Um91dGVyKHJvdXRlcjogQWRkcmVzcyk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5jbGFpbVJld2FyZHNbcm91dGluZ10oKSAtPiB2b2lkOgpjbGFpbVJld2FyZHM6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYxCiAgICAvLyBjb25zdCB1c2VyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjMKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjQKICAgIC8vIGNvbnN0IHJld2FyZHMgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgLyBQX1NDQUxFKTsKICAgIGR1cAogICAgaXRvYgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY0CiAgICAvLyBjb25zdCByZXdhcmRzID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlIC8gUF9TQ0FMRSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBjb25zdCBwZW5kaW5nOiB1aW50NjQgPSByZXdhcmRzIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGRpZyAyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjUKICAgIC8vIGNvbnN0IHBlbmRpbmc6IHVpbnQ2NCA9IHJld2FyZHMgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY2CiAgICAvLyBpZiAocGVuZGluZyA+IDApIHsKICAgIGJ6IGNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgMQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgNQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyA1CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY5CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHVzZXIpLCBwZW5kaW5nIH0pOwogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuc2V0QWRtaW5GZWVTaGFyZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEFkbWluRmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NzQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3NwogICAgLy8gYXNzZXJ0KGFkbWluRmVlU2hhcmVCUCA8PSBCUCwgJ1Jld2FyZE1hbmFnZXI6IHRvbyBoaWdoJyk7CiAgICBkdXAKICAgIGludGMgNCAvLyAxMDAwMAogICAgPD0KICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiB0b28gaGlnaAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3OAogICAgLy8gdGhpcy5hZG1pbkZlZVNoYXJlQlAudmFsdWUgPSBhZG1pbkZlZVNoYXJlQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuY2xhaW1BZG1pbkZlZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltQWRtaW5GZWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg0CiAgICAvLyBjb25zdCBhZG1pbkZlZUFtb3VudCA9IHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODQKICAgIC8vIGNvbnN0IGFkbWluRmVlQW1vdW50ID0gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg1CiAgICAvLyBpZiAoYWRtaW5GZWVBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbUFkbWluRmVlX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg3CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODcKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODkKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4OQogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKY2xhaW1BZG1pbkZlZV9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODEKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5wZW5kaW5nUmV3YXJkW3JvdXRpbmddKCkgLT4gdm9pZDoKcGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIGl0b2IKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6Ok93bmFibGUudHJhbnNmZXJPd25lcnNoaXBbcm91dGluZ10oKSAtPiB2b2lkOgp0cmFuc2Zlck93bmVyc2hpcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlSb3V0ZXIoKSAtPiB2b2lkOgpvbmx5Um91dGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5yb3V0ZXIudmFsdWUuYnl0ZXMsICdQb29sOiBvbmx5IHJvdXRlcicpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTgKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnJvdXRlci52YWx1ZS5ieXRlcywgJ1Bvb2w6IG9ubHkgcm91dGVyJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBQb29sOiBvbmx5IHJvdXRlcgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub25seVN0b3BBdXRob3JpdHkoKSAtPiB2b2lkOgpvbmx5U3RvcEF1dGhvcml0eToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1Bvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdQb29sOiBpcyBub3Qgc3RvcEF1dGhvcml0eScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gUG9vbDogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnZhbGlkYXRlQmFsYW5jZVJhdGlvKCkgLT4gdm9pZDoKdmFsaWRhdGVCYWxhbmNlUmF0aW86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHByaXZhdGUgdmFsaWRhdGVCYWxhbmNlUmF0aW8oKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gaWYgKHRva2VuQmFsYW5jZSA+IHZVc2RCYWxhbmNlKSB7CiAgICA+CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBhc3NlcnQoKHZVc2RCYWxhbmNlICogQlApIC8gdG9rZW5CYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdlVTRCBiYWxhbmNlJyk7CiAgICBmcmFtZV9kaWcgMQogICAgaW50YyA0IC8vIDEwMDAwCiAgICAqCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE2IC8vICJiYWxhbmNlUmF0aW9NaW5CUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMgogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHZVU0QgYmFsYW5jZQoKdmFsaWRhdGVCYWxhbmNlUmF0aW9fYWZ0ZXJfaWZfZWxzZUA1OgogICAgcmV0c3ViCgp2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gfSBlbHNlIGlmICh0b2tlbkJhbGFuY2UgPCB2VXNkQmFsYW5jZSkgewogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICA8CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNAogICAgLy8gYXNzZXJ0KCh0b2tlbkJhbGFuY2UgKiBCUCkgLyB2VXNkQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHRva2VuIGJhbGFuY2UnKTsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgICoKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHRva2VuIGJhbGFuY2UKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5Ny0xOTgKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMzAwMCB9IH0gfSkKICAgIC8vIHdpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5OQogICAgLy8gZW5zdXJlQnVkZ2V0KGJ1ZGdldCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE0MwogICAgLy8gYXNzZXJ0KHRoaXMuY2FuV2l0aGRyYXcudmFsdWUsICciUG9vbDogd2l0aGRyYXcgcHJvaGliaXRlZCcpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjYW5XaXRoZHJhdyA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIHdpdGhkcmF3biBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTMgLy8gImNhbldpdGhkcmF3IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQzCiAgICAvLyBhc3NlcnQodGhpcy5jYW5XaXRoZHJhdy52YWx1ZSwgJyJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vICJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDMKICAgIC8vIGNvbnN0IG9sZEQgPSB0aGlzLmQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIwMwogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIHRoaXMud2l0aGRyYXdMcChUeG4uc2VuZGVyLCBhbW91bnRMcCk7CiAgICB0eG4gU2VuZGVyCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzAKICAgIC8vIGxldCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMAogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIGFzc2VydCh1c2VyTHBBbW91bnQgPj0gbHBBbW91bnQsICdSZXdhcmRNYW5hZ2VyOiBub3QgZW5vdWdoIGFtb3VudCcpOwogICAgZHVwCiAgICBmcmFtZV9kaWcgLTIKICAgID49CiAgICBhc3NlcnQgLy8gUmV3YXJkTWFuYWdlcjogbm90IGVub3VnaCBhbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMgogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMwogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNAogICAgLy8gaWYgKHVzZXJMcEFtb3VudCA+IDApIHsKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAyCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLQogICAgZnJhbWVfYnVyeSA0CgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhd19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM3CiAgICAvLyB1c2VyTHBBbW91bnQgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOAogICAgLy8gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlIC09IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIGRpZyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSAtPSBscEFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgaXRvYgogICAgZnJhbWVfZGlnIDMKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MQogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgNAogICAgYnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQyCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogZnJvbSB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MwogICAgLy8gZW1pdDxSZXdhcmRzQ2xhaW1lZD4oeyB1c2VyOiBuZXcgQWRkcmVzcyhmcm9tKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWMgMjUgLy8gbWV0aG9kICJSZXdhcmRzQ2xhaW1lZChhZGRyZXNzLHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0NQogICAgLy8gZW1pdDxXaXRoZHJhdz4oeyBmcm9tOiBuZXcgQWRkcmVzcyhmcm9tKSwgbHBBbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAxCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhkM2FmYTRmMSAvLyBtZXRob2QgIldpdGhkcmF3KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTIKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICBkdXAyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIGRpZyAyCiAgICBpdG9iCiAgICBkaWcgNAogICAgYioKICAgIGRpZyAxCiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNQogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICA+CiAgICBhc3NlcnQgLy8gUG9vbDogemVybyBjaGFuZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHJlc2VydmVzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjIKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgLT0gYW1vdW50THA7CiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSAtPSBhbW91bnRMcDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjUKICAgIC8vIHRoaXMudXBkYXRlRCgpOwogICAgY2FsbHN1YiB1cGRhdGVECiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjYKICAgIC8vIGFzc2VydCh0aGlzLmQudmFsdWUgPCBvbGRELCAnUG9vbDogemVybyBEIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI2CiAgICAvLyBhc3NlcnQodGhpcy5kLnZhbHVlIDwgb2xkRCwgJ1Bvb2w6IHplcm8gRCBjaGFuZ2VzJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGFzc2VydCAvLyBQb29sOiB6ZXJvIEQgY2hhbmdlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI4LTIzMgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogdGhpcy5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudExwKSwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI5CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMzAKICAgIC8vIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMQogICAgLy8gYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyOC0yMzIKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHRoaXMuZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnRMcCksCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5nZXRZKHg6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRZOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk3CiAgICAvLyBwcml2YXRlIGdldFkoeDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk4CiAgICAvLyBjb25zdCB4XyA9IEJpZ1VpbnQoeCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwMAogICAgLy8gY29uc3QgYTQgPSBCaWdVaW50KHRoaXMuYS52YWx1ZSA8PCAyKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MAogICAgLy8gYSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE5IC8vICJhIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBjb25zdCBhNCA9IEJpZ1VpbnQodGhpcy5hLnZhbHVlIDw8IDIpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzaGwKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAxCiAgICAvLyBjb25zdCBhOCA9IEJpZ1VpbnQoYTQgKiAybik7CiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiKgogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAzCiAgICAvLyBjb25zdCBkTWludXNYSXNQb3NpdGl2ZSA9IGRfID49IHhfOwogICAgYjw9CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgYnogZ2V0WV90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgYi0KCmdldFlfdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA2CiAgICAvLyBjb25zdCBhNEJ5RE1pbnVzWEFiczogYmlndWludCA9IGE0ICogZE1pbnVzWEFiczsKICAgIGZyYW1lX2RpZyA0CiAgICBiKgogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTEKICAgIC8vIGlmIChkTWludXNYSXNQb3NpdGl2ZSkgewogICAgZnJhbWVfZGlnIDYKICAgIGJ6IGdldFlfZWxzZV9ib2R5QDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxMgogICAgLy8gaWYgKGE0QnlETWludXNYQWJzID49IGRfKSB7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGI+PQogICAgYnogZ2V0WV9lbHNlX2JvZHlANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEzCiAgICAvLyBwYXJ0MUFicyA9IGE0QnlETWludXNYQWJzIC0gZF87CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGItCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNAogICAgLy8gcGFydDFJc1Bvc2l0aXZlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCgpnZXRZX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNQogICAgLy8gY29uc3QgcGFydDI6IGJpZ3VpbnQgPSBCaWdVaW50KHgpICogKGE0ICogZF8gKiBkXyAqIGRfICsgeF8gKiAocGFydDFBYnMgKiBwYXJ0MUFicykpOwogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIqCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBiKgogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKwogICAgYioKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNgogICAgLy8gbGV0IG51bWVyYXRvcjogYmlndWludCA9IHRoaXMuc3FydChwYXJ0Mik7CiAgICBjYWxsc3ViIHNxcnQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyOQogICAgLy8gaWYgKHBhcnQxSXNQb3NpdGl2ZSkgewogICAgYnogZ2V0WV9lbHNlX2JvZHlAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzMAogICAgLy8gbnVtZXJhdG9yICs9IHhfICogcGFydDFBYnM7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIGIqCiAgICBiKwoKZ2V0WV9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM2CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKG51bWVyYXRvciAvIChhOCAqIHhfKSArIDFuKTsgLy8gKzEgdG8gb2Zmc2V0IHJvdW5kaW5nIGVycm9ycwogICAgZnJhbWVfZGlnIDUKICAgIGZyYW1lX2RpZyAyCiAgICBiKgogICAgYi8KICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGIrCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFlfZWxzZV9ib2R5QDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDMyCiAgICAvLyBudW1lcmF0b3IgLT0geF8gKiBwYXJ0MUFiczsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgYioKICAgIGItCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUAxMgoKZ2V0WV9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNgogICAgLy8gcGFydDFBYnMgPSBkXyAtIGE0QnlETWludXNYQWJzOwogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTcKICAgIC8vIHBhcnQxSXNQb3NpdGl2ZSA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGIgZ2V0WV9hZnRlcl9pZl9lbHNlQDkKCmdldFlfZWxzZV9ib2R5QDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjAKICAgIC8vIHBhcnQxQWJzID0gYTRCeURNaW51c1hBYnMgKyBkXzsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMwogICAgYisKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIxCiAgICAvLyBwYXJ0MUlzUG9zaXRpdmUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUA5CgpnZXRZX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAzCiAgICBiLQogICAgYiBnZXRZX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnVwZGF0ZUQoKSAtPiB2b2lkOgp1cGRhdGVEOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM5CiAgICAvLyBwcml2YXRlIHVwZGF0ZUQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0MAogICAgLy8gY29uc3QgeCA9IEJpZ1VpbnQodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQwCiAgICAvLyBjb25zdCB4ID0gQmlnVWludCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQxCiAgICAvLyBjb25zdCB5ID0gQmlnVWludCh0aGlzLnZVc2RCYWxhbmNlLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDEKICAgIC8vIGNvbnN0IHkgPSBCaWdVaW50KHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0NgogICAgLy8gY29uc3QgeHk6IGJpZ3VpbnQgPSB4ICogeTsKICAgIGR1cDIKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBhID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTkgLy8gImEiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0OQogICAgLy8gY29uc3QgcDE6IGJpZ3VpbnQgPSBhXyAqIHh5ICogKHggKyB5KTsKICAgIGR1cAogICAgZGlnIDIKICAgIGIqCiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgYisKICAgIGIqCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MQogICAgLy8gY29uc3QgcDI6IGJpZ3VpbnQgPSAoeHkgKiAoKGFfICogNG4pIC0gMW4pKSAvIDNuOwogICAgcHVzaGJ5dGVzIDB4MDQKICAgIGIqCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiLQogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MwogICAgLy8gY29uc3QgcDM6IGJpZ3VpbnQgPSB0aGlzLnNxcnQoKHAxICogcDEpICsgKHAyICogcDIgKiBwMikpOwogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYisKICAgIGNhbGxzdWIgc3FydAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTQKICAgIC8vIGxldCBkXyA9IHRoaXMuY2JydChwMSArIHAzKTsKICAgIGR1cDIKICAgIGIrCiAgICBjYWxsc3ViIGNicnQKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1NQogICAgLy8gaWYgKHAzID4gcDEpIHsKICAgIGI8CiAgICBieiB1cGRhdGVEX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTYKICAgIC8vIGRfIC09IHRoaXMuY2JydChwMyAtIHAxKTsKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgLQogICAgZnJhbWVfYnVyeSAxCgp1cGRhdGVEX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2MAogICAgLy8gdGhpcy5kLnZhbHVlID0gKGRfIDw8IDEpOwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICBzaGwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDYgLy8gImQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjAKICAgIC8vIHRoaXMuZC52YWx1ZSA9IChkXyA8PCAxKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCnVwZGF0ZURfZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTgKICAgIC8vIGRfICs9IHRoaXMuY2JydChwMSAtIHAzKTsKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIHVwZGF0ZURfYWZ0ZXJfaWZfZWxzZUAzCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wudG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpIC0+IHVpbnQ2NDoKdG9TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjMKICAgIC8vIHByaXZhdGUgdG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjQKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50UmVkdWNlID0gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudFJlZHVjZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIyIC8vICJ0b2tlbkFtb3VudFJlZHVjZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NAogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjUKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY1CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudEluY3JlYXNlID0gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NwogICAgLy8gaWYgKHRva2VuQW1vdW50UmVkdWNlID4gMCkgewogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2OAogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50UmVkdWNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY5CiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudEluY3JlYXNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMQogICAgKgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3MgogICAgLy8gcmV0dXJuIGFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudDogdWludDY0KSAtPiB1aW50NjQ6CmZyb21TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzUKICAgIC8vIHByaXZhdGUgZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NgogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50UmVkdWNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjIgLy8gInRva2VuQW1vdW50UmVkdWNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc2CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudFJlZHVjZSA9IHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NwogICAgLy8gY29uc3QgdG9rZW5BbW91bnRJbmNyZWFzZSA9IHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudEluY3JlYXNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjMgLy8gInRva2VuQW1vdW50SW5jcmVhc2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzcKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc5CiAgICAvLyBpZiAodG9rZW5BbW91bnRSZWR1Y2UgPiAwKSB7CiAgICBieiBmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudFJlZHVjZTsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDAKICAgICoKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgxCiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4MgogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50SW5jcmVhc2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODQKICAgIC8vIHJldHVybiBhbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3FydChuOiBieXRlcykgLT4gYnl0ZXM6CnNxcnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODcKICAgIC8vIHByaXZhdGUgc3FydChuOiBiaWd1aW50KTogYmlndWludCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OAogICAgLy8gYXNzZXJ0KG4gPiAwbiwgJ24gbXVzdCBiZSBub24tbmVnYXRpdmUnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPgogICAgYXNzZXJ0IC8vIG4gbXVzdCBiZSBub24tbmVnYXRpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMG47CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweAogICAgYj09CiAgICBieiBzcXJ0X2FmdGVyX2lmX2Vsc2VAMgogICAgcHVzaGJ5dGVzIDB4CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKc3FydF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTAKICAgIC8vIGlmIChuIDw9IDNuKSByZXR1cm4gMW47CiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjIDI2IC8vIDB4MDMKICAgIGI8PQogICAgYnogc3FydF9hZnRlcl9pZl9lbHNlQDQKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpzcXJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5MwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDEpIC8gMik7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgcHVzaGludCAyIC8vIDIKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDk3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMAogICAgLy8gbGV0IHk6IGJpZ3VpbnQgPSAoeCArIG4gLyB4KSAvIDJuOwogICAgZnJhbWVfZGlnIC0xCiAgICBkaWcgMQogICAgYi8KICAgIGIrCiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiLwogICAgZnJhbWVfYnVyeSAxCgpzcXJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAxCiAgICAvLyB3aGlsZSAoeSA8IHgpIHsKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgYjwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMS01MDQKICAgIC8vIHdoaWxlICh5IDwgeCkgewogICAgLy8gICB4ID0geTsKICAgIC8vICAgeSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICAvLyB9CiAgICBieiBzcXJ0X2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMwogICAgLy8geSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIvCiAgICBkaWcgMQogICAgYisKICAgIGJ5dGVjIDE3IC8vIDB4MDIKICAgIGIvCiAgICBmcmFtZV9idXJ5IDEKICAgIGZyYW1lX2J1cnkgMAogICAgYiBzcXJ0X3doaWxlX3RvcEA1CgpzcXJ0X2FmdGVyX3doaWxlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MDUKICAgIC8vIHJldHVybiB4OwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuY2JydChuOiBieXRlcykgLT4gdWludDY0OgpjYnJ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTA4CiAgICAvLyBwcml2YXRlIGNicnQobjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXBuIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwOQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAyCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEwCiAgICAvLyBpZiAobiA8IDhuKSByZXR1cm4gMTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4MDgKICAgIGI8CiAgICBieiBjYnJ0X2FmdGVyX2lmX2Vsc2VANAogICAgaW50Y18xIC8vIDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpjYnJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxMwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDIpIC8gMyk7CiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgcHVzaGludCAzIC8vIDMKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTE3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZnJhbWVfYnVyeSAxCgpjYnJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTIxCiAgICAvLyBjb25zdCB4MjogYmlndWludCA9IHggKiB4OwogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgYioKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjIKICAgIC8vIGlmICh4MiA9PT0gMG4pIGJyZWFrOyAvLyBzaG91bGQgbm90IGhhcHBlbiBmb3IgeD4wCiAgICBwdXNoYnl0ZXMgMHgKICAgIGI9PQogICAgYm56IGNicnRfd2hpbGVfdG9wQDE1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjMKICAgIC8vIGNvbnN0IG5leHQ6IGJpZ3VpbnQgPSAoMm4gKiB4ICsgbiAvIHgyKSAvIDNuOwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgYioKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDMKICAgIGIvCiAgICBiKwogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjQKICAgIC8vIGlmIChuZXh0ID09PSB4IHx8IG5leHQgPT09IHggLSAxbikgewogICAgYj09CiAgICBibnogY2JydF9pZl9ib2R5QDEwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2RpZyAwCiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAxMQoKY2JydF9pZl9ib2R5QDEwOgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2J1cnkgMQoKY2JydF93aGlsZV90b3BAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MzIKICAgIC8vIHdoaWxlICgoeCArIDFuKSAqICh4ICsgMW4pICogKHggKyAxbikgPD0gbikgeCArPSAxbjsKICAgIGZyYW1lX2RpZyAxCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgZGlnIDEKICAgIGIqCiAgICBiKgogICAgZnJhbWVfZGlnIC0xCiAgICBiPD0KICAgIGJ6IGNicnRfd2hpbGVfdG9wQDE4CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAxCiAgICBiIGNicnRfd2hpbGVfdG9wQDE1CgpjYnJ0X3doaWxlX3RvcEAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzMwogICAgLy8gd2hpbGUgKHggKiB4ICogeCA+IG4pIHggLT0gMW47CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgLTEKICAgIGI+CiAgICBieiBjYnJ0X2FmdGVyX3doaWxlQDIwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2J1cnkgMQogICAgYiBjYnJ0X3doaWxlX3RvcEAxOAoKY2JydF9hZnRlcl93aGlsZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzNAogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh4KTsKICAgIGZyYW1lX2RpZyAxCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgY2JydF93aGlsZV90b3BANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24odG86IGJ5dGVzKSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQxCiAgICAvLyBwcm90ZWN0ZWQgb3B0SW5Ub0FwcGxpY2F0aW9uKHRvOiBBY2NvdW50KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MgogICAgLy8gaWYgKCF0aGlzLmJhbGFuY2UodG8pLmhhc1ZhbHVlKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDIKICAgIC8vIGlmICghdGhpcy5iYWxhbmNlKHRvKS5oYXNWYWx1ZSkgewogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBibnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ1CiAgICAvLyBpZiAoIXRoaXMudXNlclJld2FyZERlYnQodG8pLmhhc1ZhbHVlKSB7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGJueiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZCh1c2VyOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NS05NgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwZW5kaW5nUmV3YXJkKHVzZXI6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NwogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh0aGlzLmJhbGFuY2UodXNlcikudmFsdWUpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUpIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBiKgogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk3CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5hZGRSZXdhcmRzKHJld2FyZEFtb3VudDogdWludDY0KSAtPiB2b2lkOgphZGRSZXdhcmRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMAogICAgLy8gcHJvdGVjdGVkIGFkZFJld2FyZHMocmV3YXJkQW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMgogICAgLy8gaWYgKHRvdGFsU3VwcGx5ID4gMCkgewogICAgYnogYWRkUmV3YXJkc19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDMKICAgIC8vIGNvbnN0IGFkbWluRmVlUmV3YXJkczogdWludDY0ID0gKHJld2FyZEFtb3VudCAqIHRoaXMuYWRtaW5GZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTAzCiAgICAvLyBjb25zdCBhZG1pbkZlZVJld2FyZHM6IHVpbnQ2NCA9IChyZXdhcmRBbW91bnQgKiB0aGlzLmFkbWluRmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNAogICAgLy8gcmV3YXJkQW1vdW50IC09IGFkbWluRmVlUmV3YXJkczsKICAgIGZyYW1lX2RpZyAtMQogICAgZGlnIDEKICAgIC0KICAgIGZyYW1lX2J1cnkgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGJ5dGVjIDggLy8gImFjY1Jld2FyZFBlclNoYXJlUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYioKICAgIGZyYW1lX2RpZyAwCiAgICBpdG9iCiAgICBiLwogICAgYisKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNQogICAgLy8gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgKz0gQmlnVWludChyZXdhcmRBbW91bnQpICogUF9TQ0FMRSAvIEJpZ1VpbnQodG90YWxTdXBwbHkpOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDYKICAgIC8vIHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWUgKz0gYWRtaW5GZWVSZXdhcmRzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNgogICAgLy8gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZSArPSBhZG1pbkZlZVJld2FyZHM7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlICs9IGFkbWluRmVlUmV3YXJkczsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgphZGRSZXdhcmRzX2FmdGVyX2lmX2Vsc2VAMjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5kZXBvc2l0THAodG86IGJ5dGVzLCBscEFtb3VudDogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0THA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEwCiAgICAvLyBwcm90ZWN0ZWQgZGVwb3NpdExwKHRvOiBBY2NvdW50LCBscEFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTEKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMQogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMgogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMwogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEzCiAgICAvLyBsZXQgdXNlckxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTQKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaXRvYgogICAgZnJhbWVfZGlnIDAKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIGZyYW1lX2J1cnkgMQoKZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTcKICAgIC8vIHVzZXJMcEFtb3VudCArPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTgKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgKz0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlICs9IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIGZyYW1lX2RpZyAtMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOAogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSArPSBscEFtb3VudDsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE5CiAgICAvLyB0aGlzLnRvdGFsU3VwcGx5LnZhbHVlICs9IGxwQW1vdW50OwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMjEKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSk7CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMAogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgLTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMQogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKTsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMgogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMwogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogdG8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTIzCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB0byB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTI0CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHRvKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNgogICAgLy8gZW1pdDxEZXBvc2l0Pih7IHRvOiBuZXcgQWRkcmVzcyh0byksIGxwQW1vdW50IH0pOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4Y2ZhYjg3MjMgLy8gbWV0aG9kICJEZXBvc2l0KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjEzCiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5vd25lci52YWx1ZS5ieXRlcywgJ09ubHkgb3duZXInKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgb3duZXIKICAgIHJldHN1Ygo=",clear:"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg=="},byteCode:{approval:"CyAFAAEIIJBOJh0MdG9rZW5CYWxhbmNlC3ZVc2RCYWxhbmNlBWFzc2V0B2JhbGFuY2UIcmVzZXJ2ZXMOdXNlclJld2FyZERlYnQBZAt0b3RhbFN1cHBseRJhY2NSZXdhcmRQZXJTaGFyZVAHAQAAAAAAAAEBDmFkbWluRmVlQW1vdW50CmNhbkRlcG9zaXQLY2FuV2l0aGRyYXcFb3duZXIKZmVlU2hhcmVCUBFiYWxhbmNlUmF0aW9NaW5CUAECD2FkbWluRmVlU2hhcmVCUAFhBnJvdXRlcg1zdG9wQXV0aG9yaXR5EXRva2VuQW1vdW50UmVkdWNlE3Rva2VuQW1vdW50SW5jcmVhc2UEFR98dQS6gYB2AQMDBoEBCQEAAAAAAAAAADEYQAApJxKB0A9nJwciZycIgABnJwsiZygiZykiZycEImcnBiJnJwwjZycNI2eCAwQBo6P/BARZt6wEm0uCNDYaAI4DALcAqwCdMRkURDEYQQCGghIEdhCkYATjrrJcBNl4rRQEDRtMBgR1v5ooBPST1+0EjVy23wT+BKXOBAKOCFkEQfyWbgSr8gAUBASxYfEEZlkczwSlrmvRBKBMW8QENhthWQRTjpEnBOF7r7Q2GgCOEgFbApMCqgNaBDYETQR0BIsElASdBKYErwTABNEFLAVDBXIFhQCABFFtNHs2GgCOAQCJACMxGZCBAxoxGBBEQgFyMRmBAhIxGBBEQgEFMRkjEjEYEERCAPOKAgCL/oEKCIsAMgwNQQAqsYEGshCBBbIZJxuyHicbsh+L/40CAAsABLNC/9syALIBQv/1IrIBQv/viYoBAYv/FUkkDUEAGIsAJAlJiwBJTgMPSwJMTYv/TE8CUhdMiSJC/+g2GgFJFSUSRDYaAkkVJRJENhoDSRUkEkQXNhoESRUkEkQXNhoFSRUkEkQXNhoGSRUkEkQXJw5LBmcqTwNnJxNPA2cnFE8DZycVTwNnJw9PAmcnEExnIiplRHEBTElPAkSBAw1BACZJgQMJgQpMlCcWTGdJgQMMQQAPgQNLAQmBCkyUJxdMZyNDIkL/9iJC/94xAIgIgCNDNhoBSRUkEkQXMQBJIitjTElPAkRBAAZJSwOIBKBLAUkiK2NEFESICHkURCNDiAlosSIqZUQyCrIUIrISshGBBLIQIrIBs4AWUG9vbDogb3B0LWluIGNvbXBsZXRlZLAjQ4AARwQxFiMJSTgQgQQSRDYaAUkVJBJEFyKI/okxGSMSQQAFMQCIB/UiJwxlREQiJwZlTElOAkUGREsBSTgRIiplRBJESTgUMgoSREk4IDIDEkRJOBUyAxJEOBKIBkxJRQhJRCInBGVECCcETGciKGVMSU4CRQZEIillTElOAkUGRAhFBkEABUsEQAA1SwUjkSIoZURLAQgoTGciKWVECClMZ4gFkTEAIicGZURLBQmIB+4iKGVEgYCAgICAIAxEI0MiKGVESwYWSwQWSwGjSwcWTEsBokkVJA5EJK9MSwGrF08ECChMZyIpZURLBRZPBKNPA6JJFSQORE8CqxcIKUxnQv+eNhoBSRUkEkQXNhoCSRUkEkQXiANDI0OAADYaAUkVJRJENhoCSRUkEkQXSTYaA0kVIxJEIlNMiALKIkwiTEEAXEsCQAANIicPZURLBAshBApFAUsDSUsCCYgFS0mIBXhPAkwJRQIiKGVESwEIKExnIicEZUQIJwRMZyIoZUSIBA5JRQciKWVEDEEACSIpZURLBglFAilLBmdJiAbAIiplRBZLBUxQSwQWUEsCFkxLAVBLAhZQgAQru+yjTFCwiAJXJxhMULAjQ4AASTYaAUkVJRJENhoCSRUkEkQXSTYaA0kVJBJEF0w2GgRJFSMSRCJTTIgCDyJMIkwiTEEAeyIpZURLBggpSwFniAODSUUKIihlTElOAkULRAxBAA1LB0sJCUlFBIgEsEUCIicEZURLA0lOAksBDkRMCScETGdLA0AADSInD2VESwILIQQKRQFKSU4CCUlFBChLC2dJSwcPRLEiKmVESwmyFLIRshKBBLIQIrIBs4gF5CIqZUQWSwdMUEsGFlBLAhZMSwFQSwIWUIAE0/HVQkxQsIgBeycYTFCwI0M2GgFJFSQSRBeIBoRJIQQORCcPTGcjQ4gGdiInBmVMSU8CRCInB2VMSU4CTgNEDUEACjEASwJLAgmIBb0jQzYaAUkVJBJEF4gGRkkhBA5EJxBMZyNDiAESJwwiZyNDiAYvJwwjZyNDiAEAJw0iZyNDiAYdJw0jZyNDNhoBSRUlEkSIBgwnFUxnI0M2GgFJFSUSRIgF+ycUTGcjQ4AASTEASSIrY0xJTwJEQQBISRYiJwhlRKMnCaKI+39JRQRLAiInBWNECUlFBUEAKUsBSScFSwVmsSIqZURLAbIUSwVJTgKyErIRgQSyECKyAbMWUCcZTFCwI0M2GgFJFSQSRBeIBY5JIQQORCcSTGcjQ4gFgCInC2VMSU8CREEAHrEiKmVEIicOZUSyFEsBshKyEYEEshAisgGzJwsiZyNDNhoBSRUlEkSIBFMWJxhMULAjQzYaAUkVJRJEiAU2Jw5MZyNDMQAiJxRlRBJEiTEAIicVZUQSRImKAAAiKGVMSU8CRCIpZUxJTgJOA0QNQQAQiwEhBAuLAAoiJxBlRA9EiYsAiwEMQf/3iwAhBAuLAQoiJxBlRA9EiYoCAIv/Ioj6QCInDWVERCInBmVEMQBJIitjTElPAkRJi/4PRCInCGVMTgJEIkxBABaLAhaLA6MnCaKI+keLASInBWNECYwEiwKL/gmLAUkiK2NEi/4JSwErTwJmIicHZUSL/gknB0xnTBaLA6MnCaKI+hEnBUxmiwRBACSxIiplRIsBSU4CshSLBElOArISshGBBLIQIrIBsxZQJxlMULCL/haLAUsBUIAE06+k8UxQsCIoZUQiKWVESghLAhZLBKNLARZMSwGiSRUkDkQkr0xLAasXTwVMCShMZyIpZURPBBZPBaNPA6JJFSQORE8CqxcJKUsBZyIoZUQIDUQiJwRlRIv+SwEORIv+CScETGeIAMgiJwZlRIsADESxIiplRIv+iAFaMQCyFLISshGBBLIQIrIBs4mKAQEiSYv/FkkiJwZlRBZJTgIiJxNlRIECkBZJTgMnEaNOAqZJQQB0iwOLAqGLBKOMAIsGQQBaiwCLA6dBAEeLAIsDoYwBI4sEiwNJTgKjSwGjo4sBSaOLAklPAqNPAqCjiAEWTEEAFYsCiwGjoIsFiwKjoicKoIj41IwAiYsCiwGjoUL/6IsDiwChjAEiQv+2iwCLA6CMASJC/6uLAosDoUL/iYoAACIoZUQWIillRBZKoyInE2VEFklLAqNPBE8EoKNJTgJOA4ABBKMnCqFPAqMnGqJLAUsCo0sBSwKjTwKjoIgAlElOAkqgiADyTgOkQQAViwChiADmiwFMCYwBiwEjkCcGTGeJiwBMoYgA0IsBCIwBQv/oigEBIicWZUxJTwJEIicXZUxOAkRBAAiL/4sACowAiYsBQQAIi/+LAQuMAImL/4wAiYoBASInFmVMSU8CRCInF2VMTgJEQQAIi/+LAAuMAImLAUEACIv/iwEKjACJi/+MAImKAQEiSYv/gAClRIv/gACoQQAFgACMAImL/ycapkEABScKjACJi/+TIwiBAgqBAkyVTBZMFkwnHKOgSYwAi/9LAaKgJxGijAGLAYsApEEAFYv/iwFJTgKiSwGgJxGijAGMAEL/44mKAQEiRwOL/4AAqEEABCKMAImL/4ABCKRBAAQjjACJi/+TgQIIgQMKgQJMlUwWTBZMJxyjoIwBiwFJo0mMA4AAqEAAJycRiwFJTgKji/+LA6KgJxqiSYwAqEAAC4sBJwqhiwCoQQA9iwCMAYsBJwqgSYwCSUsBo6OL/6ZBAAeLAowBQv/miwFJSwGjo4v/pUEACosBJwqhjAFC/+mLAYj2zYwAiYsAjAFC/4yKAQCL/yIrY0UBQAAFi/8rImaL/yInBWNFAUAABov/JwUiZomKAQGL/yIrY0QWIicIZUSjJwmiiPaJi/8iJwVjRAmJigEAIicHZUxJTwJEQQAwIicSZUSL/wshBAqL/0sBCYz/IicIZUSL/xYnCaOLABaioCcITGciJwtlRAgnC0xniYoCACInCGVEIov+IitjTElPAkRBABaLAhaLAKMnCaKI9h6L/iInBWNECYwBiwKL/wiL/iIrY0SL/wiL/itPAmYiJwdlRIv/CCcHTGcWiwCjJwmiiPXqi/4nBU8CZosBQQAksSIqZUSL/rIUiwFJTgKyErIRgQSyECKyAbMWi/5MUCcZTFCwi/8Wi/5MUIAEz6uHI0xQsIkxACInDmVEEkSJ",clear:"C4EBQw=="},events:[{name:"RewardsClaimed",args:[{type:"address",name:"user"},{type:"uint64",name:"pending"}]},{name:"Withdraw",args:[{type:"address",name:"from"},{type:"uint64",name:"lpAmount"}]},{name:"Deposit",args:[{type:"address",name:"to"},{type:"uint64",name:"lpAmount"}]},{name:"SwappedToVUsd",args:[{type:"address",name:"sender"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"amount"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"fee"}]},{name:"SwappedFromVUsd",args:[{type:"address",name:"recipient"},{type:"uint64",name:"tokenId"},{type:"uint64",name:"vUsdAmount"},{type:"uint64",name:"amount"},{type:"uint64",name:"fee"}]}],templateVariables:{}},rr=class{constructor(n){this.value=n}asByteArray(){return this.value}asString(){return this.value!==void 0?Buffer.from(this.value).toString("utf-8"):void 0}},T=class a{static get create(){return{_resolveByMethod(n){switch(n.method){case"createApplication":case"createApplication(address,address,uint64,uint64,uint64,uint64)void":return a.create.createApplication(n)}throw new Error("Unknown ' + verb + ' method")},createApplication(n){return{...n,method:"createApplication(address,address,uint64,uint64,uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.owner,n.args.router,n.args.a,n.args.asset,n.args.feeShareBp,n.args.balanceRatioMinBp]}}}}static get optIn(){return{optInToApplication(n){return{...n,method:"optInToApplication()void",args:Array.isArray(n.args)?n.args:[]}},deposit(n){return{...n,method:"deposit(axfer,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetTransferRef,n.args.budget]}}}}static get closeOut(){return{closeOutOfApplication(n){return{...n,method:"closeOutOfApplication(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.budget]}}}}static optInAsset(n){return{...n,method:"optInAsset()void",args:Array.isArray(n.args)?n.args:[]}}static deposit(n){return{...n,method:"deposit(axfer,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.assetTransferRef,n.args.budget]}}static withdraw(n){return{...n,method:"withdraw(uint64,uint64)void",args:Array.isArray(n.args)?n.args:[n.args.amountLp,n.args.budget]}}static swapToVUsd(n){return{...n,method:"swapToVUsd(address,uint64,bool)uint64",args:Array.isArray(n.args)?n.args:[n.args.user,n.args.amount,n.args.zeroFee]}}static swapFromVUsd(n){return{...n,method:"swapFromVUsd(address,uint64,uint64,bool)uint64",args:Array.isArray(n.args)?n.args:[n.args.user,n.args.amount,n.args.receiveAmountMin,n.args.zeroFee]}}static setFeeShare(n){return{...n,method:"setFeeShare(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.feeShareBp]}}static adjustTotalLpAmount(n){return{...n,method:"adjustTotalLpAmount()void",args:Array.isArray(n.args)?n.args:[]}}static setBalanceRatioMinBp(n){return{...n,method:"setBalanceRatioMinBP(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.balanceRatioMinBp]}}static stopDeposit(n){return{...n,method:"stopDeposit()void",args:Array.isArray(n.args)?n.args:[]}}static startDeposit(n){return{...n,method:"startDeposit()void",args:Array.isArray(n.args)?n.args:[]}}static stopWithdraw(n){return{...n,method:"stopWithdraw()void",args:Array.isArray(n.args)?n.args:[]}}static startWithdraw(n){return{...n,method:"startWithdraw()void",args:Array.isArray(n.args)?n.args:[]}}static setStopAuthority(n){return{...n,method:"setStopAuthority(address)void",args:Array.isArray(n.args)?n.args:[n.args.stopAuthority]}}static setRouter(n){return{...n,method:"setRouter(address)void",args:Array.isArray(n.args)?n.args:[n.args.router]}}static claimRewards(n){return{...n,method:"claimRewards()void",args:Array.isArray(n.args)?n.args:[]}}static setAdminFeeShare(n){return{...n,method:"setAdminFeeShare(uint64)void",args:Array.isArray(n.args)?n.args:[n.args.adminFeeShareBp]}}static claimAdminFee(n){return{...n,method:"claimAdminFee()void",args:Array.isArray(n.args)?n.args:[]}}static pendingReward(n){return{...n,method:"pendingReward(address)uint64",args:Array.isArray(n.args)?n.args:[n.args.user]}}static transferOwnership(n){return{...n,method:"transferOwnership(address)void",args:Array.isArray(n.args)?n.args:[n.args.newOwner]}}};var or=class a{appClient;constructor(n){this.appClient=n instanceof Di.AppClient?n:new Di.AppClient({...n,appSpec:ar})}decodeReturnValue(n,i){return i!==void 0?(0,Tc.getArc56ReturnValue)(i,this.appClient.getABIMethod(n),ar.structs):void 0}static async fromCreatorAndName(n){return new a(await Di.AppClient.fromCreatorAndName({...n,appSpec:ar}))}static async fromNetwork(n){return new a(await Di.AppClient.fromNetwork({...n,appSpec:ar}))}get appId(){return this.appClient.appId}get appAddress(){return this.appClient.appAddress}get appName(){return this.appClient.appName}get appSpec(){return this.appClient.appSpec}get algorand(){return this.appClient.algorand}params={optIn:{optInToApplication:(n={args:[]})=>this.appClient.params.optIn(T.optIn.optInToApplication(n)),deposit:n=>this.appClient.params.optIn(T.optIn.deposit(n))},closeOut:{closeOutOfApplication:(n={args:[void 0]})=>this.appClient.params.closeOut(T.closeOut.closeOutOfApplication(n))},clearState:n=>this.appClient.params.bare.clearState(n),optInAsset:(n={args:[]})=>this.appClient.params.call(T.optInAsset(n)),deposit:n=>this.appClient.params.call(T.deposit(n)),withdraw:n=>this.appClient.params.call(T.withdraw(n)),swapToVUsd:n=>this.appClient.params.call(T.swapToVUsd(n)),swapFromVUsd:n=>this.appClient.params.call(T.swapFromVUsd(n)),setFeeShare:n=>this.appClient.params.call(T.setFeeShare(n)),adjustTotalLpAmount:(n={args:[]})=>this.appClient.params.call(T.adjustTotalLpAmount(n)),setBalanceRatioMinBp:n=>this.appClient.params.call(T.setBalanceRatioMinBp(n)),stopDeposit:(n={args:[]})=>this.appClient.params.call(T.stopDeposit(n)),startDeposit:(n={args:[]})=>this.appClient.params.call(T.startDeposit(n)),stopWithdraw:(n={args:[]})=>this.appClient.params.call(T.stopWithdraw(n)),startWithdraw:(n={args:[]})=>this.appClient.params.call(T.startWithdraw(n)),setStopAuthority:n=>this.appClient.params.call(T.setStopAuthority(n)),setRouter:n=>this.appClient.params.call(T.setRouter(n)),claimRewards:(n={args:[]})=>this.appClient.params.call(T.claimRewards(n)),setAdminFeeShare:n=>this.appClient.params.call(T.setAdminFeeShare(n)),claimAdminFee:(n={args:[]})=>this.appClient.params.call(T.claimAdminFee(n)),pendingReward:n=>this.appClient.params.call(T.pendingReward(n)),transferOwnership:n=>this.appClient.params.call(T.transferOwnership(n))};createTransaction={optIn:{optInToApplication:(n={args:[]})=>this.appClient.createTransaction.optIn(T.optIn.optInToApplication(n)),deposit:n=>this.appClient.createTransaction.optIn(T.optIn.deposit(n))},closeOut:{closeOutOfApplication:(n={args:[void 0]})=>this.appClient.createTransaction.closeOut(T.closeOut.closeOutOfApplication(n))},clearState:n=>this.appClient.createTransaction.bare.clearState(n),optInAsset:(n={args:[]})=>this.appClient.createTransaction.call(T.optInAsset(n)),deposit:n=>this.appClient.createTransaction.call(T.deposit(n)),withdraw:n=>this.appClient.createTransaction.call(T.withdraw(n)),swapToVUsd:n=>this.appClient.createTransaction.call(T.swapToVUsd(n)),swapFromVUsd:n=>this.appClient.createTransaction.call(T.swapFromVUsd(n)),setFeeShare:n=>this.appClient.createTransaction.call(T.setFeeShare(n)),adjustTotalLpAmount:(n={args:[]})=>this.appClient.createTransaction.call(T.adjustTotalLpAmount(n)),setBalanceRatioMinBp:n=>this.appClient.createTransaction.call(T.setBalanceRatioMinBp(n)),stopDeposit:(n={args:[]})=>this.appClient.createTransaction.call(T.stopDeposit(n)),startDeposit:(n={args:[]})=>this.appClient.createTransaction.call(T.startDeposit(n)),stopWithdraw:(n={args:[]})=>this.appClient.createTransaction.call(T.stopWithdraw(n)),startWithdraw:(n={args:[]})=>this.appClient.createTransaction.call(T.startWithdraw(n)),setStopAuthority:n=>this.appClient.createTransaction.call(T.setStopAuthority(n)),setRouter:n=>this.appClient.createTransaction.call(T.setRouter(n)),claimRewards:(n={args:[]})=>this.appClient.createTransaction.call(T.claimRewards(n)),setAdminFeeShare:n=>this.appClient.createTransaction.call(T.setAdminFeeShare(n)),claimAdminFee:(n={args:[]})=>this.appClient.createTransaction.call(T.claimAdminFee(n)),pendingReward:n=>this.appClient.createTransaction.call(T.pendingReward(n)),transferOwnership:n=>this.appClient.createTransaction.call(T.transferOwnership(n))};send={optIn:{optInToApplication:async(n={args:[]})=>{let i=await this.appClient.send.optIn(T.optIn.optInToApplication(n));return{...i,return:i.return}},deposit:async n=>{let i=await this.appClient.send.optIn(T.optIn.deposit(n));return{...i,return:i.return}}},closeOut:{closeOutOfApplication:async(n={args:[void 0]})=>{let i=await this.appClient.send.closeOut(T.closeOut.closeOutOfApplication(n));return{...i,return:i.return}}},clearState:n=>this.appClient.send.bare.clearState(n),optInAsset:async(n={args:[]})=>{let i=await this.appClient.send.call(T.optInAsset(n));return{...i,return:i.return}},deposit:async n=>{let i=await this.appClient.send.call(T.deposit(n));return{...i,return:i.return}},withdraw:async n=>{let i=await this.appClient.send.call(T.withdraw(n));return{...i,return:i.return}},swapToVUsd:async n=>{let i=await this.appClient.send.call(T.swapToVUsd(n));return{...i,return:i.return}},swapFromVUsd:async n=>{let i=await this.appClient.send.call(T.swapFromVUsd(n));return{...i,return:i.return}},setFeeShare:async n=>{let i=await this.appClient.send.call(T.setFeeShare(n));return{...i,return:i.return}},adjustTotalLpAmount:async(n={args:[]})=>{let i=await this.appClient.send.call(T.adjustTotalLpAmount(n));return{...i,return:i.return}},setBalanceRatioMinBp:async n=>{let i=await this.appClient.send.call(T.setBalanceRatioMinBp(n));return{...i,return:i.return}},stopDeposit:async(n={args:[]})=>{let i=await this.appClient.send.call(T.stopDeposit(n));return{...i,return:i.return}},startDeposit:async(n={args:[]})=>{let i=await this.appClient.send.call(T.startDeposit(n));return{...i,return:i.return}},stopWithdraw:async(n={args:[]})=>{let i=await this.appClient.send.call(T.stopWithdraw(n));return{...i,return:i.return}},startWithdraw:async(n={args:[]})=>{let i=await this.appClient.send.call(T.startWithdraw(n));return{...i,return:i.return}},setStopAuthority:async n=>{let i=await this.appClient.send.call(T.setStopAuthority(n));return{...i,return:i.return}},setRouter:async n=>{let i=await this.appClient.send.call(T.setRouter(n));return{...i,return:i.return}},claimRewards:async(n={args:[]})=>{let i=await this.appClient.send.call(T.claimRewards(n));return{...i,return:i.return}},setAdminFeeShare:async n=>{let i=await this.appClient.send.call(T.setAdminFeeShare(n));return{...i,return:i.return}},claimAdminFee:async(n={args:[]})=>{let i=await this.appClient.send.call(T.claimAdminFee(n));return{...i,return:i.return}},pendingReward:async n=>{let i=await this.appClient.send.call(T.pendingReward(n));return{...i,return:i.return}},transferOwnership:async n=>{let i=await this.appClient.send.call(T.transferOwnership(n));return{...i,return:i.return}}};clone(n){return new a(this.appClient.clone(n))}async pendingReward(n){return(await this.appClient.send.call(T.pendingReward(n))).return}state={global:{getAll:async()=>{let n=await this.appClient.state.global.getAll();return{feeShareBp:n.feeShareBP,router:n.router,tokenBalance:n.tokenBalance,vUsdBalance:n.vUsdBalance,balanceRatioMinBp:n.balanceRatioMinBP,reserves:n.reserves,a:n.a,d:n.d,tokenAmountReduce:n.tokenAmountReduce,tokenAmountIncrease:n.tokenAmountIncrease,stopAuthority:n.stopAuthority,canDeposit:n.canDeposit,canWithdraw:n.canWithdraw,asset:n.asset,adminFeeShareBp:n.adminFeeShareBP,totalSupply:n.totalSupply,accRewardPerShareP:new rr(n.accRewardPerShareP),adminFeeAmount:n.adminFeeAmount,owner:n.owner}},feeShareBp:async()=>await this.appClient.state.global.getValue("feeShareBP"),router:async()=>await this.appClient.state.global.getValue("router"),tokenBalance:async()=>await this.appClient.state.global.getValue("tokenBalance"),vUsdBalance:async()=>await this.appClient.state.global.getValue("vUsdBalance"),balanceRatioMinBp:async()=>await this.appClient.state.global.getValue("balanceRatioMinBP"),reserves:async()=>await this.appClient.state.global.getValue("reserves"),a:async()=>await this.appClient.state.global.getValue("a"),d:async()=>await this.appClient.state.global.getValue("d"),tokenAmountReduce:async()=>await this.appClient.state.global.getValue("tokenAmountReduce"),tokenAmountIncrease:async()=>await this.appClient.state.global.getValue("tokenAmountIncrease"),stopAuthority:async()=>await this.appClient.state.global.getValue("stopAuthority"),canDeposit:async()=>await this.appClient.state.global.getValue("canDeposit"),canWithdraw:async()=>await this.appClient.state.global.getValue("canWithdraw"),asset:async()=>await this.appClient.state.global.getValue("asset"),adminFeeShareBp:async()=>await this.appClient.state.global.getValue("adminFeeShareBP"),totalSupply:async()=>await this.appClient.state.global.getValue("totalSupply"),accRewardPerShareP:async()=>new rr(await this.appClient.state.global.getValue("accRewardPerShareP")),adminFeeAmount:async()=>await this.appClient.state.global.getValue("adminFeeAmount"),owner:async()=>await this.appClient.state.global.getValue("owner")},local:n=>{let i=typeof n=="string"?n:(0,Fc.encodeAddress)(n.publicKey);return{getAll:async()=>{let r=await this.appClient.state.local(i).getAll();return{balance:r.balance,userRewardDebt:r.userRewardDebt}},balance:async()=>await this.appClient.state.local(i).getValue("balance"),userRewardDebt:async()=>await this.appClient.state.local(i).getValue("userRewardDebt")}}};newGroup(){let n=this,i=this.algorand.newGroup(),r=Promise.resolve(),o=[];return{optInAsset(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.optInAsset(s))),o.push(void 0),this},deposit(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.deposit(s))),o.push(void 0),this},withdraw(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.withdraw(s))),o.push(void 0),this},swapToVUsd(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.swapToVUsd(s))),o.push(d=>n.decodeReturnValue("swapToVUsd(address,uint64,bool)uint64",d)),this},swapFromVUsd(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.swapFromVUsd(s))),o.push(d=>n.decodeReturnValue("swapFromVUsd(address,uint64,uint64,bool)uint64",d)),this},setFeeShare(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setFeeShare(s))),o.push(void 0),this},adjustTotalLpAmount(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.adjustTotalLpAmount(s))),o.push(void 0),this},setBalanceRatioMinBp(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setBalanceRatioMinBp(s))),o.push(void 0),this},stopDeposit(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.stopDeposit(s))),o.push(void 0),this},startDeposit(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.startDeposit(s))),o.push(void 0),this},stopWithdraw(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.stopWithdraw(s))),o.push(void 0),this},startWithdraw(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.startWithdraw(s))),o.push(void 0),this},setStopAuthority(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setStopAuthority(s))),o.push(void 0),this},setRouter(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setRouter(s))),o.push(void 0),this},claimRewards(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.claimRewards(s))),o.push(void 0),this},setAdminFeeShare(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.setAdminFeeShare(s))),o.push(void 0),this},claimAdminFee(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.claimAdminFee(s))),o.push(void 0),this},pendingReward(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.pendingReward(s))),o.push(d=>n.decodeReturnValue("pendingReward(address)uint64",d)),this},transferOwnership(s){return r=r.then(async()=>i.addAppCallMethodCall(await n.params.transferOwnership(s))),o.push(void 0),this},get optIn(){return{optInToApplication:s=>(r=r.then(async()=>i.addAppCallMethodCall(await n.params.optIn.optInToApplication(s))),o.push(void 0),this),deposit:s=>(r=r.then(async()=>i.addAppCallMethodCall(await n.params.optIn.deposit(s))),o.push(void 0),this)}},get closeOut(){return{closeOutOfApplication:s=>(r=r.then(async()=>i.addAppCallMethodCall(await n.params.closeOut.closeOutOfApplication(s))),o.push(void 0),this)}},clearState(s){return r=r.then(()=>i.addAppCall(n.params.clearState(s))),this},addTransaction(s,d){return r=r.then(()=>i.addTransaction(s,d)),this},async composer(){return await r,i},async simulate(s){await r;let d=await(s?i.simulate(s):i.simulate());return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}},async send(s){await r;let d=await i.send(s);return{...d,returns:d.returns?.map((c,g)=>o[g]!==void 0?o[g](c):c.returnValue)}}}}};var pe=class{lpAmount;rewardDebt;constructor(n){this.lpAmount=n.lpAmount,this.rewardDebt=n.rewardDebt}get userLiquidity(){return M(this.lpAmount,3).toFixed()}earned(n,i){let r=Vs(this.lpAmount,this.rewardDebt,n.accRewardPerShareP,n.p);return i?M(r,i).toFixed():r}};var Ye=class{};var Ei=class extends Ye{constructor(i,r){super();this.algorand=i;this.api=r}chainType="ALG";P=48;async buildRawTransactionClaimRewards(i){let r=i.accountAddress,o=BigInt(i.token.tokenAddress),s=BigInt(i.token.poolAddress),d=this.getPool(s),c=this.algorand.newGroup();c.addAppCallMethodCall(await d.params.claimRewards({args:[],sender:r,extraFee:$t(1),assetReferences:[o]}));let{transactions:g}=await c.buildTransactions();return g=(0,Dt.assignGroupID)(g),qt(...g)}async buildRawTransactionDeposit(i){let r=i.accountAddress,o=BigInt(i.amount),s=BigInt(i.token.tokenAddress),d=BigInt(i.token.poolAddress),c=this.getPool(d),A=await Ia(d,r,this.algorand)?Dt.OnApplicationComplete.NoOpOC:Dt.OnApplicationComplete.OptInOC,l=this.algorand.newGroup(),u=await this.algorand.createTransaction.assetTransfer({assetId:s,amount:o,sender:r,receiver:c.appAddress});l.addAppCallMethodCall(await c.params.deposit({args:{assetTransferRef:u},sender:r,onComplete:A,extraFee:$t(5)}));let{transactions:b}=await l.buildTransactions();return b=(0,Dt.assignGroupID)(b),qt(...b)}async buildRawTransactionWithdraw(i){let r=i.accountAddress,o=BigInt(i.amount),s=BigInt(i.token.tokenAddress),d=BigInt(i.token.poolAddress),c=this.getPool(d),g=this.algorand.newGroup();g.addAppCallMethodCall(await c.params.withdraw({args:{amountLp:o},sender:r,assetReferences:[s],extraFee:$t(7)}));let{transactions:A}=await g.buildTransactions();return A=(0,Dt.assignGroupID)(A),qt(...A)}async getPoolInfoFromChain(i){let o=await this.getPool(BigInt(i.poolAddress)).state.global.getAll(),s=o.a?.toString(),d=o.d?.toString(),c=o.tokenBalance?.toString(),g=o.vUsdBalance?.toString(),A=o.totalSupply?.toString(),l=(0,Dt.bytesToBigInt)(o.accRewardPerShareP?.asByteArray()??Uint8Array.from([])).toString();if(s&&d&&c&&g&&A&&l){let u=me({tokenBalance:c,vUsdBalance:g});return{aValue:s,dValue:d,tokenBalance:c,vUsdBalance:g,totalLpAmount:A,accRewardPerShareP:l,p:this.P,imbalance:u}}throw new h("Unable to pool info from chain")}async getUserBalanceInfo(i,r){let o=BigInt(r.poolAddress),s=this.getPool(o);try{let{balance:d,userRewardDebt:c}=await s.state.local(i).getAll();if(d!==void 0&&c!==void 0)return new pe({lpAmount:d.toString(),rewardDebt:c.toString()})}catch{let g=(await this.algorand.account.getInformation(i)).appsLocalState;if(g&&!g.find(({id:l})=>l===o))return new pe({lpAmount:"0",rewardDebt:"0"})}throw new h("Unable to get user balance")}getPool(i){return this.algorand.client.getTypedAppClientById(or,{appId:i})}};var Et=require("web3");var bl={abi:[{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"uint256",name:"_a",type:"uint256"},{internalType:"contract ERC20",name:"_token",type:"address"},{internalType:"uint16",name:"_feeShareBP",type:"uint16"},{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"},{internalType:"string",name:"lpName",type:"string"},{internalType:"string",name:"lpSymbol",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Deposit",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"RewardsClaimed",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"recipient",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedFromVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"sender",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"vUsdAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"fee",type:"uint256"}],name:"SwappedToVUsd",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"a",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"accRewardPerShareP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adjustTotalLpAmount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"adminFeeAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"adminFeeShareBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"balanceRatioMinBP",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"canWithdraw",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"claimAdminFee",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"claimRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"d",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"feeShareBP",outputs:[{internalType:"uint16",name:"",type:"uint16"}],stateMutability:"view",type:"function"},{inputs:[],name:"getPrice",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"x",type:"uint256"}],name:"getY",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"pendingReward",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"reserves",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"router",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_adminFeeShareBP",type:"uint256"}],name:"setAdminFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_balanceRatioMinBP",type:"uint256"}],name:"setBalanceRatioMinBP",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint16",name:"_feeShareBP",type:"uint16"}],name:"setFeeShare",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"}],name:"setRouter",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_stopAuthority",type:"address"}],name:"setStopAuthority",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"startWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"stopWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"receiveAmountMin",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapFromVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"bool",name:"zeroFee",type:"bool"}],name:"swapToVUsd",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"token",outputs:[{internalType:"contract ERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"}],name:"userRewardDebt",outputs:[{internalType:"uint256",name:"amount",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"vUsdBalance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountLp",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},_i=bl;var $i=class extends Ye{constructor(i,r){super();this.web3=i;this.api=r}chainType="EVM";P=52;async getUserBalanceInfo(i,r){let o;try{o=await ua(this.getUserBalanceInfoByBatch(i,r),`Cannot get UserBalanceInfo for ${r.name} on ${r.chainSymbol}`,5e3)}catch{o=await Hr(()=>this.getUserBalanceInfoPerProperty(i,r),`Cannot get UserBalanceInfo for ${r.name} on ${r.chainSymbol}`,5,2e3)}return o}async getPoolInfoFromChain(i){let r;try{r=await ua(this.getPoolInfoByBatch(i),`Cannot get PoolInfo for ${i.name} on ${i.chainSymbol}`,5e3)}catch{r=await Hr(()=>this.getPoolInfoPerProperty(i),`Cannot get PoolInfo for ${i.name} on ${i.chainSymbol}`,5,2e3)}return r}async getUserBalanceInfoByBatch(i,r){let o=new this.web3.eth.BatchRequest,s=this.getPoolContract(r.poolAddress),d=s.methods.userRewardDebt(i).encodeABI(),c=s.methods.balanceOf(i).encodeABI();o.add({method:"eth_call",params:[{to:r.poolAddress,data:d},"latest"]}),o.add({method:"eth_call",params:[{to:r.poolAddress,data:c},"latest"]});let[g,A]=await o.execute();if(g&&A&&!g.error&&!A.error)return new pe({lpAmount:Et.Web3.utils.toBigInt(A.result).toString(),rewardDebt:Et.Web3.utils.toBigInt(g.result).toString()});throw new Error("Batched failed")}async getUserBalanceInfoPerProperty(i,r){let o=(await this.getPoolContract(r.poolAddress).methods.userRewardDebt(i).call()).toString(),s=(await this.getPoolContract(r.poolAddress).methods.balanceOf(i).call()).toString();return new pe({lpAmount:s,rewardDebt:o})}async getPoolInfoByBatch(i){let r=new this.web3.eth.BatchRequest,o=this.getPoolContract(i.poolAddress),s=o.methods.a().encodeABI(),d=o.methods.d().encodeABI(),c=o.methods.tokenBalance().encodeABI(),g=o.methods.vUsdBalance().encodeABI(),A=o.methods.totalSupply().encodeABI(),l=o.methods.accRewardPerShareP().encodeABI();r.add({method:"eth_call",params:[{to:i.poolAddress,data:s},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:d},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:c},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:g},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:A},"latest"]}),r.add({method:"eth_call",params:[{to:i.poolAddress,data:l},"latest"]});let[u,b,C,Y,W,F]=await r.execute();if(u&&b&&C&&Y&&W&&F&&!u.error&&!b.error&&!C.error&&!Y.error&&!W.error&&!F.error){let w=Et.Web3.utils.toBigInt(C.result).toString(),R=Et.Web3.utils.toBigInt(Y.result).toString(),G=me({tokenBalance:w,vUsdBalance:R});return{aValue:Et.Web3.utils.toBigInt(u.result).toString(),dValue:Et.Web3.utils.toBigInt(b.result).toString(),tokenBalance:w,vUsdBalance:R,totalLpAmount:Et.Web3.utils.toBigInt(W.result).toString(),accRewardPerShareP:Et.Web3.utils.toBigInt(F.result).toString(),p:this.P,imbalance:G}}throw new Error("Batched failed")}async getPoolInfoPerProperty(i){let r=this.getPoolContract(i.poolAddress),o=(await r.methods.a().call()).toString(),s=(await r.methods.d().call()).toString(),d=(await r.methods.tokenBalance().call()).toString(),c=(await r.methods.vUsdBalance().call()).toString(),g=(await r.methods.totalSupply().call()).toString(),A=(await r.methods.accRewardPerShareP().call()).toString(),l=me({tokenBalance:d,vUsdBalance:c});return{aValue:o,dValue:s,tokenBalance:d,vUsdBalance:c,totalLpAmount:g,accRewardPerShareP:A,p:this.P,imbalance:l}}async buildRawTransactionDeposit(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.deposit(i.amount).encodeABI()})}async buildRawTransactionWithdraw(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.withdraw(i.amount).encodeABI()})}async buildRawTransactionClaimRewards(i){return Promise.resolve({...this.buildTxParams(i),data:this.getPoolContract(i.token.poolAddress).methods.claimRewards().encodeABI()})}buildTxParams(i){return{from:i.accountAddress,to:i.token.poolAddress,value:"0"}}getPoolContract(i){return new this.web3.eth.Contract(_i.abi,i)}};var sr=class{constructor(n,i,r,o){this.api=n;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=o}async approve(n,i){if(i){let r=n,o=i;return this.tokenService.buildRawTransactionApprove({...o,spender:o.token.poolAddress},r)}else{let r=n;return this.tokenService.buildRawTransactionApprove({...r,spender:r.token.poolAddress})}}async deposit(n,i){return Q(n.amount),O("amount",n.amount,n.token.decimals),n.amount=X(n.amount,n.token.decimals).toFixed(),_n(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionDeposit(n)}async withdraw(n,i){return Q(n.amount),O("amount",n.amount,n.token.decimals),n.amount=X(n.amount,3).toFixed(),_n(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionWithdraw(n)}async claimRewards(n,i){return _n(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).buildRawTransactionClaimRewards(n)}};var ft=require("@project-serum/anchor"),Rt=require("@solana/web3.js");var dr=class extends Ye{constructor(i,r){super();this.solanaRpcUrl=i;this.api=r}chainType="SOLANA";P=48;async getUserBalanceInfo(i,r){let o=this.buildAnchorProvider(i),s=this.getBridge(r.bridgeAddress,o),d=new Rt.PublicKey(r.poolAddress),c=await s.account.pool.fetch(d);try{let g=await _r(new Rt.PublicKey(i),c.mint,s.programId),{lpAmount:A,rewardDebt:l}=await s.account.userDeposit.fetch(g);return new pe({lpAmount:A.toString(),rewardDebt:l.toString()})}catch{return new pe({lpAmount:"0",rewardDebt:"0"})}}async getPoolInfoFromChain(i){let r=this.buildAnchorProvider(i.bridgeAddress),o=await this.getBridge(i.bridgeAddress,r).account.pool.fetch(i.poolAddress),s=o.vUsdBalance.toString(),d=o.tokenBalance.toString(),c=me({tokenBalance:d,vUsdBalance:s});return{dValue:o.d.toString(),aValue:o.a.toString(),totalLpAmount:o.totalLpAmount.toString(),vUsdBalance:s,tokenBalance:d,accRewardPerShareP:o.accRewardPerShareP.toString(),p:this.P,imbalance:c}}async buildRawTransactionDeposit(i){let{bridge:r,accounts:o,preInstructions:s}=await this.prepareDataForTransaction(i),d=await r.methods.deposit(new ft.BN(i.amount)).accounts(o).preInstructions(s).transaction();return d.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,d.feePayer=new Rt.PublicKey(i.accountAddress),await kn(d,i.txFeeParams,this.solanaRpcUrl),d}async buildRawTransactionWithdraw(i){let{bridge:r,accounts:o,preInstructions:s}=await this.prepareDataForTransaction(i),d=await r.methods.withdraw(new ft.BN(i.amount)).accounts(o).preInstructions(s).transaction();return d.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,d.feePayer=new Rt.PublicKey(i.accountAddress),await kn(d,i.txFeeParams,this.solanaRpcUrl),d}async buildRawTransactionClaimRewards(i){let{bridge:r,accounts:o,preInstructions:s}=await this.prepareDataForTransaction(i),d=await r.methods.claimRewards().accounts(o).preInstructions(s).transaction();return d.recentBlockhash=(await this.buildAnchorProvider(i.accountAddress).connection.getLatestBlockhash()).blockhash,d.feePayer=new Rt.PublicKey(i.accountAddress),await kn(d,i.txFeeParams,this.solanaRpcUrl),d}async prepareDataForTransaction(i){let r=this.buildAnchorProvider(i.accountAddress),o=this.getBridge(i.token.bridgeAddress,r),{accounts:s,preInstructions:d}=await this._getLPTransactionData(o,i.token.poolAddress,i.accountAddress,r);return{bridge:o,accounts:s,preInstructions:d}}getBridge(i,r){return new ft.Program(wi,i,r)}buildAnchorProvider(i){let r=new Rt.Connection(this.solanaRpcUrl,"confirmed"),o=new Rt.PublicKey(i);return new ft.AnchorProvider(r,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}async _getLPTransactionData(i,r,o,s){let d=new Rt.PublicKey(o),c=await tn(i.programId),g=await Pn(i.programId),A=new Rt.PublicKey(r),u=(await i.account.pool.fetch(A)).mint,b=await At(d,u),C=await Ln(u,i.programId),Y=await _r(d,u,i.programId),W=[ft.web3.ComputeBudgetProgram.setComputeUnitLimit({units:1e6})];try{await jn(b,s)}catch{let G=await ft.Spl.associatedToken(s).methods.create().accounts({mint:u,owner:d,associatedAccount:b}).instruction();W.push(G)}try{await i.account.userDeposit.fetch(Y)}catch{let R=await i.methods.initDepositAccount().accounts({mint:u,user:d,userDeposit:Y}).instruction();W.push(R)}return{accounts:{mint:u,user:d,config:c,pool:A,bridgeAuthority:g,userDeposit:Y,userToken:b,bridgeToken:C},preInstructions:W}}};var pv=require("@stellar/stellar-sdk");var e=require("@stellar/stellar-sdk"),yl=e.contract.Spec,Cl=e.contract.Client;var cr=class extends Cl{constructor(i){super(new yl(["AAAAAAAAAAAAAAAKaW5pdGlhbGl6ZQAAAAAABwAAAAAAAAAFYWRtaW4AAAAAAAATAAAAAAAAAAZicmlkZ2UAAAAAABMAAAAAAAAAAWEAAAAAAAAKAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAADGZlZV9zaGFyZV9icAAAAAoAAAAAAAAAFGJhbGFuY2VfcmF0aW9fbWluX2JwAAAACgAAAAAAAAASYWRtaW5fZmVlX3NoYXJlX2JwAAAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAHZGVwb3NpdAAAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABmFtb3VudAAAAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAId2l0aGRyYXcAAAACAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAACWFtb3VudF9scAAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3dhcF90b192X3VzZAAAAAAAAAMAAAAAAAAABHVzZXIAAAATAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAAPc3dhcF9mcm9tX3ZfdXNkAAAAAAQAAAAAAAAABHVzZXIAAAATAAAAAAAAAAt2dXNkX2Ftb3VudAAAAAAKAAAAAAAAABJyZWNlaXZlX2Ftb3VudF9taW4AAAAAAAoAAAAAAAAACHplcm9fZmVlAAAAAQAAAAEAAAPpAAAACgAAAAM=","AAAAAAAAAAAAAAANY2xhaW1fcmV3YXJkcwAAAAAAAAEAAAAAAAAABnNlbmRlcgAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAdgYWRtaW5gAAAAAA1zZXRfZmVlX3NoYXJlAAAAAAAAAQAAAAAAAAAMZmVlX3NoYXJlX2JwAAAACgAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAWYWRqdXN0X3RvdGFsX2xwX2Ftb3VudAAAAAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAYc2V0X2JhbGFuY2VfcmF0aW9fbWluX2JwAAAAAQAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAMc3RvcF9kZXBvc2l0AAAAAAAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAANc3RhcnRfZGVwb3NpdAAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAANc3RvcF93aXRoZHJhdwAAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAOc3RhcnRfd2l0aGRyYXcAAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAASc2V0X3N0b3BfYXV0aG9yaXR5AAAAAAABAAAAAAAAAA5zdG9wX2F1dGhvcml0eQAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAAKc2V0X2JyaWRnZQAAAAAAAQAAAAAAAAAGYnJpZGdlAAAAAAATAAAAAQAAA+kAAAPtAAAAAAAAAAM=","AAAAAAAAAAAAAAAJc2V0X2FkbWluAAAAAAAAAQAAAAAAAAAJbmV3X2FkbWluAAAAAAAAEwAAAAEAAAPpAAAD7QAAAAAAAAAD","AAAAAAAAAAAAAAATc2V0X2FkbWluX2ZlZV9zaGFyZQAAAAABAAAAAAAAABJhZG1pbl9mZWVfc2hhcmVfYnAAAAAAAAoAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAAAAAAPY2xhaW1fYWRtaW5fZmVlAAAAAAAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAAAAAAZgdmlld2AAAAAAAA5wZW5kaW5nX3Jld2FyZAAAAAAAAQAAAAAAAAAEdXNlcgAAABMAAAABAAAD6QAAAAoAAAAD","AAAAAAAAAAAAAAAIZ2V0X3Bvb2wAAAAAAAAAAQAAA+kAAAfQAAAABFBvb2wAAAAD","AAAAAAAAAAAAAAAJZ2V0X2FkbWluAAAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAASZ2V0X3N0b3BfYXV0aG9yaXR5AAAAAAAAAAAAAQAAA+kAAAATAAAAAw==","AAAAAAAAAAAAAAAKZ2V0X2JyaWRnZQAAAAAAAAAAAAEAAAPpAAAAEwAAAAM=","AAAAAAAAAAAAAAAQZ2V0X3VzZXJfZGVwb3NpdAAAAAEAAAAAAAAABHVzZXIAAAATAAAAAQAAA+kAAAfQAAAAC1VzZXJEZXBvc2l0AAAAAAM=","AAAAAAAAAAAAAAAHdXBncmFkZQAAAAABAAAAAAAAAA1uZXdfd2FzbV9oYXNoAAAAAAAD7gAAACAAAAABAAAD6QAAA+0AAAAAAAAAAw==","AAAAAQAAAAAAAAAAAAAAD1N3YXBwZWRGcm9tVlVzZAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAlyZWNpcGllbnQAAAAAAAATAAAAAAAAAAV0b2tlbgAAAAAAABMAAAAAAAAAC3Z1c2RfYW1vdW50AAAAAAo=","AAAAAQAAAAAAAAAAAAAADVN3YXBwZWRUb1ZVc2QAAAAAAAAFAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAAA2ZlZQAAAAAKAAAAAAAAAAZzZW5kZXIAAAAAABMAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAALdnVzZF9hbW91bnQAAAAACg==","AAAAAQAAAAAAAAAAAAAAB0RlcG9zaXQAAAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAACFdpdGhkcmF3AAAAAgAAAAAAAAAGYW1vdW50AAAAAAAKAAAAAAAAAAR1c2VyAAAAEw==","AAAAAQAAAAAAAAAAAAAADlJld2FyZHNDbGFpbWVkAAAAAAACAAAAAAAAAAZhbW91bnQAAAAAAAoAAAAAAAAABHVzZXIAAAAT","AAAAAQAAAAAAAAAAAAAABkJyaWRnZQAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAgAAAAAAAAAAAAAAB0RhdGFLZXkAAAAAAQAAAAEAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAEAAAAT","AAAAAQAAAAAAAAAAAAAABFBvb2wAAAAPAAAAAAAAAAFhAAAAAAAACgAAAAAAAAAWYWNjX3Jld2FyZF9wZXJfc2hhcmVfcAAAAAAACgAAAAAAAAAQYWRtaW5fZmVlX2Ftb3VudAAAAAoAAAAAAAAAEmFkbWluX2ZlZV9zaGFyZV9icAAAAAAACgAAAAAAAAAUYmFsYW5jZV9yYXRpb19taW5fYnAAAAAKAAAAAAAAAAtjYW5fZGVwb3NpdAAAAAABAAAAAAAAAAxjYW5fd2l0aGRyYXcAAAABAAAAAAAAAAFkAAAAAAAACgAAAAAAAAAIZGVjaW1hbHMAAAAEAAAAAAAAAAxmZWVfc2hhcmVfYnAAAAAKAAAAAAAAAAhyZXNlcnZlcwAAAAoAAAAAAAAABXRva2VuAAAAAAAAEwAAAAAAAAANdG9rZW5fYmFsYW5jZQAAAAAAAAoAAAAAAAAAD3RvdGFsX2xwX2Ftb3VudAAAAAAKAAAAAAAAAA12X3VzZF9iYWxhbmNlAAAAAAAACg==","AAAAAQAAAAAAAAAAAAAAC1VzZXJEZXBvc2l0AAAAAAIAAAAAAAAACWxwX2Ftb3VudAAAAAAAAAoAAAAAAAAAC3Jld2FyZF9kZWJ0AAAAAAo=","AAAAAQAAAAAAAAAAAAAABUFkbWluAAAAAAAAAQAAAAAAAAABMAAAAAAAABM=","AAAAAQAAAAAAAAAAAAAAEEdhc09yYWNsZUFkZHJlc3MAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAAAQAAAAAAAAAAAAAACEdhc1VzYWdlAAAAAQAAAAAAAAABMAAAAAAAA+wAAAAEAAAACg==","AAAAAQAAAAAAAAAAAAAAC05hdGl2ZVRva2VuAAAAAAEAAAAAAAAAATAAAAAAAAAT","AAAAAQAAAAAAAAAAAAAADVN0b3BBdXRob3JpdHkAAAAAAAABAAAAAAAAAAEwAAAAAAAAEw==","AAAABAAAAAAAAAAAAAAABUVycm9yAAAAAAAAKAAAAAAAAAANVW5pbXBsZW1lbnRlZAAAAAAAAAAAAAAAAAAAC0luaXRpYWxpemVkAAAAAAEAAAAAAAAADVVuaW5pdGlhbGl6ZWQAAAAAAAACAAAAAAAAAAxVbmF1dGhvcml6ZWQAAAADAAAAAAAAAApJbnZhbGlkQXJnAAAAAAAEAAAAAAAAAA5JbnZhbGlkQ2hhaW5JZAAAAAAABQAAAAAAAAATSW52YWxpZE90aGVyQ2hhaW5JZAAAAAAGAAAAAAAAAA5HYXNVc2FnZU5vdFNldAAAAAAABwAAAAAAAAANQnJva2VuQWRkcmVzcwAAAAAAAAgAAAAAAAAACE5vdEZvdW5kAAAACQAAAAAAAAAYVG9rZW5JbnN1ZmZpY2llbnRCYWxhbmNlAAAACgAAAAAAAAAKQ2FzdEZhaWxlZAAAAAAACwAAAAAAAAAMVTI1Nk92ZXJmbG93AAAADAAAAAAAAAAKWmVyb0Ftb3VudAAAAAAAZwAAAAAAAAAMUG9vbE92ZXJmbG93AAAAaAAAAAAAAAALWmVyb0NoYW5nZXMAAAAAaQAAAAAAAAARUmVzZXJ2ZXNFeGhhdXN0ZWQAAAAAAABqAAAAAAAAABpJbnN1ZmZpY2llbnRSZWNlaXZlZEFtb3VudAAAAAAAawAAAAAAAAAUQmFsYW5jZVJhdGlvRXhjZWVkZWQAAABsAAAAAAAAAAlGb3JiaWRkZW4AAAAAAABtAAAAAAAAABlVbmF1dGhvcml6ZWRTdG9wQXV0aG9yaXR5AAAAAAAAywAAAAAAAAAOU3dhcFByb2hpYml0ZWQAAAAAAMwAAAAAAAAAEkFtb3VudFRvb0xvd0ZvckZlZQAAAAAAzQAAAAAAAAAWQnJpZGdlVG9UaGVaZXJvQWRkcmVzcwAAAAAAzgAAAAAAAAAORW1wdHlSZWNpcGllbnQAAAAAAM8AAAAAAAAAE1NvdXJjZU5vdFJlZ2lzdGVyZWQAAAAA0AAAAAAAAAAVV3JvbmdEZXN0aW5hdGlvbkNoYWluAAAAAAAA0QAAAAAAAAATVW5rbm93bkFub3RoZXJDaGFpbgAAAADSAAAAAAAAABFUb2tlbnNBbHJlYWR5U2VudAAAAAAAANMAAAAAAAAAEE1lc3NhZ2VQcm9jZXNzZWQAAADUAAAAAAAAAAxOb3RFbm91Z2hGZWUAAADWAAAAAAAAAAlOb01lc3NhZ2UAAAAAAADXAAAAAAAAAA1Ob1JlY2VpdmVQb29sAAAAAAAA2AAAAAAAAAAGTm9Qb29sAAAAAADZAAAAAAAAABNVbmtub3duQW5vdGhlclRva2VuAAAAANoAAAAAAAAAD1dyb25nQnl0ZUxlbmd0aAAAAAEsAAAAAAAAAApIYXNNZXNzYWdlAAAAAAEtAAAAAAAAABdJbnZhbGlkUHJpbWFyeVNpZ25hdHVyZQAAAAEuAAAAAAAAABlJbnZhbGlkU2Vjb25kYXJ5U2lnbmF0dXJlAAAAAAABLwAAAAAAAAARTm9HYXNEYXRhRm9yQ2hhaW4AAAAAAAGQ"]),i);this.options=i}fromJSON={initialize:this.txFromJSON,deposit:this.txFromJSON,withdraw:this.txFromJSON,swap_to_v_usd:this.txFromJSON,swap_from_v_usd:this.txFromJSON,claim_rewards:this.txFromJSON,set_fee_share:this.txFromJSON,adjust_total_lp_amount:this.txFromJSON,set_balance_ratio_min_bp:this.txFromJSON,stop_deposit:this.txFromJSON,start_deposit:this.txFromJSON,stop_withdraw:this.txFromJSON,start_withdraw:this.txFromJSON,set_stop_authority:this.txFromJSON,set_bridge:this.txFromJSON,set_admin:this.txFromJSON,set_admin_fee_share:this.txFromJSON,claim_admin_fee:this.txFromJSON,pending_reward:this.txFromJSON,get_pool:this.txFromJSON,get_admin:this.txFromJSON,get_stop_authority:this.txFromJSON,get_bridge:this.txFromJSON,get_user_deposit:this.txFromJSON,upgrade:this.txFromJSON}};var ls=require("@stellar/stellar-sdk"),Nc=ls.rpc.Api;function $n(a){let{simulation:n,options:i}=a;if(!n)throw new Error("Soroban assembled transaction does not have simulation");if(Nc.isSimulationSuccess(n))return n.result==null?void 0:i.parseResultXdr(n.result.retval);throw new Error(n.error)}function qn(a){let{simulation:n}=a;if(!n)throw new Error("Soroban assembled transaction does not have simulation");return Nc.isSimulationError(n)}var gr=class extends Ye{constructor(i,r,o){super();this.nodeRpcUrlsConfig=i;this.params=r;this.api=o}chainType="SRB";P=48;async getUserBalanceInfo(i,r){let s=await this.getContract(r.poolAddress).get_user_deposit({user:i});if(qn(s))throw new h;let d=$n(s);if(!d)throw new h;let c=d.unwrap();return new pe({lpAmount:c.lp_amount.toString(),rewardDebt:c.reward_debt.toString()})}async getPoolInfoFromChain(i){let o=await this.getContract(i.poolAddress).get_pool();if(qn(o))throw new h;let s=$n(o);if(!s)throw new h;let d=s.unwrap();return{aValue:d.a.toString(),accRewardPerShareP:d.acc_reward_per_share_p.toString(),dValue:d.d.toString(),tokenBalance:d.token_balance.toString(),p:this.P,totalLpAmount:d.total_lp_amount.toString(),vUsdBalance:d.v_usd_balance.toString(),imbalance:me({tokenBalance:d.token_balance.toString(),vUsdBalance:d.v_usd_balance.toString()})}}async buildRawTransactionDeposit(i){return(await this.getContract(i.token.poolAddress,i.accountAddress).deposit({sender:i.accountAddress,amount:BigInt(i.amount)})).toXDR()}async buildRawTransactionWithdraw(i){return(await this.getContract(i.token.poolAddress,i.accountAddress).withdraw({sender:i.accountAddress,amount_lp:BigInt(i.amount)})).toXDR()}async buildRawTransactionClaimRewards(i){return(await this.getContract(i.token.poolAddress,i.accountAddress).claim_rewards({sender:i.accountAddress})).toXDR()}getContract(i,r){let o={publicKey:r,contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new cr(o)}};var An=require("@clarigen/core"),wc=require("@stacks/network"),Ze=require("@stacks/transactions"),Gc=require("big.js");var Ar=class extends Ye{constructor(i,r,o){super();this.nodeRpcUrl=i;this.params=r;this.api=o;let s=(0,wc.createNetwork)({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new An.ClarigenClient(s,this.params.stxHeroApiKey)}chainType="STX";P=48;A="20";client;async getUserBalanceInfo(i,r){let o=(0,An.contractFactory)(lt.pool,r.poolAddress),s=await this.client.ro(o.getLpBalance({user:i})),d=await this.client.ro(o.getUserRewardDebt({user:i}));return new pe({lpAmount:s.toString(),rewardDebt:d.toString()})}async getPoolInfoFromChain(i){let r=(0,An.contractFactory)(lt.pool,i.poolAddress),[o,s,d,c,g]=await Promise.all([this.client.ro(r.getD()),this.client.ro(r.getTokenBalance()),this.client.ro(r.getVusdBalance()),this.client.ro(r.getLpTotalSupply()),this.client.ro(r.getAccRewardPerShareP())]),A=o.toString(),l=s.toString(),u=d.toString(),b=c.toString(),C=g.toString();if(A&&l&&u&&b&&C){let Y=me({tokenBalance:l,vUsdBalance:u});return{aValue:this.A,dValue:A,tokenBalance:l,vUsdBalance:u,totalLpAmount:b,accRewardPerShareP:C,p:this.P,imbalance:Y}}throw new h("Unable to pool info from chain")}async buildRawTransactionDeposit(i){let r=(0,An.contractFactory)(lt.pool,i.token.poolAddress),{contractAddress:o,contractName:s,functionName:d,functionArgs:c}=r.deposit({amount:BigInt(i.amount),ftRef:i.token.tokenAddress}),g=(0,Ze.makeRandomPrivKey)(),A=(0,Ze.privateKeyToPublic)(g),l=Lt(i.amount,"lte",i.accountAddress,i.token.tokenAddress,Pt(i.token)),u=Lt(0,"gte",i.token.poolAddress,i.token.tokenAddress,Pt(i.token)),b={contractAddress:o,contractName:s,functionName:d,functionArgs:c,publicKey:A,validateWithAbi:!0,network:this.client.network,postConditions:[l,u],postConditionMode:Ze.PostConditionMode.Deny};return(await(0,Ze.makeUnsignedContractCall)(b)).serialize()}async buildRawTransactionWithdraw(i){let r=(0,An.contractFactory)(lt.pool,i.token.poolAddress),{contractAddress:o,contractName:s,functionName:d,functionArgs:c}=r.withdraw({amountLp:BigInt(i.amount),ftRef:i.token.tokenAddress}),g=(0,Ze.makeRandomPrivKey)(),A=(0,Ze.privateKeyToPublic)(g),l=Lt(Xe(i.amount,i.token.decimals).toFixed(0,Gc.Big.roundDown),"gte",i.token.poolAddress,i.token.tokenAddress,Pt(i.token)),u={contractAddress:o,contractName:s,functionName:d,functionArgs:c,publicKey:A,validateWithAbi:!0,network:this.client.network,postConditions:[l],postConditionMode:Ze.PostConditionMode.Deny};return(await(0,Ze.makeUnsignedContractCall)(u)).serialize()}async buildRawTransactionClaimRewards(i){let r=(0,An.contractFactory)(lt.pool,i.token.poolAddress),{contractAddress:o,contractName:s,functionName:d,functionArgs:c}=r.claimRewards({ftRef:i.token.tokenAddress}),g=(0,Ze.makeRandomPrivKey)(),A=(0,Ze.privateKeyToPublic)(g),l=Lt(0,"gte",i.token.poolAddress,i.token.tokenAddress,Pt(i.token)),u={contractAddress:o,contractName:s,functionName:d,functionArgs:c,publicKey:A,validateWithAbi:!0,network:this.client.network,postConditions:[l],postConditionMode:Ze.PostConditionMode.Deny};return(await(0,Ze.makeUnsignedContractCall)(u)).serialize()}};var ei=ce(cn());fe();fe();Re();function lr(a){return a=S(a),a.startsWith(`${gn}::balance::Balance<`)}var Se=class a{__StructClass=!0;static get $typeName(){return`${gn}::balance::Balance`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;value;constructor(n,i){this.$fullTypeName=$(a.$typeName,...n),this.$typeArgs=n,this.value=i.value}static reified(n){return{typeName:a.$typeName,fullTypeName:$(a.$typeName,L(n)),typeArgs:[L(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,r)=>a.fetch(i,n,r),new:i=>new a([L(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return le(a.reified(n))}static get p(){return a.phantom}static get bcs(){return v.struct("Balance",{value:v.u64()})}static fromFields(n,i){return a.reified(n).new({value:K("u64",i.value)})}static fromFieldsWithTypes(n,i){if(!lr(i.type))throw new Error("not a Balance type");return Zt(i,[n]),a.reified(n).new({value:J("u64",i.fields.value)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{value:this.value.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({value:z("u64",i.value)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return ht($(a.$typeName,L(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!lr(i.type))throw new Error(`object at ${i.fields.id} is not a Balance object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!lr(i.bcs.type))throw new Error("object at is not a Balance object");let r=Ge(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let o=S(r[0]),s=S(L(n));if(o!==S(L(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${o}'`);return a.fromBcs(n,(0,E.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,r){let o=await n.getObject({id:r,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Balance object at id ${r}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!lr(o.data.bcs.type))throw new Error(`object at id ${r} is not a Balance object`);return a.fromSuiObjectData(i,o.data)}};var ms=ce(cn());fe();var us=ce(cn());Re();function ur(a){return a=S(a),a.startsWith(`${us.PKG_V1}::pool_rewards::PoolRewards<`)}var Tn=class a{__StructClass=!0;static get $typeName(){return`${us.PKG_V1}::pool_rewards::PoolRewards`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;accRewardPerShareP;adminFeeShareBp;adminFee;rewards;lpSupply;constructor(n,i){this.$fullTypeName=$(a.$typeName,...n),this.$typeArgs=n,this.accRewardPerShareP=i.accRewardPerShareP,this.adminFeeShareBp=i.adminFeeShareBp,this.adminFee=i.adminFee,this.rewards=i.rewards,this.lpSupply=i.lpSupply}static reified(n){return{typeName:a.$typeName,fullTypeName:$(a.$typeName,L(n)),typeArgs:[L(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,r)=>a.fetch(i,n,r),new:i=>new a([L(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return le(a.reified(n))}static get p(){return a.phantom}static get bcs(){return v.struct("PoolRewards",{acc_reward_per_share_p:v.u128(),admin_fee_share_bp:v.u64(),admin_fee:Se.bcs,rewards:Se.bcs,lp_supply:v.u64()})}static fromFields(n,i){return a.reified(n).new({accRewardPerShareP:K("u128",i.acc_reward_per_share_p),adminFeeShareBp:K("u64",i.admin_fee_share_bp),adminFee:K(Se.reified(n),i.admin_fee),rewards:K(Se.reified(n),i.rewards),lpSupply:K("u64",i.lp_supply)})}static fromFieldsWithTypes(n,i){if(!ur(i.type))throw new Error("not a PoolRewards type");return Zt(i,[n]),a.reified(n).new({accRewardPerShareP:J("u128",i.fields.acc_reward_per_share_p),adminFeeShareBp:J("u64",i.fields.admin_fee_share_bp),adminFee:J(Se.reified(n),i.fields.admin_fee),rewards:J(Se.reified(n),i.fields.rewards),lpSupply:J("u64",i.fields.lp_supply)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{accRewardPerShareP:this.accRewardPerShareP.toString(),adminFeeShareBp:this.adminFeeShareBp.toString(),adminFee:this.adminFee.toJSONField(),rewards:this.rewards.toJSONField(),lpSupply:this.lpSupply.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({accRewardPerShareP:z("u128",i.accRewardPerShareP),adminFeeShareBp:z("u64",i.adminFeeShareBp),adminFee:z(Se.reified(n),i.adminFee),rewards:z(Se.reified(n),i.rewards),lpSupply:z("u64",i.lpSupply)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return ht($(a.$typeName,L(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!ur(i.type))throw new Error(`object at ${i.fields.id} is not a PoolRewards object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!ur(i.bcs.type))throw new Error("object at is not a PoolRewards object");let r=Ge(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let o=S(r[0]),s=S(L(n));if(o!==S(L(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${o}'`);return a.fromBcs(n,(0,E.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,r){let o=await n.getObject({id:r,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolRewards object at id ${r}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!ur(o.data.bcs.type))throw new Error(`object at id ${r} is not a PoolRewards object`);return a.fromSuiObjectData(i,o.data)}};fe();var ps=ce(cn());Re();function pr(a){return a=S(a),a.startsWith(`${ps.PKG_V1}::pool_state::PoolState<`)}var Fn=class a{__StructClass=!0;static get $typeName(){return`${ps.PKG_V1}::pool_state::PoolState`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;tokenBalance;vusdBalance;d;a;balanceRatioMinBp;constructor(n,i){this.$fullTypeName=$(a.$typeName,...n),this.$typeArgs=n,this.tokenBalance=i.tokenBalance,this.vusdBalance=i.vusdBalance,this.d=i.d,this.a=i.a,this.balanceRatioMinBp=i.balanceRatioMinBp}static reified(n){return{typeName:a.$typeName,fullTypeName:$(a.$typeName,L(n)),typeArgs:[L(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,r)=>a.fetch(i,n,r),new:i=>new a([L(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return le(a.reified(n))}static get p(){return a.phantom}static get bcs(){return v.struct("PoolState",{token_balance:v.u64(),vusd_balance:v.u64(),d:v.u64(),a:v.u64(),balance_ratio_min_bp:v.u64()})}static fromFields(n,i){return a.reified(n).new({tokenBalance:K("u64",i.token_balance),vusdBalance:K("u64",i.vusd_balance),d:K("u64",i.d),a:K("u64",i.a),balanceRatioMinBp:K("u64",i.balance_ratio_min_bp)})}static fromFieldsWithTypes(n,i){if(!pr(i.type))throw new Error("not a PoolState type");return Zt(i,[n]),a.reified(n).new({tokenBalance:J("u64",i.fields.token_balance),vusdBalance:J("u64",i.fields.vusd_balance),d:J("u64",i.fields.d),a:J("u64",i.fields.a),balanceRatioMinBp:J("u64",i.fields.balance_ratio_min_bp)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{tokenBalance:this.tokenBalance.toString(),vusdBalance:this.vusdBalance.toString(),d:this.d.toString(),a:this.a.toString(),balanceRatioMinBp:this.balanceRatioMinBp.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({tokenBalance:z("u64",i.tokenBalance),vusdBalance:z("u64",i.vusdBalance),d:z("u64",i.d),a:z("u64",i.a),balanceRatioMinBp:z("u64",i.balanceRatioMinBp)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return ht($(a.$typeName,L(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!pr(i.type))throw new Error(`object at ${i.fields.id} is not a PoolState object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!pr(i.bcs.type))throw new Error("object at is not a PoolState object");let r=Ge(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let o=S(r[0]),s=S(L(n));if(o!==S(L(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${o}'`);return a.fromBcs(n,(0,E.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,r){let o=await n.getObject({id:r,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching PoolState object at id ${r}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!pr(o.data.bcs.type))throw new Error(`object at id ${r} is not a PoolState object`);return a.fromSuiObjectData(i,o.data)}};Re();function mr(a){return a=S(a),a.startsWith(`${ms.PKG_V1}::pool::Pool<`)}var br=class a{__StructClass=!0;static get $typeName(){return`${ms.PKG_V1}::pool::Pool`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;id;state;rewards;feeShareBp;canDeposit;canWithdraw;decimals;balance;constructor(n,i){this.$fullTypeName=$(a.$typeName,...n),this.$typeArgs=n,this.id=i.id,this.state=i.state,this.rewards=i.rewards,this.feeShareBp=i.feeShareBp,this.canDeposit=i.canDeposit,this.canWithdraw=i.canWithdraw,this.decimals=i.decimals,this.balance=i.balance}static reified(n){return{typeName:a.$typeName,fullTypeName:$(a.$typeName,L(n)),typeArgs:[L(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,r)=>a.fetch(i,n,r),new:i=>new a([L(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return le(a.reified(n))}static get p(){return a.phantom}static get bcs(){return v.struct("Pool",{id:at.bcs,state:Fn.bcs,rewards:Tn.bcs,fee_share_bp:v.u64(),can_deposit:v.bool(),can_withdraw:v.bool(),decimals:v.u8(),balance:Se.bcs})}static fromFields(n,i){return a.reified(n).new({id:K(at.reified(),i.id),state:K(Fn.reified(n),i.state),rewards:K(Tn.reified(n),i.rewards),feeShareBp:K("u64",i.fee_share_bp),canDeposit:K("bool",i.can_deposit),canWithdraw:K("bool",i.can_withdraw),decimals:K("u8",i.decimals),balance:K(Se.reified(n),i.balance)})}static fromFieldsWithTypes(n,i){if(!mr(i.type))throw new Error("not a Pool type");return Zt(i,[n]),a.reified(n).new({id:J(at.reified(),i.fields.id),state:J(Fn.reified(n),i.fields.state),rewards:J(Tn.reified(n),i.fields.rewards),feeShareBp:J("u64",i.fields.fee_share_bp),canDeposit:J("bool",i.fields.can_deposit),canWithdraw:J("bool",i.fields.can_withdraw),decimals:J("u8",i.fields.decimals),balance:J(Se.reified(n),i.fields.balance)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{id:this.id,state:this.state.toJSONField(),rewards:this.rewards.toJSONField(),feeShareBp:this.feeShareBp.toString(),canDeposit:this.canDeposit,canWithdraw:this.canWithdraw,decimals:this.decimals,balance:this.balance.toJSONField()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({id:z(at.reified(),i.id),state:z(Fn.reified(n),i.state),rewards:z(Tn.reified(n),i.rewards),feeShareBp:z("u64",i.feeShareBp),canDeposit:z("bool",i.canDeposit),canWithdraw:z("bool",i.canWithdraw),decimals:z("u8",i.decimals),balance:z(Se.reified(n),i.balance)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return ht($(a.$typeName,L(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!mr(i.type))throw new Error(`object at ${i.fields.id} is not a Pool object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!mr(i.bcs.type))throw new Error("object at is not a Pool object");let r=Ge(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let o=S(r[0]),s=S(L(n));if(o!==S(L(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${o}'`);return a.fromBcs(n,(0,E.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,r){let o=await n.getObject({id:r,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching Pool object at id ${r}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!mr(o.data.bcs.type))throw new Error(`object at id ${r} is not a Pool object`);return a.fromSuiObjectData(i,o.data)}};fe();var bs=ce(cn());Re();function yr(a){return a=S(a),a.startsWith(`${bs.PKG_V1}::user_deposit::UserDeposit<`)}var Cr=class a{__StructClass=!0;static get $typeName(){return`${bs.PKG_V1}::user_deposit::UserDeposit`}static $numTypeParams=1;static $isPhantom=[!0];$typeName=a.$typeName;$fullTypeName;$typeArgs;$isPhantom=a.$isPhantom;id;lpAmount;rewardDebt;constructor(n,i){this.$fullTypeName=$(a.$typeName,...n),this.$typeArgs=n,this.id=i.id,this.lpAmount=i.lpAmount,this.rewardDebt=i.rewardDebt}static reified(n){return{typeName:a.$typeName,fullTypeName:$(a.$typeName,L(n)),typeArgs:[L(n)],isPhantom:a.$isPhantom,reifiedTypeArgs:[n],fromFields:i=>a.fromFields(n,i),fromFieldsWithTypes:i=>a.fromFieldsWithTypes(n,i),fromBcs:i=>a.fromBcs(n,i),bcs:a.bcs,fromJSONField:i=>a.fromJSONField(n,i),fromJSON:i=>a.fromJSON(n,i),fromSuiParsedData:i=>a.fromSuiParsedData(n,i),fromSuiObjectData:i=>a.fromSuiObjectData(n,i),fetch:async(i,r)=>a.fetch(i,n,r),new:i=>new a([L(n)],i),kind:"StructClassReified"}}static get r(){return a.reified}static phantom(n){return le(a.reified(n))}static get p(){return a.phantom}static get bcs(){return v.struct("UserDeposit",{id:at.bcs,lp_amount:v.u64(),reward_debt:v.u64()})}static fromFields(n,i){return a.reified(n).new({id:K(at.reified(),i.id),lpAmount:K("u64",i.lp_amount),rewardDebt:K("u64",i.reward_debt)})}static fromFieldsWithTypes(n,i){if(!yr(i.type))throw new Error("not a UserDeposit type");return Zt(i,[n]),a.reified(n).new({id:J(at.reified(),i.fields.id),lpAmount:J("u64",i.fields.lp_amount),rewardDebt:J("u64",i.fields.reward_debt)})}static fromBcs(n,i){return a.fromFields(n,a.bcs.parse(i))}toJSONField(){return{id:this.id,lpAmount:this.lpAmount.toString(),rewardDebt:this.rewardDebt.toString()}}toJSON(){return{$typeName:this.$typeName,$typeArgs:this.$typeArgs,...this.toJSONField()}}static fromJSONField(n,i){return a.reified(n).new({id:z(at.reified(),i.id),lpAmount:z("u64",i.lpAmount),rewardDebt:z("u64",i.rewardDebt)})}static fromJSON(n,i){if(i.$typeName!==a.$typeName)throw new Error("not a WithTwoGenerics json object");return ht($(a.$typeName,L(n)),i.$typeArgs,[n]),a.fromJSONField(n,i)}static fromSuiParsedData(n,i){if(i.dataType!=="moveObject")throw new Error("not an object");if(!yr(i.type))throw new Error(`object at ${i.fields.id} is not a UserDeposit object`);return a.fromFieldsWithTypes(n,i)}static fromSuiObjectData(n,i){if(i.bcs){if(i.bcs.dataType!=="moveObject"||!yr(i.bcs.type))throw new Error("object at is not a UserDeposit object");let r=Ge(i.bcs.type).typeArgs;if(r.length!==1)throw new Error(`type argument mismatch: expected 1 type argument but got '${r.length}'`);let o=S(r[0]),s=S(L(n));if(o!==S(L(n)))throw new Error(`type argument mismatch: expected '${s}' but got '${o}'`);return a.fromBcs(n,(0,E.fromB64)(i.bcs.bcsBytes))}if(i.content)return a.fromSuiParsedData(n,i.content);throw new Error("Both `bcs` and `content` fields are missing from the data. Include `showBcs` or `showContent` in the request.")}static async fetch(n,i,r){let o=await n.getObject({id:r,options:{showBcs:!0}});if(o.error)throw new Error(`error fetching UserDeposit object at id ${r}: ${o.error.code}`);if(o.data?.bcs?.dataType!=="moveObject"||!yr(o.data.bcs.type))throw new Error(`object at id ${r} is not a UserDeposit object`);return a.fromSuiObjectData(i,o.data)}};function Sc(a,n,i){if(n.length===0||!n[0])return[];let r=n[0],o=a.reduce((c,g)=>c+BigInt(g),BigInt(0)),s=BigInt(r.balance),d=[];for(let c of n.slice(1)){if(s>o)return Zc(i,r,d,a);s+=BigInt(c.balance),d.push(c)}return s>=o?Zc(i,r,d,a):[]}function Zc(a,n,i,r){let o=r.map(s=>a.pure.u64(s));return i.length>0&&a.mergeCoins(n.coinObjectId,i.map(s=>s.coinObjectId)),a.splitCoins(n.coinObjectId,o)}var Il="0x0000000000000000000000000000000000000000000000000000000000000000";async function Vc(a,n,i){let r=await a.devInspectTransactionBlock({sender:Il,transactionBlock:n});if(r.effects.status.status!=="success")throw new Error(`inspectionResult failed. ${JSON.stringify(r,null,2)}`);let o=r.results?.pop()?.returnValues?.pop();if(!o)throw new Error(`Something with inspectionResult went wrong. ${JSON.stringify(r,null,2)}`);let[s,d]=o;return typeof i=="object"?i.fromBcs(Uint8Array.from(s)).toJSONField():Ki(i).parse(Uint8Array.from(s))}var Ir=class extends Ye{constructor(i,r){super();this.suiRpcUrl=i;this.api=r;this.client=new Ut({url:i})}chainType="SUI";client;async getUserBalanceInfo(i,r){if(!r.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=r.suiAddresses;if(!o)throw new h("SUI token must contain 'suiAddresses'");(0,ei.setAddress)(o.bridgeAddress,o.bridgeAddressOrigin);let d=(await this.fetchDeposits(i,r.originTokenAddress)).reduce((c,g)=>{if(g.data)return c.lpAmount+=BigInt(g.data.content.fields.lp_amount),c.rewardDebt+=BigInt(g.data.content.fields.reward_debt),c;throw new h("Deposits fetch failed")},{lpAmount:BigInt(0),rewardDebt:BigInt(0)});return new pe({lpAmount:d.lpAmount.toString(),rewardDebt:d.rewardDebt.toString()})}async fetchDeposits(i,r){return await St(o=>this.client.getOwnedObjects({owner:i,filter:{StructType:Cr.phantom(le(r)).phantomType},options:{showContent:!0},cursor:o}))}async getPoolInfoFromChain(i){let r=i.suiAddresses;if(!r)throw new h("SUI token must contain 'suiAddresses'");if((0,ei.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin),!i.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=48,s=new Gt;gc(s,i.originTokenAddress,r.bridgeObjectAddress);let d=await Vc(this.client,s,br.reified(le(i.originTokenAddress))),c=d.state.tokenBalance,g=d.state.vusdBalance,A=me({tokenBalance:c,vUsdBalance:g});return{dValue:d.state.d,aValue:d.state.a,totalLpAmount:d.rewards.lpSupply,vUsdBalance:g,tokenBalance:c,accRewardPerShareP:d.rewards.accRewardPerShareP,p:o,imbalance:A}}async buildRawTransactionDeposit(i){let r=i.token.suiAddresses;if(!r)throw new h("SUI token must contain 'suiAddresses'");if((0,ei.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin),!i.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=await St(u=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:u}));if(o.length===0||!o[0])throw new dt("No coins to deposit");let s=o[0],d=new Gt;d.setSender(i.accountAddress);let{depositObj:c,isNewDeposit:g}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,d),[A]=Sc([i.amount],o,d);if(!A)throw new dt("No coins to deposit");if(!i.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let l=sc(d,i.token.originTokenAddress,{bridge:r.bridgeObjectAddress,userDeposit:c,coin:A});return d.mergeCoins(s.coinObjectId,[l]),g&&d.transferObjects([c],i.accountAddress),await d.toJSON({client:this.client})}async getDepositObject(i,r,o){let s=await this.fetchDeposits(i,r);if(s.length===0||!s[0]){let d=le(r).phantomType;return{depositObj:Ac(o,d),isNewDeposit:!0}}else{if(s[0].data?.objectId)return{depositObj:s[0].data.objectId,isNewDeposit:!1};throw new h("Something went wrong while deposit")}}async buildRawTransactionWithdraw(i){let r=i.token.suiAddresses;if(!r)throw new h("SUI token must contain 'suiAddresses'");if((0,ei.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin),!i.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=le(i.token.originTokenAddress).phantomType,s=new Gt;s.setSender(i.accountAddress);let{depositObj:d,isNewDeposit:c}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,s);if(c)throw new dt("No deposit found");let g=dc(s,o,{bridge:r.bridgeObjectAddress,userDeposit:d,amountLp:BigInt(i.amount)}),A=await St(l=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:l}));if(!g[0]||!g[1])throw new h("No rewards found");return A[0]?s.mergeCoins(A[0].coinObjectId,[g[0],g[1]]):(s.mergeCoins(g[0],[g[1]]),s.transferObjects([g[0]],i.accountAddress)),await s.toJSON({client:this.client})}async buildRawTransactionClaimRewards(i){let r=i.token.suiAddresses;if(!r)throw new h("SUI token must contain 'suiAddresses'");if((0,ei.setAddress)(r.bridgeAddress,r.bridgeAddressOrigin),!i.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");let o=le(i.token.originTokenAddress).phantomType,s=new Gt;s.setSender(i.accountAddress);let{depositObj:d,isNewDeposit:c}=await this.getDepositObject(i.accountAddress,i.token.originTokenAddress,s);if(c)throw new dt("No deposit found");let g=cc(s,o,{bridge:r.bridgeObjectAddress,userDeposit:d}),A=await St(l=>this.client.getCoins({owner:i.accountAddress,coinType:i.token.originTokenAddress,cursor:l}));return A[0]?s.mergeCoins(A[0].coinObjectId,[g]):s.transferObjects([g],i.accountAddress),await s.toJSON({client:this.client})}};var qi=require("web3"),Xc=require("web3-eth-abi");var ea=class extends Ye{constructor(i,r,o){super();this.tronWeb=i;this.api=r;this.tronJsonRpc=o}chainType="TRX";P=52;async getUserBalanceInfo(i,r){let o;if(this.tronJsonRpc)try{o=await this.getUserBalanceInfoByBatch(this.tronJsonRpc,i,r)}catch{o=await this.getUserBalanceInfoPerProperty(i,r)}else o=await this.getUserBalanceInfoPerProperty(i,r);return o}async getUserBalanceInfoByBatch(i,r,o){let s=Yi(o.poolAddress),d=Yi(r),c=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("userRewardDebt",d)},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:s,data:this.getFunctionAbi("balanceOf",d)},"latest"]}],A=await(await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)})).json();if(Array.isArray(A)&&A.length===2){let l=u=>{let b=A.find(C=>C.id===u);if(!b||!b.result)throw new Error(`Missing or invalid result for id ${u}`);return qi.Web3.utils.toBigInt(b.result).toString()};return new pe({lpAmount:qi.Web3.utils.toBigInt(l(2)).toString(),rewardDebt:qi.Web3.utils.toBigInt(l(1)).toString()})}throw new Error("Batched HTTP call failed")}async getUserBalanceInfoPerProperty(i,r){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(i);let o=this.getContract(r.poolAddress),s=(await o.methods.userRewardDebt(i).call()).toString(),d=(await o.methods.balanceOf(i).call()).toString();return new pe({lpAmount:d,rewardDebt:s})}async getPoolInfoFromChain(i){let r;if(this.tronJsonRpc)try{r=await this.getPoolInfoByBatch(this.tronJsonRpc,i)}catch{r=await this.getPoolInfoPerProperty(i)}else r=await this.getPoolInfoPerProperty(i);return r}async getPoolInfoByBatch(i,r){let o=Yi(r.poolAddress),s=[{jsonrpc:"2.0",id:1,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("a")},"latest"]},{jsonrpc:"2.0",id:2,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("d")},"latest"]},{jsonrpc:"2.0",id:3,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("tokenBalance")},"latest"]},{jsonrpc:"2.0",id:4,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("vUsdBalance")},"latest"]},{jsonrpc:"2.0",id:5,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("totalSupply")},"latest"]},{jsonrpc:"2.0",id:6,method:"eth_call",params:[{to:o,data:this.getFunctionAbi("accRewardPerShareP")},"latest"]}],c=await(await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s)})).json();if(Array.isArray(c)&&c.length===6){let g=b=>{let C=c.find(Y=>Y.id===b);if(!C||!C.result)throw new Error(`Missing or invalid result for id ${b}`);return qi.Web3.utils.toBigInt(C.result).toString()},A=g(3),l=g(4),u=me({tokenBalance:A,vUsdBalance:l});return{aValue:g(1),dValue:g(2),tokenBalance:A,vUsdBalance:l,totalLpAmount:g(5),accRewardPerShareP:g(6),p:this.P,imbalance:u}}throw new Error("Batched pool info call failed")}async getPoolInfoPerProperty(i){this.tronWeb.defaultAddress.base58||this.tronWeb.setAddress(i.poolAddress);let r=this.getContract(i.poolAddress),[o,s,d,c,g,A]=await Promise.all([r.methods.a().call(),r.methods.d().call(),r.methods.tokenBalance().call(),r.methods.vUsdBalance().call(),r.methods.totalSupply().call(),r.methods.accRewardPerShareP().call()]),l=d.toString(),u=c.toString(),b=me({tokenBalance:l,vUsdBalance:u});return{aValue:o.toString(),dValue:s.toString(),tokenBalance:l,vUsdBalance:u,totalLpAmount:g.toString(),accRewardPerShareP:A.toString(),p:this.P,imbalance:b}}buildRawTransactionDeposit(i){let{amount:r,accountAddress:o}=i,s=[{type:"uint256",value:r}];return this.buildRawTransaction(i.token.poolAddress,"deposit(uint256)",s,"0",o)}buildRawTransactionWithdraw(i){let{amount:r,accountAddress:o}=i,s=[{type:"uint256",value:r}];return this.buildRawTransaction(i.token.poolAddress,"withdraw(uint256)",s,"0",o)}buildRawTransactionClaimRewards(i){let{accountAddress:r}=i,o=[];return this.buildRawTransaction(i.token.poolAddress,"claimRewards()",o,"0",r)}async buildRawTransaction(i,r,o,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(i,r,{callValue:+s},o,d);if(!c?.result?.result)throw new h("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}getContract(i){return this.tronWeb.contract(_i.abi,i)}getFunctionAbi(i,...r){let o=_i.abi.find(s=>s.type==="function"&&"name"in s&&s.name===i);if(!o)throw new Error(`${i} method not found in Pool ABI`);return(0,Xc.encodeFunctionCall)(o,r)}};var hr=class{constructor(n,i,r,o){this.api=n;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=o;this.rawTxBuilder=new sr(n,i,this.params,o);let s=r.cachePoolInfoChainSec>0?r.cachePoolInfoChainSec*1e3:20*1e3;this.cache=new Qt({defaultTtl:s})}rawTxBuilder;cache;async getAllowance(n,i){if(i){let r=n,o=i;return await this.tokenService.getAllowance({...o,spender:o.token.poolAddress},r)}else{let r=n;return await this.tokenService.getAllowance({...r,spender:r.token.poolAddress})}}async checkAllowance(n,i){if(i){let r=n,o=i;return this.tokenService.checkAllowance({...o,spender:o.token.poolAddress},r)}else{let r=n;return this.tokenService.checkAllowance({...r,spender:r.token.poolAddress})}}async approve(n,i){return this.tokenService.approve(n,{...i,spender:i.token.poolAddress})}async getAmountToBeDeposited(n,i,r){Q(n),O("amount",n,i.decimals);let o=await this.getPoolInfoFromChain(i,r),{vUsdBalance:s,tokenBalance:d,aValue:c,dValue:g}=o,A=Bc(n,c,g,d,s);return M(A,3).toFixed()}async getAmountToBeWithdrawn(n,i,r,o){Q(n),O("amount",n,r.decimals);let s=await this.getPoolInfoFromChain(r,o),d=Wc(n),c=Xe(d,r.decimals),A=(await this.getUserBalanceInfo(i,r,o)).earned(s)||"0",l=(0,Mc.Big)(c).plus(A).toFixed();return M(l,r.decimals).toFixed()}async getUserBalanceInfo(n,i,r){return _n(i.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,r).getUserBalanceInfo(n,i)}async getPoolInfoFromChain(n,i){let r={chainSymbol:n.chainSymbol,poolAddress:n.poolAddress},o=this.cache.get(r);if(o)return o;{let s=await _n(n.chainSymbol,this.api,this.nodeRpcUrlsConfig,this.params,i).getPoolInfoFromChain(n);return this.cache.put(r,s),this.api.cachePut({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress},s),s}}};function _n(a,n,i,r,o){switch(k.getChainProperty(a).chainType){case"EVM":{if(o)return new $i(o,n);{let s=i.getNodeRpcUrl(a),d=new ti.Web3(s);return d.defaultReturnFormat={number:ti.FMT_NUMBER.STR,bytes:ti.FMT_BYTES.HEX},new $i(d,n)}}case"TRX":{let s=i.getNodeRpcUrl(a),d=r.tronJsonRpc;if(o)return new ea(o,n,d);{let c=new Pc.TronWeb({fullHost:s});return new ea(c,n,d)}}case"SOLANA":{let s=i.getNodeRpcUrl(a);return new dr(s,n)}case"SRB":return new gr(i,r,n);case"SUI":return new Ir(i.getNodeRpcUrl(a),n);case"ALG":if(o){let s=o,d=ys.AlgorandClient.fromClients({algod:s});return new Ei(d,n)}else{let s=i.getNodeRpcUrl(a),d=ys.AlgorandClient.fromConfig({algodConfig:{server:s}});return new Ei(d,n)}case"STX":{let s=i.getNodeRpcUrl(a);return new Ar(s,r,n)}}}var jc=require("tronweb"),ii=require("web3");var hl={abi:[{inputs:[{internalType:"string",name:"tokenName_",type:"string"},{internalType:"string",name:"tokenSymbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"lpAmount",type:"uint256"}],name:"Deposited",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"address",name:"token",type:"address"}],name:"DepositedRewards",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256[4]",name:"values",type:"uint256[4]"}],name:"MultiTransfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"user",type:"address"},{indexed:!1,internalType:"address",name:"token",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdrawn",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"NUM_TOKENS",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"pure",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"},{internalType:"uint256",name:"minVirtualAmount",type:"uint256"}],name:"deposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"depositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"getEstimatedAmountOnDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"getRewardsAmount",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"user",type:"address"},{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"getWithdrawProportionAmount",outputs:[{internalType:"uint256[4]",name:"",type:"uint256[4]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"pools",outputs:[{internalType:"contract IPool",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"},{internalType:"contract IPool",name:"pool",type:"address"}],name:"setPool",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subBalanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subDepositRewards",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"index",type:"uint256"}],name:"subTotalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subTransferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"},{internalType:"uint256",name:"index",type:"uint256"}],name:"subWithdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"tokens",outputs:[{internalType:"contract IERC20",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"virtualAmount",type:"uint256"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{stateMutability:"payable",type:"receive"}]},vr=hl;var Nn=class{};var ta=class extends Nn{constructor(i,r){super();this.web3=i;this.api=r}chainType="EVM";async balanceOf(i){let r=(await this.getYieldContract(i.token.yieldAddress).methods.balanceOf(i.owner).call()).toString();return M(r,3).toFixed()}async getEstimatedAmountOnDeposit(i){let r=X(i.amount,i.token.decimals).toFixed(),o=(await this.getYieldContract(i.token.yieldAddress).methods.getEstimatedAmountOnDeposit(r,i.token.yieldId).call()).toString();return M(o,3).toFixed()}async getWithdrawProportionAmount(i){let r=X(i.amount,3).toFixed();return await this.getYieldContract(i.cydToken.yieldAddress).methods.getWithdrawProportionAmount(i.owner,r).call()}async buildRawTransactionDeposit(i){return Promise.resolve({...this.buildTxParams({owner:i.owner,yieldAddress:i.token.yieldAddress}),data:this.getYieldContract(i.token.yieldAddress).methods.deposit(i.amount,i.token.yieldId,i.minVirtualAmount).encodeABI()})}async buildRawTransactionWithdraw(i){return Promise.resolve({...this.buildTxParams({owner:i.owner,yieldAddress:i.token.yieldAddress}),data:this.getYieldContract(i.token.yieldAddress).methods.withdraw(i.amount).encodeABI()})}buildTxParams(i){return{from:i.owner,to:i.yieldAddress,value:"0"}}getYieldContract(i){return new this.web3.eth.Contract(vr.abi,i)}};var Rr=class{constructor(n,i,r,o){this.api=n;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=o}async approve(n,i){return this.tokenService.buildRawTransactionApprove({...n,spender:n.token.yieldAddress},i)}async deposit(n,i){return Q(n.amount),O("amount",n.amount,n.token.decimals),Q(n.minVirtualAmount),O("minVirtualAmount",n.minVirtualAmount,3),n.amount=X(n.amount,n.token.decimals).toFixed(),n.minVirtualAmount=X(n.minVirtualAmount,3).toFixed(),ni(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,i).buildRawTransactionDeposit(n)}async withdraw(n,i){return Q(n.amount),O("amount",n.amount,3),n.amount=X(n.amount,3).toFixed(),ni(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,i).buildRawTransactionWithdraw(n)}};var na=class extends Nn{constructor(i,r){super();this.tronWeb=i;this.api=r}chainType="TRX";async balanceOf(i){let r=(await(await this.getContract(i.token.yieldAddress)).methods.balanceOf(i.owner).call()).toString();return M(r,3).toFixed()}async getEstimatedAmountOnDeposit(i){let r=X(i.amount,i.token.decimals).toFixed(),o=(await(await this.getContract(i.token.yieldAddress)).methods.getEstimatedAmountOnDeposit(r,i.token.yieldId).call()).toString();return M(o,3).toFixed()}async getWithdrawProportionAmount(i){let r=X(i.amount,3).toFixed();return(await(await this.getContract(i.cydToken.yieldAddress)).methods.getWithdrawProportionAmount(i.owner,r).call()).toString().split(",")}async buildRawTransactionDeposit(i){let{amount:r,owner:o,token:s,minVirtualAmount:d}=i,c=[{type:"uint256",value:r},{type:"uint256",value:s.yieldId},{type:"uint256",value:d}];return this.buildRawTransaction(i.token.yieldAddress,"deposit(uint256,uint256,uint256)",c,"0",o)}async buildRawTransactionWithdraw(i){let{amount:r,owner:o}=i,s=[{type:"uint256",value:r}];return this.buildRawTransaction(i.token.yieldAddress,"withdraw(uint256)",s,"0",o)}async buildRawTransaction(i,r,o,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(i,r,{callValue:+s},o,d);if(!c?.result?.result)throw new h("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}getContract(i){return this.tronWeb.contract(vr.abi,i)}};function Lc(a){if(!ia(a))throw new yi("Token does not support Yield")}function ia(a){return!!a.yieldAddress&&a.yieldId!==void 0}var fr=class{constructor(n,i,r,o){this.api=n;this.nodeRpcUrlsConfig=i;this.params=r;this.tokenService=o;this.rawTxBuilder=new Rr(n,i,r,o)}rawTxBuilder;async getCYDTokens(){let n=[],i=await this.api.getChainDetailsMap("pool");return Object.values(i).forEach(r=>{if(r.yieldAddress){let o=r.tokens.find(d=>d.tokenAddress===r.yieldAddress),s=r.tokens.filter(ia);if(s.length>0){let d=o??{allbridgeChainId:r.allbridgeChainId,apr:"",apr30d:"",apr7d:"",bridgeId:r.bridgeId,paddingUtilId:r.paddingUtilId,bridgeAddress:r.bridgeAddress,chainId:r.chainId,chainName:r.name,chainSymbol:r.chainSymbol,chainType:r.chainType,confirmations:r.confirmations,decimals:3,feeShare:"",lpRate:"",name:"Core Yield",poolAddress:"",symbol:"CYD",tokenAddress:r.yieldAddress,transferTime:{},txCostAmount:{maxAmount:"0",swap:"0",transfer:"0"},yieldAddress:r.yieldAddress};n.push({...d,yieldAddress:r.yieldAddress,tokens:s})}}}),n}async getAllowance(n,i){return await this.tokenService.getAllowance({...n,spender:n.token.yieldAddress},i)}async checkAllowance(n,i){return this.tokenService.checkAllowance({...n,spender:n.token.yieldAddress},i)}async balanceOf(n,i){return ni(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,i).balanceOf(n)}async getEstimatedAmountOnDeposit(n,i){return Q(n.amount),O("amount",n.amount,n.token.decimals),ni(n.token.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.token.yieldAddress,i).getEstimatedAmountOnDeposit(n)}async getWithdrawAmounts(n,i){Q(n.amount),O("amount",n.amount,3);let r=await ni(n.cydToken.chainSymbol,this.api,this.nodeRpcUrlsConfig,n.owner,i).getWithdrawProportionAmount(n);return n.cydToken.tokens.filter(o=>r[o.yieldId]!==void 0).map(o=>({amount:M(r[o.yieldId],o.decimals).toFixed(),token:o}))}};function ni(a,n,i,r,o){switch(k.getChainProperty(a).chainType){case"EVM":{if(o)return new ta(o,n);{let s=i.getNodeRpcUrl(a),d=new ii.Web3(s);return d.defaultReturnFormat={number:ii.FMT_NUMBER.STR,bytes:ii.FMT_BYTES.HEX},new ta(d,n)}}case"TRX":{if(o)return new na(o,n);{let s=i.getNodeRpcUrl(a),d=new jc.TronWeb({fullHost:s});return d.setAddress(r),new na(d,n)}}case"SOLANA":throw new H;case"SRB":throw new H;case"SUI":throw new H;case"ALG":throw new H;case"STX":throw new H}}var ue=require("big.js");function Jc(a,n,i){let r=vl(a,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo),o=Rl(r.amountIncludingCommissionInSystemPrecision,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo);return{swapToVUsdCalcResult:r,swapFromVUsdCalcResult:o}}function zc(a,n,i){let r=fl(a,{decimals:i.decimals,feeShare:i.feeShare},i.poolInfo),o=Yl(r.amountIncludingCommissionInSystemPrecision,{decimals:n.decimals,feeShare:n.feeShare},n.poolInfo);return{swapToVUsdCalcResult:r,swapFromVUsdCalcResult:o}}function vl(a,{feeShare:n,decimals:i},r){let o=(0,ue.Big)(a),s=o.times(n),d=o.minus(s);return{bridgeFeeInTokenPrecision:s.round().toFixed(),amountIncludingCommissionInSystemPrecision:kc(pn(d,i),r),amountExcludingCommissionInSystemPrecision:kc(pn(o,i),r)}}function kc(a,n){if(a.eq(0))return"0";let i=(0,ue.Big)(n.tokenBalance).plus(a),r=Ft(i.toFixed(),n.aValue,n.dValue);return(0,ue.Big)(n.vUsdBalance).minus(r).round().toFixed()}function Rl(a,{feeShare:n,decimals:i},r){if((0,ue.Big)(a).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let s=(0,ue.Big)(a).plus(r.vUsdBalance),d=Ft(s,r.aValue,r.dValue),c=Xe((0,ue.Big)(r.tokenBalance).minus(d),i),g=(0,ue.Big)(c).times(n),A=(0,ue.Big)(c).minus(g).round();return{bridgeFeeInTokenPrecision:g.round().toFixed(),amountIncludingCommissionInTokenPrecision:A.toFixed(),amountExcludingCommissionInTokenPrecision:c.toFixed()}}function fl(a,{feeShare:n,decimals:i},r){let o=(0,ue.Big)(n).div((0,ue.Big)(1).minus(n)),s=(0,ue.Big)(a).times(o),d=(0,ue.Big)(a).plus(s);return{bridgeFeeInTokenPrecision:s.round().toFixed(),amountIncludingCommissionInSystemPrecision:Hc(pn(d,i),r),amountExcludingCommissionInSystemPrecision:Hc(pn(a,i),r)}}function Hc(a,n){let i=(0,ue.Big)(n.tokenBalance).minus(a),r=Ft(i.toFixed(),n.aValue,n.dValue);return(0,ue.Big)(r).minus(n.vUsdBalance).round().toFixed()}function Yl(a,{feeShare:n,decimals:i},r){if((0,ue.Big)(a).eq(0))return{bridgeFeeInTokenPrecision:"0",amountIncludingCommissionInTokenPrecision:"0",amountExcludingCommissionInTokenPrecision:"0"};let o=(0,ue.Big)(r.vUsdBalance).minus(a),s=Ft(o.toFixed(),r.aValue,r.dValue),d=(0,ue.Big)(s).minus(r.tokenBalance),c=Xe(d.toFixed(),i),g=(0,ue.Big)(n).div((0,ue.Big)(1).minus(n)),A=(0,ue.Big)(c).times(g),l=(0,ue.Big)(c).plus(A);return{bridgeFeeInTokenPrecision:A.round().toFixed(),amountIncludingCommissionInTokenPrecision:l.round().toFixed(),amountExcludingCommissionInTokenPrecision:c.toFixed()}}var _t=require("big.js");function xc(a,n,i,r,o){let s=Tt(a,n,i),d=Xe(s,n.decimals),c=Ri(s,r,o),g=(0,_t.Big)(a).times(n.feeShare),A=(0,_t.Big)(c).div((0,_t.Big)(1).minus(r.feeShare)).minus(c);return{sourceLPSwap:{fee:M(g,n.decimals).neg().round(n.decimals,_t.Big.roundUp).toFixed(),swap:M((0,_t.Big)(a).minus(d).minus(g),n.decimals).neg().round(n.decimals,_t.Big.roundUp).toFixed()},destLPSwap:{fee:M(A,r.decimals).neg().round(r.decimals,_t.Big.roundUp).toFixed(),swap:M(Xe(s,r.decimals).minus(c).minus(A),r.decimals).neg().round(r.decimals,_t.Big.roundUp).toFixed()}}}var Cs=require("@algorandfoundation/algokit-utils"),Br=require("algosdk");var Yr=class{constructor(n){this.nodeRpcUrlsConfig=n}async checkAssetOptIn(n,i,r){let o=this.getAlgorand(r);return Ca(n,i,o)}async buildRawTransactionAssetOptIn(n,i,r){let o=this.getAlgorand(r);typeof n=="string"&&(n=BigInt(n));let s=await o.createTransaction.assetOptIn({assetId:n,sender:i});return qt(s)}async checkAppOptIn(n,i,r){let o=this.getAlgorand(r);return Ia(n,i,o)}async buildRawTransactionAppOptIn(n,i,r){let o=this.getAlgorand(r);typeof n=="string"&&(n=BigInt(n));let s=o.newGroup(),d=o.account.random();s.addAppCallMethodCall({appId:n,method:new Br.ABIMethod({name:"optInToApplication",desc:void 0,args:[],returns:{type:"void",desc:void 0},events:[],readonly:!1}),args:[],sender:i,signer:d,onComplete:Br.OnApplicationComplete.OptInOC});let{transactions:c}=await s.buildTransactions();return qt(...c)}getAlgorand(n){if(n)return Cs.AlgorandClient.fromClients({algod:n});{let i=this.nodeRpcUrlsConfig.getNodeRpcUrl("ALG");return Cs.AlgorandClient.fromConfig({algodConfig:{server:i}})}}};var Ec=ce(require("axios"));var Oc="3.27.0-alpha.17";function Uc(a){return Object.entries(a).reduce((n,i)=>{let r=i[0],o=i[1],s=Nl(r,o);return s&&(n[r]=s),n},{})}function Kc(a){let n={};for(let[i,r]of Object.entries(a)){let o=i;for(let s of r.tokens){let d=ai({chainSymbol:o,poolAddress:s.poolAddress}),c=me(s.poolInfo);n[d]={...s.poolInfo,imbalance:c}}}return n}function Bl(a,n){let{name:i,...r}=a,{poolInfo:o,...s}=n;return{...s,...r,chainName:i}}function Wl(a){switch(a){case"allbridge":return 1;case"wormhole":return 2;case"cctp":return 3;case"cctpV2":return 4;case"oft":return 5}}function Tl(a){return Object.entries(a).reduce((n,[i,r])=>(n[i]=Fl(r),n),{})}function Fl(a){return Object.entries(a).reduce((n,[i,r])=>{let o=Wl(i);return o&&r!=null&&(n[o]=r),n},{})}function Nl(a,n){let i=k.getChainsProperties()[a];if(!i)return null;let r={...i,allbridgeChainId:n.chainId,bridgeId:n.bridgeId,paddingUtilId:n.paddingUtilId,bridgeAddress:n.bridgeAddress,oftBridgeAddress:n.oftBridgeAddress,yieldAddress:n.yieldAddress,abrPayer:n.abrPayer?{payerAddress:n.abrPayer.payerAddress,abrToken:{chainSymbol:a,tokenAddress:n.abrPayer.tokenAddress,decimals:n.abrPayer.tokenDecimals},payerAvailability:wl(n.abrPayer.payerAvailability)}:void 0,transferTime:Tl(n.transferTime),txCostAmount:n.txCostAmount,confirmations:n.confirmations,suiAddresses:n.suiAddresses};return{...r,tokens:n.tokens.map(o=>Bl(r,o))}}function wl(a){if(!a)return{};let n={};for(let[i,r]of Object.entries(a)){if(!r)continue;let o=Gl[i];o&&(n[o]=!0)}return n}var Gl=Object.fromEntries(Object.entries(jr).map(([a,n])=>[n,a]));function ai(a){return a.chainSymbol+"_"+a.poolAddress}function Qc(a){let n=[];for(let[i,r]of Object.entries(a)){let o=i;for(let s of r.tokens)n.push({chainSymbol:o,poolAddress:s.poolAddress})}return n}function Dc(a){let n={};for(let[i,r]of Object.entries(a)){let o=i;for(let[s,d]of Object.entries(r))d.imbalance=me(d),n[ai({chainSymbol:o,poolAddress:s})]=d}return n}var ri=class{api;constructor(n){this.api=Ec.default.create({baseURL:n.coreApiUrl,headers:{Accept:"application/json",...n.coreApiHeaders,"x-Sdk-Agent":"AllbridgeCoreSDK/"+Oc},params:n.coreApiQueryParams})}async getTokenInfo(){let{data:n}=await this.api.get("/token-info",{params:{filter:"all"}});return{chainDetailsMap:Uc(n),poolInfoMap:Kc(n)}}async getPendingInfo(){let{data:n}=await this.api.get("/pending-info");return n}async getGasBalance(n,i){let{data:r}=await this.api.get(`/check/${n}/${i}`);return r}async getTransferStatus(n,i){let{data:r}=await this.api.get(`/chain/${n}/${i}`);return r}async getReceiveTransactionCost(n){if(n.messenger===5&&!n.sourceToken)throw new ui("For OFT sourceToken required");let{data:i}=await this.api.post("/receive-fee",n,{headers:{"Content-Type":"application/json"}});return{exchangeRate:i.exchangeRate,fee:i.fee,sourceNativeTokenPrice:i.sourceNativeTokenPrice,abrExchangeRate:i.abrExchangeRate??"50000",adminFeeShareWithExtras:i.adminFeeShareWithExtras}}async getPoolInfoMap(n){let i=n instanceof Array?n:[n],{data:r}=await this.api.post("/pool-info",{pools:i},{headers:{"Content-Type":"application/json"}});return Dc(r)}};var Is=20*1e3,Zl=55*1e3,oi=class{constructor(n){this.apiClient=n;this.tokenInfoCache=new Qt({defaultTtl:Zl}),this.receivedTransactionCache=new Qt({defaultTtl:Is}),this.pendingInfoCache=new Qt({defaultTtl:Is}),this.gasBalanceCache=new Qt({defaultTtl:Is})}tokenInfoCache;pendingInfoCache;gasBalanceCache;receivedTransactionCache;getTokenInfo(){let n="TOKEN_INFO_CACHE_KEY",i=this.tokenInfoCache.get(n);if(i)return i;let r=this.apiClient.getTokenInfo();return this.tokenInfoCache.put(n,r),r}async getGasBalance(n,i){let r=`GAS_BALANCE_${n}_${i}`,o=this.gasBalanceCache.get(r);if(o)return o;let s=this.apiClient.getGasBalance(n,i);return this.gasBalanceCache.put(r,s),s}async getPendingInfo(){let n="PENDING_INFO_CACHE_KEY",i=this.pendingInfoCache.get(n);if(i)return i;let r=this.apiClient.getPendingInfo();return this.pendingInfoCache.put(n,r),r}async getReceiveTransactionCost(n){let i=`RECEIVE_TX_COST_${n.sourceChainId}_${n.destinationChainId}_${n.messenger}${n.sourceToken?"_"+n.sourceToken:""}`,r=this.receivedTransactionCache.get(i);if(r)return r;let o=await this.apiClient.getReceiveTransactionCost(n);return this.receivedTransactionCache.put(i,o),o}async getTransferStatus(n,i){return this.apiClient.getTransferStatus(n,i)}async getPoolInfoMap(n){return this.apiClient.getPoolInfoMap(n)}};var si=class{constructor(n){this.apiClient=n}async getChainDetailsMap(){return(await this.apiClient.getTokenInfo()).chainDetailsMap}async tokens(){let n=await this.getChainDetailsMap();return Object.values(n).flatMap(i=>i.tokens)}async getPendingInfo(){return this.apiClient.getPendingInfo()}async getGasBalance(n,i){return this.apiClient.getGasBalance(n,i)}async getChainDetailsMapAndPoolInfoMap(){return await this.apiClient.getTokenInfo()}async getTransferStatus(n,i){return await this.apiClient.getTransferStatus(n,i)}async getReceiveTransactionCost(n){return await this.apiClient.getReceiveTransactionCost(n)}async getPoolInfoMap(n){return await this.apiClient.getPoolInfoMap(n)}};var di=class{constructor(n,i){this.client=n;this.isStaging=i.coreApiQueryParams?.staging==="true"}isStaging;async getChainDetailsMap(n){let i=await this.client.getChainDetailsMap(),r={};for(let o in i){let s=i[o];s&&(r[o]={...s,tokens:_c(s.tokens,n,this.isStaging)})}return r}async tokens(n){return _c(await this.client.tokens(),n,this.isStaging)}async getPendingInfo(){return this.client.getPendingInfo()}async getGasBalance(n,i){return this.client.getGasBalance(n,i)}async getTransferStatus(n,i){return await this.client.getTransferStatus(n,i)}async getReceiveTransactionCost(n){return await this.client.getReceiveTransactionCost(n)}cachePut(n,i){return this.client.cachePut(n,i)}getPoolInfoByKey(n){return this.client.getPoolInfoByKey(n)}refreshPoolInfo(n){return this.client.refreshPoolInfo(n)}};function _c(a,n,i){return a.filter(r=>i?!0:r.flags[n]).map(Sl)}function Sl(a){let{flags:n,...i}=a;return i}var Vl=55*1e3,ci=class{constructor(n){this.client=n;this.poolInfoCache=new hs}poolInfoCache;async getChainDetailsMap(){return(await this.client.getChainDetailsMapAndPoolInfoMap()).chainDetailsMap}async tokens(){return await this.client.tokens()}getTransferStatus(n,i){return this.client.getTransferStatus(n,i)}getReceiveTransactionCost(n){return this.client.getReceiveTransactionCost(n)}getPendingInfo(){return this.client.getPendingInfo()}getGasBalance(n,i){return this.client.getGasBalance(n,i)}async getPoolInfoByKey(n){this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap);let i=this.poolInfoCache.get(n);if(i)return i;{let r=await this.client.getPoolInfoMap(n);this.poolInfoCache.putAll(r);let o=r[ai(n)];if(o)return o;throw new h("Cannot find pool info for "+n.poolAddress+" on chain "+n.chainSymbol)}}async refreshPoolInfo(n){let i;if(n)this.poolInfoCache.putAllIfNotExists((await this.client.getChainDetailsMapAndPoolInfoMap()).poolInfoMap),i=await this.client.getPoolInfoMap(n);else{let r=await this.client.getChainDetailsMapAndPoolInfoMap();i=await this.client.getPoolInfoMap(Qc(r.chainDetailsMap))}this.poolInfoCache.putAll(i)}cachePut(n,i){this.poolInfoCache.put(ai(n),i)}},hs=class{cache;constructor(){this.cache=new Qt({defaultTtl:Vl})}putAll(n){for(let[i,r]of Object.entries(n))this.cache.put(i,r)}putAllIfNotExists(n){for(let[i,r]of Object.entries(n))this.cache.get(i)||this.cache.put(i,r)}put(n,i){this.cache.put(n,i)}get(n){let i=ai(n);return this.cache.get(i)}};var fs=require("@algorandfoundation/algokit-utils"),eg=require("big.js"),tg=require("tronweb"),ng=require("web3");var vs=require("big.js"),Be=class{async checkAllowance(n){let i=await this.getAllowance(n);return(0,vs.Big)(i).gte((0,vs.Big)(n.amount))}};var aa=class extends Be{constructor(i,r){super();this.algorand=i;this.api=r}chainType="SUI";approve(i){throw new H}buildRawTransactionApprove(i){throw new H}getAllowance(i){throw new H}async getNativeTokenBalance(i){let{account:r}=i;return(await this.algorand.account.getInformation(r)).balance.microAlgo.toString()}async getTokenBalance(i){let{account:r,token:o}=i;try{return(await this.algorand.asset.getAccountInformation(r,BigInt(o.tokenAddress))).balance.toString()}catch(s){if(s instanceof Error)return s.message.includes("account asset info not found"),"0";throw s}}};var Xl={abi:[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}]},Wr=Xl;var Ml="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",Pl="0xdac17f958d2ee523a2206206994597c13d831ec7",Ll=1e5,ra=class extends Be{constructor(i,r){super();this.web3=i;this.api=r}chainType="EVM";getAllowance(i){let r=i.token.tokenAddress,o=i.owner,s=i.spender;return this.getAllowanceByTokenAddress(r,o,s)}getAllowanceByTokenAddress(i,r,o){return this.getERC20Contract(i).methods.allowance(r,o).call()}async getTokenBalance(i){return await this.getERC20Contract(i.token.tokenAddress).methods.balanceOf(i.account).call()}async getNativeTokenBalance(i){return(await this.web3.eth.getBalance(i.account)).toString()}async approve(i){if(this.isUsdt(i.tokenAddress)&&await this.getAllowanceByTokenAddress(i.tokenAddress,i.owner,i.spender)!=="0"){let s=await this.buildRawTransactionApprove({...i,amount:"0"});await this.sendRawTransaction(s,i.chainSymbol)}let r=await this.buildRawTransactionApprove(i);return await this.sendRawTransaction(r,i.chainSymbol)}isUsdt(i){return i.toLowerCase()===Pl}buildRawTransactionApprove(i){let{tokenAddress:r,spender:o,owner:s,amount:d}=i,g=this.getERC20Contract(r).methods.approve(o,d==null?Ml:tr(d));return Promise.resolve({from:s,to:r,value:"0",data:g.encodeABI()})}async sendRawTransaction(i,r){let o=i,s={maxPriorityFeePerGas:void 0,maxFeePerGas:void 0};r==="POL"?o.gas=Ll:o.gas=await this.web3.eth.estimateGas(i);let{transactionHash:d}=await this.web3.eth.sendTransaction({...o,...s});return{txId:d.toString()}}getERC20Contract(i){return new this.web3.eth.Contract(Wr.abi,i)}};var $c=require("@project-serum/anchor"),wn=require("@solana/web3.js");var Tr=class extends Be{constructor(i,r){super();this.solanaRpcUrl=i;this.api=r}chainType="SOLANA";approve(i){throw new H}buildRawTransactionApprove(i){throw new H}buildAnchorProvider(i){let r=new wn.Connection(this.solanaRpcUrl,"confirmed"),o=new wn.PublicKey(i);return new $c.AnchorProvider(r,{publicKey:o},{preflightCommitment:"confirmed",commitment:"confirmed"})}getAllowance(i){throw new H}async getTokenBalance(i){let{account:r,token:o}=i;try{let s=await At(new wn.PublicKey(r),new wn.PublicKey(o.tokenAddress));return(await jn(s,this.buildAnchorProvider(r))).amount.toString()}catch(s){if(s instanceof Error)return s.message.startsWith("Account does not exist"),"0";throw s}}async getNativeTokenBalance(i){return(await this.buildAnchorProvider(i.account).connection.getBalance(new wn.PublicKey(i.account))).toString()}};var Rs=require("@stellar/stellar-sdk");var Fr=class extends Be{constructor(i,r,o){super();this.nodeRpcUrlsConfig=i;this.params=r;this.api=o}chainType="SRB";getAllowance(){throw new H}async getTokenBalance(i){if(!i.token.originTokenAddress)throw new h("OriginTokenAddress missing");let[r,o]=i.token.originTokenAddress.split(":"),s=new Rs.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),d;try{d=await s.loadAccount(i.account)}catch(A){if(A instanceof Rs.NotFoundError)return"0";throw A}let g=d.balances.find(A=>(A.asset_type==="credit_alphanum4"||A.asset_type==="credit_alphanum12")&&A.asset_code==r&&A.asset_issuer==o);return g?.balance?X(g.balance,k.getChainDecimalsByType(k.getChainProperty(i.token.chainSymbol).chainType)).toFixed():"0"}async getNativeTokenBalance(i){let d=(await new Rs.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(i.account)).balances.find(c=>c.asset_type==="native");return d?.balance?X(d.balance,k.getChainDecimalsByType(k.getChainProperty(i.chainSymbol).chainType)).toFixed():"0"}approve(){throw new H}buildRawTransactionApprove(){throw new H}};var wr=require("@clarigen/core"),qc=require("@stacks/network");var Nr=class extends Be{constructor(i,r,o){super();this.nodeRpcUrl=i;this.params=r;this.api=o;let s=(0,qc.createNetwork)({network:this.params.stxIsTestnet?"testnet":"mainnet",client:{baseUrl:this.nodeRpcUrl},apiKey:this.params.stxHeroApiKey});this.client=new wr.ClarigenClient(s,this.params.stxHeroApiKey)}chainType="STX";client;async getTokenBalance(i){let r=(0,wr.contractFactory)(lt.ftToken,i.token.tokenAddress);return(await this.client.roOk(r.getBalance({owner:i.account}))).toString()}async getNativeTokenBalance(i){let r=`${this.nodeRpcUrl}/extended/v1/address/${i.account}/stx`,o=await fetch(r,{headers:this.params.stxHeroApiKey?{"x-api-key":this.params.stxHeroApiKey}:void 0});if(!o.ok)throw new Error(`Failed to fetch account: ${o.status}`);let d=(await o.json()).balance;return BigInt(d).toString()}getAllowance(i){throw new H}checkAllowance(i){throw new H}approve(i){throw new H}buildRawTransactionApprove(i){throw new H}};var Gr=class extends Be{constructor(i,r){super();this.suiRpcUrl=i;this.api=r;this.suiClient=new Ut({url:this.suiRpcUrl})}chainType="SUI";suiClient;approve(i){throw new H}buildRawTransactionApprove(i){throw new H}getAllowance(i){throw new H}async getTokenBalance(i){if(!i.token.originTokenAddress)throw new h("SUI token must contain 'originTokenAddress'");return(await this.suiClient.getBalance({owner:i.account,coinType:i.token.originTokenAddress})).totalBalance}async getNativeTokenBalance(i){let r=await St(o=>this.suiClient.getCoins({owner:i.account,cursor:o}));return r.length===0?"0":r.reduce((o,s)=>o+BigInt(s.balance),BigInt(0)).toString()}};var jl="0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",oa=class extends Be{constructor(i,r){super();this.tronWeb=i;this.api=r}chainType="TRX";async getAllowance(i){let{token:{tokenAddress:r},owner:o}=i;return(await(await this.getContract(r)).methods.allowance(o,i.spender).call()).toString()}async getTokenBalance(i){return(await(await this.getContract(i.token.tokenAddress)).balanceOf(i.account).call()).toString()}async getNativeTokenBalance(i){return(await this.tronWeb.trx.getBalance(i.account)).toString()}async approve(i){let r=await this.buildRawTransactionApprove(i);return await nr(this.tronWeb,r)}async buildRawTransactionApprove(i){let{tokenAddress:r,spender:o,owner:s,amount:d}=i,c=d==null?jl:tr(d),g=[{type:"address",value:o},{type:"uint256",value:c}];return this.buildRawTransaction(r,"approve(address,uint256)",g,"0",s)}getContract(i){return this.tronWeb.contract(Wr.abi,i)}async buildRawTransaction(i,r,o,s,d){let c=await this.tronWeb.transactionBuilder.triggerSmartContract(i,r,{callValue:+s},o,d);if(!c?.result?.result)throw new h("Unknown error: "+JSON.stringify(c,null,2));return c.transaction}};var gi=class{constructor(n,i,r){this.api=n;this.nodeRpcUrlsConfig=i;this.params=r}async getAllowance(n,i){let r=await this.getChainTokenService(n.token.chainSymbol,n.owner,i).getAllowance(n);return M(r,n.token.decimals).toFixed()}async checkAllowance(n,i){return Q(n.amount),O("amount",n.amount,n.token.decimals),this.getChainTokenService(n.token.chainSymbol,n.owner,i).checkAllowance(this.prepareCheckAllowanceParams(n))}async approve(n,i){return i.amount&&(kr(i.amount),O("amount",i.amount,i.token.decimals)),this.getChainTokenService(i.token.chainSymbol,i.owner,n).approve(this.prepareApproveParams(i))}async buildRawTransactionApprove(n,i){return n.amount&&(kr(n.amount),O("amount",n.amount,n.token.decimals)),this.getChainTokenService(n.token.chainSymbol,n.owner,i).buildRawTransactionApprove(this.prepareApproveParams(n))}async getTokenBalance(n,i){let r=await this.getChainTokenService(n.token.chainSymbol,n.account,i).getTokenBalance(n);return n.token.decimals?M(r,n.token.decimals).toFixed():r}async getNativeTokenBalance(n,i){let r=await this.getChainTokenService(n.chainSymbol,n.account,i).getNativeTokenBalance(n);return{int:r,float:M(r,k.getChainDecimalsByType(k.getChainProperty(n.chainSymbol).chainType)).toFixed()}}getChainTokenService(n,i,r){switch(k.getChainProperty(n).chainType){case"EVM":{if(r)return new ra(r,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new ra(new ng.Web3(o),this.api)}}case"TRX":{if(r)return new oa(r,this.api);{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n),s=new tg.TronWeb({fullHost:o});return s.setAddress(i),new oa(s,this.api)}}case"SOLANA":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new Tr(o,this.api)}case"SRB":return new Fr(this.nodeRpcUrlsConfig,this.params,this.api);case"SUI":return new Gr(this.nodeRpcUrlsConfig.getNodeRpcUrl(n),this.api);case"ALG":if(r){let o=r,s=fs.AlgorandClient.fromClients({algod:o});return new aa(s,this.api)}else{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n),s=fs.AlgorandClient.fromConfig({algodConfig:{server:o}});return new aa(s,this.api)}case"STX":{let o=this.nodeRpcUrlsConfig.getNodeRpcUrl(n);return new Nr(o,this.params,this.api)}}}prepareCheckAllowanceParams(n){return{...n,amount:X(n.amount,n.token.decimals)}}prepareApproveParams(n){return{tokenAddress:n.token.tokenAddress,owner:n.owner,spender:n.spender,chainSymbol:n.token.chainSymbol,amount:n.amount==null?void 0:(0,eg.Big)(n.amount).toFixed()}}};var Zr=class{constructor(n,i){this.nodeRpcUrlsConfig=n;this.params=i;let r=new ri(i),o=new oi(r),s=new si(o),d=new ci(s);this.api=new di(d,i),this.tokenService=new gi(this.api,n,i)}api;tokenService;buildRawTransactionApprove(n,i){return this.tokenService.buildRawTransactionApprove(n,i)}checkAllowance(n,i){return this.tokenService.checkAllowance(n,i)}getAllowance(n,i){return this.tokenService.getAllowance(n,i)}};var Ai=require("@solana/web3.js");var Sr=class{constructor(n,i){this.nodeRpcUrlsConfig=n;this.params=i}async addMemoToTx(n,i){if(i.length>28)throw new h("InvalidArgumentException memo cannot be more than 28 characters");let r=new Ai.Connection(this.nodeRpcUrlsConfig.getNodeRpcUrl("SOL"),"confirmed"),o=await bn(n,r),s=Ai.TransactionMessage.decompile(n.message,{addressLookupTableAccounts:o}),d=s.instructions[s.instructions.length-1];if(!d?.keys)throw new h("Last instruction or its keys are invalid.");d.keys.push({pubkey:new Ai.PublicKey(Buffer.from(i)),isSigner:!1,isWritable:!1}),n.message=s.compileToV0Message(o)}};var ie=require("@stellar/stellar-sdk");var BN=require("@stellar/stellar-sdk"),kl=BN.contract.Spec,Hl=BN.contract.Client;var sa=class extends Hl{constructor(i){super(new kl(["AAAAAAAAAYlSZXR1cm5zIHRoZSBhbGxvd2FuY2UgZm9yIGBzcGVuZGVyYCB0byB0cmFuc2ZlciBmcm9tIGBmcm9tYC4KClRoZSBhbW91bnQgcmV0dXJuZWQgaXMgdGhlIGFtb3VudCB0aGF0IHNwZW5kZXIgaXMgYWxsb3dlZCB0byB0cmFuc2ZlcgpvdXQgb2YgZnJvbSdzIGJhbGFuY2UuIFdoZW4gdGhlIHNwZW5kZXIgdHJhbnNmZXJzIGFtb3VudHMsIHRoZSBhbGxvd2FuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQgdHJhbnNmZXJlZC4KCiMgQXJndW1lbnRzCgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHRvIGJlIGRyYXduIGZyb20uCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3Mgc3BlbmRpbmcgdGhlIHRva2VucyBoZWxkIGJ5IGBmcm9tYC4AAAAAAAAJYWxsb3dhbmNlAAAAAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAEAAAAL","AAAAAAAAAIlSZXR1cm5zIHRydWUgaWYgYGlkYCBpcyBhdXRob3JpemVkIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBmb3Igd2hpY2ggdG9rZW4gYXV0aG9yaXphdGlvbiBpcyBiZWluZyBjaGVja2VkLgAAAAAAAAphdXRob3JpemVkAAAAAAABAAAAAAAAAAJpZAAAAAAAEwAAAAEAAAAB","AAAAAAAAA55TZXQgdGhlIGFsbG93YW5jZSBieSBgYW1vdW50YCBmb3IgYHNwZW5kZXJgIHRvIHRyYW5zZmVyL2J1cm4gZnJvbQpgZnJvbWAuCgpUaGUgYW1vdW50IHNldCBpcyB0aGUgYW1vdW50IHRoYXQgc3BlbmRlciBpcyBhcHByb3ZlZCB0byB0cmFuc2ZlciBvdXQgb2YKZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byB0cmFuc2ZlciBhbW91bnRzLCBhbmQKd2hlbiBhbiBhbW91bnQgaXMgdHJhbnNmZXJyZWQgdGhlIGFsbG93YW5jZSB3aWxsIGJlIHJlZHVjZWQgYnkgdGhlCmFtb3VudCB0cmFuc2ZlcmVkLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgdG8gYmUgZHJhd24gZnJvbS4KKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBiZWluZyBhdXRob3JpemVkIHRvIHNwZW5kIHRoZSB0b2tlbnMgaGVsZCBieQpgZnJvbWAuCiogYGFtb3VudGAgLSBUaGUgdG9rZW5zIHRvIGJlIG1hZGUgYXZhaWxhYmxlIHRvIGBzcGVuZGVyYC4KKiBgZXhwaXJhdGlvbl9sZWRnZXJgIC0gVGhlIGxlZGdlciBudW1iZXIgd2hlcmUgdGhpcyBhbGxvd2FuY2UgZXhwaXJlcy4gQ2Fubm90CmJlIGxlc3MgdGhhbiB0aGUgY3VycmVudCBsZWRnZXIgbnVtYmVyIHVubGVzcyB0aGUgYW1vdW50IGlzIGJlaW5nIHNldCB0byAwLgpBbiBleHBpcmVkIGVudHJ5ICh3aGVyZSBleHBpcmF0aW9uX2xlZGdlciA8IHRoZSBjdXJyZW50IGxlZGdlciBudW1iZXIpCnNob3VsZCBiZSB0cmVhdGVkIGFzIGEgMCBhbW91bnQgYWxsb3dhbmNlLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImFwcHJvdmUiLCBmcm9tOiBBZGRyZXNzLApzcGVuZGVyOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6IGkxMjgsIGV4cGlyYXRpb25fbGVkZ2VyOiB1MzJdYAAAAAAAB2FwcHJvdmUAAAAABAAAAAAAAAAEZnJvbQAAABMAAAAAAAAAB3NwZW5kZXIAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAAAAABFleHBpcmF0aW9uX2xlZGdlcgAAAAAAAAQAAAAA","AAAAAAAAAJhSZXR1cm5zIHRoZSBiYWxhbmNlIG9mIGBpZGAuCgojIEFyZ3VtZW50cwoKKiBgaWRgIC0gVGhlIGFkZHJlc3MgZm9yIHdoaWNoIGEgYmFsYW5jZSBpcyBiZWluZyBxdWVyaWVkLiBJZiB0aGUKYWRkcmVzcyBoYXMgbm8gZXhpc3RpbmcgYmFsYW5jZSwgcmV0dXJucyAwLgAAAAdiYWxhbmNlAAAAAAEAAAAAAAAAAmlkAAAAAAATAAAAAQAAAAs=","AAAAAAAAAWRCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLgoKUmVkdWNlcyBmcm9tJ3MgYmFsYW5jZSBieSB0aGUgYW1vdW50LCB3aXRob3V0IHRyYW5zZmVycmluZyB0aGUgYmFsYW5jZQp0byBhbm90aGVyIGhvbGRlcidzIGJhbGFuY2UuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIG9mIHRva2VucyB3aGljaCB3aWxsIGJlCmJ1cm5lZCBmcm9tLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgYnVybmVkLgoKIyBFdmVudHMKCkVtaXRzIGFuIGV2ZW50IHdpdGggdG9waWNzIGBbImJ1cm4iLCBmcm9tOiBBZGRyZXNzXSwgZGF0YSA9IFthbW91bnQ6CmkxMjhdYAAAAARidXJuAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAtxCdXJuIGBhbW91bnRgIGZyb20gYGZyb21gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSBvZiBgc3BlbmRlcmAuCgpSZWR1Y2VzIGZyb20ncyBiYWxhbmNlIGJ5IHRoZSBhbW91bnQsIHdpdGhvdXQgdHJhbnNmZXJyaW5nIHRoZSBiYWxhbmNlCnRvIGFub3RoZXIgaG9sZGVyJ3MgYmFsYW5jZS4KClRoZSBzcGVuZGVyIHdpbGwgYmUgYWxsb3dlZCB0byBidXJuIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZSwgaWYKdGhlIGFtb3VudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGFsbG93YW5jZSB0aGF0IHRoZSBzcGVuZGVyIGhhcwpvbiB0aGUgZnJvbSdzIGJhbGFuY2UuIFRoZSBzcGVuZGVyJ3MgYWxsb3dhbmNlIG9uIGZyb20ncyBiYWxhbmNlIHdpbGwgYmUKcmVkdWNlZCBieSB0aGUgYW1vdW50LgoKIyBBcmd1bWVudHMKCiogYHNwZW5kZXJgIC0gVGhlIGFkZHJlc3MgYXV0aG9yaXppbmcgdGhlIGJ1cm4sIGFuZCBoYXZpbmcgaXRzIGFsbG93YW5jZQpjb25zdW1lZCBkdXJpbmcgdGhlIGJ1cm4uCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQpidXJuZWQgZnJvbS4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIGJ1cm5lZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJidXJuIiwgZnJvbTogQWRkcmVzc10sIGRhdGEgPSBbYW1vdW50OgppMTI4XWAAAAAJYnVybl9mcm9tAAAAAAAAAwAAAAAAAAAHc3BlbmRlcgAAAAATAAAAAAAAAARmcm9tAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAVNDbGF3YmFjayBgYW1vdW50YCBmcm9tIGBmcm9tYCBhY2NvdW50LiBgYW1vdW50YCBpcyBidXJuZWQgaW4gdGhlCmNsYXdiYWNrIHByb2Nlc3MuCgojIEFyZ3VtZW50cwoKKiBgZnJvbWAgLSBUaGUgYWRkcmVzcyBob2xkaW5nIHRoZSBiYWxhbmNlIGZyb20gd2hpY2ggdGhlIGNsYXdiYWNrIHdpbGwKdGFrZSB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSBjbGF3ZWQgYmFjay4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJjbGF3YmFjayIsIGFkbWluOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAACGNsYXdiYWNrAAAAAgAAAAAAAAAEZnJvbQAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAIBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbHMgdXNlZCB0byByZXByZXNlbnQgYW1vdW50cyBvZiB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAhkZWNpbWFscwAAAAAAAAABAAAABA==","AAAAAAAAAPVNaW50cyBgYW1vdW50YCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgbWludGVkIHRva2Vucy4KKiBgYW1vdW50YCAtIFRoZSBhbW91bnQgb2YgdG9rZW5zIHRvIGJlIG1pbnRlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJtaW50IiwgYWRtaW46IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwgZGF0YQo9IFthbW91bnQ6IGkxMjhdYAAAAAAAAARtaW50AAAAAgAAAAAAAAACdG8AAAAAABMAAAAAAAAABmFtb3VudAAAAAAACwAAAAA=","AAAAAAAAAFlSZXR1cm5zIHRoZSBuYW1lIGZvciB0aGlzIHRva2VuLgoKIyBQYW5pY3MKCklmIHRoZSBjb250cmFjdCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLgAAAAAAAARuYW1lAAAAAAAAAAEAAAAQ","AAAAAAAAAQxTZXRzIHRoZSBhZG1pbmlzdHJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBgbmV3X2FkbWluYC4KCiMgQXJndW1lbnRzCgoqIGBuZXdfYWRtaW5gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCBoZW5jZWZvcnRoIGJlIHRoZSBhZG1pbmlzdHJhdG9yCm9mIHRoaXMgdG9rZW4gY29udHJhY3QuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2FkbWluIiwgYWRtaW46IEFkZHJlc3NdLCBkYXRhID0KW25ld19hZG1pbjogQWRkcmVzc11gAAAACXNldF9hZG1pbgAAAAAAAAEAAAAAAAAACW5ld19hZG1pbgAAAAAAABMAAAAA","AAAAAAAAAEZSZXR1cm5zIHRoZSBhZG1pbiBvZiB0aGUgY29udHJhY3QuCgojIFBhbmljcwoKSWYgdGhlIGFkbWluIGlzIG5vdCBzZXQuAAAAAAAFYWRtaW4AAAAAAAAAAAAAAQAAABM=","AAAAAAAAAVBTZXRzIHdoZXRoZXIgdGhlIGFjY291bnQgaXMgYXV0aG9yaXplZCB0byB1c2UgaXRzIGJhbGFuY2UuIElmCmBhdXRob3JpemVkYCBpcyB0cnVlLCBgaWRgIHNob3VsZCBiZSBhYmxlIHRvIHVzZSBpdHMgYmFsYW5jZS4KCiMgQXJndW1lbnRzCgoqIGBpZGAgLSBUaGUgYWRkcmVzcyBiZWluZyAoZGUtKWF1dGhvcml6ZWQuCiogYGF1dGhvcml6ZWAgLSBXaGV0aGVyIG9yIG5vdCBgaWRgIGNhbiB1c2UgaXRzIGJhbGFuY2UuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsic2V0X2F1dGhvcml6ZWQiLCBpZDogQWRkcmVzc10sIGRhdGEgPQpbYXV0aG9yaXplOiBib29sXWAAAAAOc2V0X2F1dGhvcml6ZWQAAAAAAAIAAAAAAAAAAmlkAAAAAAATAAAAAAAAAAlhdXRob3JpemUAAAAAAAABAAAAAA==","AAAAAAAAAFtSZXR1cm5zIHRoZSBzeW1ib2wgZm9yIHRoaXMgdG9rZW4uCgojIFBhbmljcwoKSWYgdGhlIGNvbnRyYWN0IGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuAAAAAAZzeW1ib2wAAAAAAAAAAAABAAAAEA==","AAAAAAAAAWRUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLgoKIyBBcmd1bWVudHMKCiogYGZyb21gIC0gVGhlIGFkZHJlc3MgaG9sZGluZyB0aGUgYmFsYW5jZSBvZiB0b2tlbnMgd2hpY2ggd2lsbCBiZQp3aXRoZHJhd24gZnJvbS4KKiBgdG9gIC0gVGhlIGFkZHJlc3Mgd2hpY2ggd2lsbCByZWNlaXZlIHRoZSB0cmFuc2ZlcnJlZCB0b2tlbnMuCiogYGFtb3VudGAgLSBUaGUgYW1vdW50IG9mIHRva2VucyB0byBiZSB0cmFuc2ZlcnJlZC4KCiMgRXZlbnRzCgpFbWl0cyBhbiBldmVudCB3aXRoIHRvcGljcyBgWyJ0cmFuc2ZlciIsIGZyb206IEFkZHJlc3MsIHRvOiBBZGRyZXNzXSwKZGF0YSA9IFthbW91bnQ6IGkxMjhdYAAAAAh0cmFuc2ZlcgAAAAMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA==","AAAAAAAAAzNUcmFuc2ZlciBgYW1vdW50YCBmcm9tIGBmcm9tYCB0byBgdG9gLCBjb25zdW1pbmcgdGhlIGFsbG93YW5jZSB0aGF0CmBzcGVuZGVyYCBoYXMgb24gYGZyb21gJ3MgYmFsYW5jZS4gQXV0aG9yaXplZCBieSBzcGVuZGVyCihgc3BlbmRlci5yZXF1aXJlX2F1dGgoKWApLgoKVGhlIHNwZW5kZXIgd2lsbCBiZSBhbGxvd2VkIHRvIHRyYW5zZmVyIHRoZSBhbW91bnQgZnJvbSBmcm9tJ3MgYmFsYW5jZQppZiB0aGUgYW1vdW50IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYWxsb3dhbmNlIHRoYXQgdGhlIHNwZW5kZXIKaGFzIG9uIHRoZSBmcm9tJ3MgYmFsYW5jZS4gVGhlIHNwZW5kZXIncyBhbGxvd2FuY2Ugb24gZnJvbSdzIGJhbGFuY2UKd2lsbCBiZSByZWR1Y2VkIGJ5IHRoZSBhbW91bnQuCgojIEFyZ3VtZW50cwoKKiBgc3BlbmRlcmAgLSBUaGUgYWRkcmVzcyBhdXRob3JpemluZyB0aGUgdHJhbnNmZXIsIGFuZCBoYXZpbmcgaXRzCmFsbG93YW5jZSBjb25zdW1lZCBkdXJpbmcgdGhlIHRyYW5zZmVyLgoqIGBmcm9tYCAtIFRoZSBhZGRyZXNzIGhvbGRpbmcgdGhlIGJhbGFuY2Ugb2YgdG9rZW5zIHdoaWNoIHdpbGwgYmUKd2l0aGRyYXduIGZyb20uCiogYHRvYCAtIFRoZSBhZGRyZXNzIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgdHJhbnNmZXJyZWQgdG9rZW5zLgoqIGBhbW91bnRgIC0gVGhlIGFtb3VudCBvZiB0b2tlbnMgdG8gYmUgdHJhbnNmZXJyZWQuCgojIEV2ZW50cwoKRW1pdHMgYW4gZXZlbnQgd2l0aCB0b3BpY3MgYFsidHJhbnNmZXIiLCBmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzc10sCmRhdGEgPSBbYW1vdW50OiBpMTI4XWAAAAAADXRyYW5zZmVyX2Zyb20AAAAAAAAEAAAAAAAAAAdzcGVuZGVyAAAAABMAAAAAAAAABGZyb20AAAATAAAAAAAAAAJ0bwAAAAAAEwAAAAAAAAAGYW1vdW50AAAAAAALAAAAAA=="]),i);this.options=i}fromJSON={allowance:this.txFromJSON,authorized:this.txFromJSON,approve:this.txFromJSON,balance:this.txFromJSON,burn:this.txFromJSON,burn_from:this.txFromJSON,clawback:this.txFromJSON,decimals:this.txFromJSON,mint:this.txFromJSON,name:this.txFromJSON,set_admin:this.txFromJSON,admin:this.txFromJSON,set_authorized:this.txFromJSON,symbol:this.txFromJSON,transfer:this.txFromJSON,transfer_from:this.txFromJSON}};var Jl=100,zl=180,Vr=class{constructor(n,i){this.nodeRpcUrlsConfig=n;this.params=i}async buildChangeTrustLineXdrTx(n){let r=await new ie.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")).loadAccount(n.sender),s=await this.getContract(sa,n.tokenAddress).name();if(qn(s))throw new h;let d=$n(s);if(!d)throw new h;let[c,g]=d.split(":");if(c===void 0||g===void 0)throw new h("Invalid token name format. Expected format 'symbol:srbTokenAddress'");let A=new ie.Asset(c,g),l=ie.Operation.changeTrust({asset:A,limit:n.limit});return new ie.TransactionBuilder(r,{fee:Jl.toString(10),networkPassphrase:this.params.sorobanNetworkPassphrase}).addOperation(l).setTimeout(zl).build().toXDR()}async getBalanceLine(n,i){let o=await this.getContract(sa,i).name();if(qn(o))throw new h;let s=$n(o);if(!s)throw new h;let[d,c]=s.split(":"),g=this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR");return(await new ie.Horizon.Server(g).loadAccount(n)).balances.find(b=>(b.asset_type==="credit_alphanum4"||b.asset_type==="credit_alphanum12")&&b.asset_code==d&&b.asset_issuer==c)}async submitTransactionStellar(n){let i=new ie.Horizon.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR")),r=ie.TransactionBuilder.fromXDR(n,this.nodeRpcUrlsConfig.getNodeRpcUrl("STLR"));return await i.submitTransaction(r)}async simulateAndCheckRestoreTxRequiredSoroban(n,i){let r=new ie.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await r.getAccount(i),s=ie.TransactionBuilder.fromXDR(n,this.params.sorobanNetworkPassphrase),d=await r.simulateTransaction(s);if(ie.rpc.Api.isSimulationRestore(d))return new ie.TransactionBuilder(o,{fee:(+ie.BASE_FEE+ +d.restorePreamble.minResourceFee).toString(),networkPassphrase:this.params.sorobanNetworkPassphrase}).setSorobanData(d.restorePreamble.transactionData.build()).addOperation(ie.Operation.restoreFootprint({})).setTimeout(ie.TimeoutInfinite).build().toXDR()}async sendTransactionSoroban(n){let i=new ie.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),r=ie.TransactionBuilder.fromXDR(n,this.params.sorobanNetworkPassphrase);return i.sendTransaction(r)}async confirmTx(n,i=15){let r=new ie.rpc.Server(this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")),o=await Ts(()=>r.getTransaction(n),d=>d.status===ie.rpc.Api.GetTransactionStatus.NOT_FOUND,i);if(o.length===0)throw new h("No transaction responses found.");let s=o[o.length-1];if(!s)throw new h("Unexpected error: last response is undefined.");return s}getContract(n,i){let r={contractId:i,networkPassphrase:this.params.sorobanNetworkPassphrase,rpcUrl:this.nodeRpcUrlsConfig.getNodeRpcUrl("SRB")};return new n(r)}};var Xr=class{constructor(n,i){this.nodeRpcUrlsConfig=n;this.api=i}_suiBridgeService;async buildSendTxFromCustomTx(n,i,r){return this.suiBridgeService.buildRawTransactionSendFromCustomTx(n,i,r)}get suiBridgeService(){return this._suiBridgeService||(this._suiBridgeService=new En(this.nodeRpcUrlsConfig,this.api)),this._suiBridgeService}};var Mr=class{constructor(n){this.service=n;this.srb=new Vr(n.nodeRpcUrlsConfig,n.params),this.sol=new Sr(n.nodeRpcUrlsConfig,n.params),this.sui=new Xr(n.nodeRpcUrlsConfig,n.api),this.evm=new Zr(n.nodeRpcUrlsConfig,n.params),this.alg=new Yr(n.nodeRpcUrlsConfig)}srb;sol;sui;evm;alg};var gt=(r=>(r.WITH_NATIVE_CURRENCY="native",r.WITH_STABLECOIN="stablecoin",r.WITH_ARB="abr",r))(gt||{}),Bi=(i=>(i.INT="int",i.FLOAT="float",i))(Bi||{});var ye=require("big.js");var da=class{constructor(n){this.nodeRpcUrls=n}getNodeRpcUrl(n){let i=this.nodeRpcUrls[n];if(i!==void 0)return i;throw new bi(n)}},Pr=class{constructor(n,i=li){this.nodeRpcUrlsConfig=n;k.addChainsProperties(i.additionalChainsProperties);let r=new ri(i),o=new oi(r),s=new si(o),d=new ci(s);this.api=new di(d,i),this.tokenService=new gi(this.api,n,i),this.bridge=new ir(this.api,n,i,this.tokenService),this.pool=new hr(this.api,n,i,this.tokenService),this.yield=new fr(this.api,n,i,this.tokenService),this.params=i}api;tokenService;params;bridge;pool;yield;async chainDetailsMap(n){return this.api.getChainDetailsMap(n)}async tokens(n){return this.api.tokens(n)}async tokensByChain(n,i){let o=(await this.api.getChainDetailsMap(i))[n];return o?o.tokens:[]}async getTransferStatus(n,i){return this.api.getTransferStatus(n,i)}async getGasBalance(n,i){return this.api.getGasBalance(n,i)}async checkAddress(){return new Promise(n=>{n({status:"OK",gasBalance:null})})}async getPendingStatusInfo(n,i,r,o){Q(n);let s;i=="float"?(O("amount",n,r.decimals),s=X(n,r.decimals).toFixed()):s=n;let d=Tt(s,r,await Ce(this.api,r)),c=await Ce(this.api,o),g=this.getAmountFromVUsdFormatted(d,o,c),A,l=await this.api.getPendingInfo();for(let u in l[o.chainSymbol]){let b=l[o.chainSymbol];if(!b)throw new h("Cannot find pending info for "+o.chainSymbol);A=b[u]}if(A){let u=Gs(A.totalSentAmount,c),b=this.getAmountFromVUsdFormatted(d,o,u),C;return(0,ye.Big)(b.int).gt(g.int)?C={min:g,max:b}:C={min:b,max:g},{pendingTxs:A.pendingTxs,pendingAmount:{int:Me(A.totalSentAmount,3,o.decimals).toFixed(0),float:M(A.totalSentAmount,3).toFixed()},estimatedAmount:C}}return{pendingTxs:0,pendingAmount:{int:"0",float:"0"},estimatedAmount:{min:g,max:g}}}async getTokenBalance(n,i){return this.tokenService.getTokenBalance(n,i)}async getNativeTokenBalance(n,i){return this.tokenService.getNativeTokenBalance(n,i)}async calculateFeePercentOnSourceChain(n,i){Q(n),O("amountFloat",n,i.decimals);let r=X(n,i.decimals);if(r.eq(0))return 0;let o=Tt(r,i,await Ce(this.api,i)),s=Xe(o,i.decimals);return zr(r,s)}async calculateFeePercentOnDestinationChain(n,i,r){Q(n),O("amountFloat",n,i.decimals);let o=X(n,i.decimals);if(o.eq(0))return 0;let s=Tt(o,i,await Ce(this.api,i)),d=Ri(s,r,await Ce(this.api,r)),c=Xe(s,r.decimals);return zr(c,d)}async getAmountToBeReceivedAndGasFeeOptions(n,i,r,o){return Q(n),O("amountToSendFloat",n,i.decimals),{amountToSendFloat:(0,ye.Big)(n).toFixed(),amountToBeReceivedFloat:await this.getAmountToBeReceived(n,i,r,o),gasFeeOptions:await this.getGasFeeOptions(i,r,o)}}async getAmountToSendAndGasFeeOptions(n,i,r,o){return Q(n),O("amountToBeReceivedFloat",n,r.decimals),{amountToSendFloat:await this.getAmountToSend(n,i,r,o),amountToBeReceivedFloat:(0,ye.Big)(n).toFixed(),gasFeeOptions:await this.getGasFeeOptions(i,r,o)}}async getAmountToBeReceived(n,i,r,o){return this.getAmountToBeReceivedCompute(n,i,r,o,async()=>await Ce(this.api,i),async()=>await Ce(this.api,r))}async getAmountToBeReceivedFromChain(n,i,r,o,s,d){return this.getAmountToBeReceivedCompute(n,i,r,o,async()=>await this.pool.getPoolInfoFromChain(i,s),async()=>await this.pool.getPoolInfoFromChain(r,d))}async getAmountToBeReceivedCompute(n,i,r,o=1,s,d){switch(o){case 1:case 2:return this.getAmountToBeReceivedComputeWithPools(n,i,r,await s(),await d());case 3:case 4:return this.getAmountToBeReceivedComputeCctp(n,i,r,o);case 5:return this.getAmountToBeReceivedComputeOft(n,i,r)}}getAmountToBeReceivedComputeWithPools(n,i,r,o,s){Q(n),O("amountToSendFloat",n,i.decimals);let d=X(n,i.decimals),c=Tt(d,i,o);return this.getAmountFromVUsdFormatted(c,r,s).float}getAmountToBeReceivedComputeCctp(n,i,r,o){Q(n),O("amountToSendFloat",n,i.decimals);let s=X(n,i.decimals);switch(o){case 3:{if(!i.cctpAddress||!r.cctpAddress||!i.cctpFeeShare)throw new We("Such route does not support CCTP protocol");let d=s.mul((0,ye.Big)(1).minus(i.cctpFeeShare)).round(0,ye.Big.roundUp),c=Me(d,i.decimals,r.decimals).round(0);return M(c,r.decimals).toFixed()}case 4:{if(!i.cctpV2Address||!r.cctpV2Address||!i.cctpV2FeeShare)throw new We("Such route does not support CCTP V2 protocol");let d=s.mul((0,ye.Big)(1).minus(i.cctpV2FeeShare)).round(0,ye.Big.roundUp),c=Me(d,i.decimals,r.decimals).round(0);return M(c,r.decimals).toFixed()}}}async getAmountToBeReceivedComputeOft(n,i,r){Q(n),O("amountToSendFloat",n,i.decimals);let o=X(n,i.decimals);if(!i.oftBridgeAddress||!r.oftBridgeAddress||i.oftId!==r.oftId)throw new Te("Such route does not support OFT protocol");let{adminFeeShareWithExtras:s}=await this.api.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:r.allbridgeChainId,messenger:5,sourceToken:i.tokenAddress});if(!s)throw new Te("Such route does not support OFT protocol");let d=o.mul((0,ye.Big)(1).minus(s)).round(0,ye.Big.roundUp),c=Me(d,i.decimals,r.decimals).round(0);return M(c,r.decimals).toFixed()}async getAmountToSend(n,i,r,o){return this.getAmountToSendCompute(n,i,r,o,()=>Ce(this.api,i),()=>Ce(this.api,r))}async getAmountToSendFromChain(n,i,r,o,s,d){return this.getAmountToSendCompute(n,i,r,o,()=>this.pool.getPoolInfoFromChain(i,s),()=>this.pool.getPoolInfoFromChain(r,d))}async getAmountToSendCompute(n,i,r,o=1,s,d){switch(o){case 1:case 2:return this.getAmountToSendComputeWithPools(n,i,r,await s(),await d());case 3:case 4:return this.getAmountToSendComputeCctp(n,i,r,o);case 5:return this.getAmountToSendComputeOft(n,i,r)}}getAmountToSendComputeWithPools(n,i,r,o,s){Q(n),O("amountToBeReceivedFloat",n,r.decimals);let d=X(n,r.decimals),c=Ss(d,r,s),g=Zs(c,i,o);if((0,ye.Big)(g).lte(0))throw new Wt;return M(g,i.decimals).toFixed()}getAmountToSendComputeCctp(n,i,r,o){Q(n),O("amountToBeReceivedFloat",n,r.decimals);let s=X(n,r.decimals);switch(o){case 3:{if(!i.cctpAddress||!r.cctpAddress||!i.cctpFeeShare)throw new We("Such route does not support CCTP protocol");let d=s.div((0,ye.Big)(1).minus(i.cctpFeeShare)).round(0,ye.Big.roundDown),c=Me(d,r.decimals,i.decimals).round(0);return M(c,i.decimals).toFixed()}case 4:{if(!i.cctpV2Address||!r.cctpV2Address||!i.cctpV2FeeShare)throw new We("Such route does not support CCTP V2 protocol");let d=s.div((0,ye.Big)(1).minus(i.cctpV2FeeShare)).round(0,ye.Big.roundDown),c=Me(d,r.decimals,i.decimals).round(0);return M(c,i.decimals).toFixed()}}}async getAmountToSendComputeOft(n,i,r){Q(n),O("amountToBeReceivedFloat",n,r.decimals);let o=X(n,r.decimals);if(!i.oftId||!r.oftId||!i.oftBridgeAddress||i.oftId!==r.oftId)throw new Te("Such route does not support OFT protocol");let{adminFeeShareWithExtras:s}=await this.api.getReceiveTransactionCost({sourceChainId:i.allbridgeChainId,destinationChainId:r.allbridgeChainId,messenger:5,sourceToken:i.tokenAddress});if(!s)throw new Te("Such route does not support OFT protocol");let d=o.div((0,ye.Big)(1).minus(s)).round(0,ye.Big.roundDown),c=Me(d,r.decimals,i.decimals).round(0);return M(c,i.decimals).toFixed()}async getGasFeeOptions(n,i,r){return Kr(n,i.allbridgeChainId,r,this.api)}getAverageTransferTime(n,i,r){return n.transferTime?.[i.chainSymbol]?.[r]??null}async getPoolInfoByToken(n){return await this.api.getPoolInfoByKey({chainSymbol:n.chainSymbol,poolAddress:n.poolAddress})}async refreshPoolInfo(n){if(n){let r=(n instanceof Array?n:[n]).map(o=>({chainSymbol:o.chainSymbol,poolAddress:o.poolAddress}));return this.api.refreshPoolInfo(r)}return this.api.refreshPoolInfo()}aprInPercents(n){return Xs(n)}async getExtraGasMaxLimits(n,i,r){return await Qr(n,i,r,this.api)}async getVUsdFromAmount(n,i,r){Q(n);let o;i=="float"?(O("amount",n,r.decimals),o=X(n,r.decimals).toFixed()):o=n;let s=Tt(o,r,await Ce(this.api,r));return{int:s,float:M(s,3).toFixed()}}async getAmountFromVUsd(n,i){return this.getAmountFromVUsdFormatted(n,i,await Ce(this.api,i))}getAmountFromVUsdFormatted(n,i,r){Q(n);let o=Ri(n,i,r);if((0,ye.Big)(o).lt(0))throw new Wt;return{int:o,float:M(o,i.decimals).toFixed()}}async swapAndBridgeFeeCalculation(n,i,r){return Jc(n,{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await Ce(this.api,i)},{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Ce(this.api,r)})}async swapAndBridgeFeeCalculationReverse(n,i,r){let o=zc(n,{decimals:i.decimals,feeShare:i.feeShare,poolInfo:await Ce(this.api,i)},{decimals:r.decimals,feeShare:r.feeShare,poolInfo:await Ce(this.api,r)}),s=o.swapFromVUsdCalcResult.amountIncludingCommissionInTokenPrecision;if((0,ye.Big)(s).lt(0))throw new Wt;return o}async getSendAmountDetails(n,i,r,o){Q(n);let s;return i=="float"?(O("amount",n,r.decimals),s=X(n,r.decimals).toFixed()):s=n,xc(s,r,await Ce(this.api,r),o,await Ce(this.api,o))}};function xl(a){return"solanaRpcUrl"in a}var Ys=class{params;bridge;pool;yield;utils;service;constructor(n,i=li){let r;xl(n)?r=new da({SOL:n.solanaRpcUrl,TRX:n.tronRpcUrl}):r=new da(n),this.service=new Pr(r,i),this.bridge=this.service.bridge,this.pool=this.service.pool,this.yield=this.service.yield,this.utils=new Mr(this.service),this.params=i}async chainDetailsMap(n="swap"){return this.service.chainDetailsMap(n)}async tokens(n="swap"){return this.service.tokens(n)}async tokensByChain(n,i="swap"){return this.service.tokensByChain(n,i)}async getTransferStatus(n,i){return this.service.getTransferStatus(n,i)}async getGasBalance(n,i){return this.service.getGasBalance(n,i)}async checkAddress(n,i,r){return await this.service.checkAddress()}async getPendingStatusInfo(n,i,r,o){return this.service.getPendingStatusInfo(n,i,r,o)}async getTokenBalance(n,i){return this.service.getTokenBalance(n,i)}async getNativeTokenBalance(n,i){return this.service.getNativeTokenBalance(n,i)}async calculateFeePercentOnSourceChain(n,i){return this.service.calculateFeePercentOnSourceChain(n,i)}async calculateFeePercentOnDestinationChain(n,i,r){return this.service.calculateFeePercentOnDestinationChain(n,i,r)}async getAmountToBeReceivedAndGasFeeOptions(n,i,r,o){return this.service.getAmountToBeReceivedAndGasFeeOptions(n,i,r,o)}async getAmountToSendAndGasFeeOptions(n,i,r,o){return this.service.getAmountToSendAndGasFeeOptions(n,i,r,o)}async getAmountToBeReceived(n,i,r,o=1){return this.service.getAmountToBeReceived(n,i,r,o)}async getAmountToBeReceivedFromChain(n,i,r,o=1,s,d){return this.service.getAmountToBeReceivedFromChain(n,i,r,o,s,d)}getAmountToBeReceivedFromPools(n,i,r,o,s,d=1){switch(d){case 1:case 2:return this.service.getAmountToBeReceivedComputeWithPools(n,i,r,o,s);case 3:case 4:return this.service.getAmountToBeReceivedComputeCctp(n,i,r,d)}}async getAmountToSend(n,i,r,o=1){return this.service.getAmountToSend(n,i,r,o)}async getAmountToSendFromChain(n,i,r,o=1,s,d){return this.service.getAmountToSendFromChain(n,i,r,o,s,d)}getAmountToSendFromPools(n,i,r,o,s,d=1){switch(d){case 1:case 2:return this.service.getAmountToSendComputeWithPools(n,i,r,o,s);case 3:case 4:return this.service.getAmountToSendComputeCctp(n,i,r,d)}}async getGasFeeOptions(n,i,r){return this.service.getGasFeeOptions(n,i,r)}getAverageTransferTime(n,i,r){return this.service.getAverageTransferTime(n,i,r)}async getPoolInfoByToken(n){return this.service.getPoolInfoByToken(n)}async refreshPoolInfo(n){return this.service.refreshPoolInfo(n)}aprInPercents(n){return this.service.aprInPercents(n)}async getExtraGasMaxLimits(n,i,r=1){return this.service.getExtraGasMaxLimits(n,i,r)}async getVUsdFromAmount(n,i,r){return this.service.getVUsdFromAmount(n,i,r)}async getAmountFromVUsd(n,i){return this.service.getAmountFromVUsd(n,i)}async swapAndBridgeFeeCalculation(n,i,r){return this.service.swapAndBridgeFeeCalculation(n,i,r)}async swapAndBridgeFeeCalculationReverse(n,i,r){return this.service.swapAndBridgeFeeCalculationReverse(n,i,r)}async getSendAmountDetails(n,i,r,o){return this.service.getSendAmountDetails(n,i,r,o)}};0&&(module.exports={AddressStatus,AllbridgeCoreSdk,AmountFormat,AmountNotEnoughError,ArgumentInvalidDecimalsError,CCTPDoesNotSupportedError,ChainSymbol,ChainType,ErrorCode,ExtraGasMaxLimitExceededError,FeePaymentMethod,InsufficientPoolLiquidityError,InvalidAmountError,InvalidGasFeePaymentOptionError,InvalidMessengerOptionError,InvalidTxError,JupiterError,Messenger,MethodNotSupportedError,NodeRpcUrlNotInitializedError,OFTDoesNotSupportedError,SdkError,SdkRootError,SolanaAutoTxFee,TimeoutError,TxTooLargeError,VerifyTxError,YieldDoesNotSupportedError,assertYieldIsSupported,isYieldSupported,mainnet,nodeRpcUrlsDefault,nodeUrlsDefault});
7
7
  //# sourceMappingURL=index.js.map