@sablier/airdrops
Version:
EVM smart contracts of the Sablier Airdrops protocol
530 lines • 235 kB
JSON
{
"abi": [
{
"type": "constructor",
"inputs": [
{
"name": "campaignParams",
"type": "tuple",
"internalType": "struct MerkleLL.ConstructorParams",
"components": [
{ "name": "campaignName", "type": "string", "internalType": "string" },
{ "name": "campaignStartTime", "type": "uint40", "internalType": "uint40" },
{ "name": "cancelable", "type": "bool", "internalType": "bool" },
{ "name": "claimType", "type": "uint8", "internalType": "enum ClaimType" },
{ "name": "cliffDuration", "type": "uint40", "internalType": "uint40" },
{ "name": "cliffUnlockPercentage", "type": "uint256", "internalType": "UD60x18" },
{ "name": "expiration", "type": "uint40", "internalType": "uint40" },
{ "name": "granularity", "type": "uint40", "internalType": "uint40" },
{ "name": "initialAdmin", "type": "address", "internalType": "address" },
{ "name": "ipfsCID", "type": "string", "internalType": "string" },
{ "name": "lockup", "type": "address", "internalType": "contract ISablierLockup" },
{ "name": "merkleRoot", "type": "bytes32", "internalType": "bytes32" },
{ "name": "shape", "type": "string", "internalType": "string" },
{ "name": "startUnlockPercentage", "type": "uint256", "internalType": "UD60x18" },
{ "name": "token", "type": "address", "internalType": "contract IERC20" },
{ "name": "totalDuration", "type": "uint40", "internalType": "uint40" },
{ "name": "transferable", "type": "bool", "internalType": "bool" },
{ "name": "vestingStartTime", "type": "uint40", "internalType": "uint40" }
]
},
{ "name": "campaignCreator", "type": "address", "internalType": "address" },
{ "name": "comptroller", "type": "address", "internalType": "address" }
],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "CAMPAIGN_START_TIME",
"inputs": [],
"outputs": [{ "name": "", "type": "uint40", "internalType": "uint40" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "CLAIM_TYPE",
"inputs": [],
"outputs": [{ "name": "", "type": "uint8", "internalType": "enum ClaimType" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "COMPTROLLER",
"inputs": [],
"outputs": [{ "name": "", "type": "address", "internalType": "address" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "EXPIRATION",
"inputs": [],
"outputs": [{ "name": "", "type": "uint40", "internalType": "uint40" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "IS_SABLIER_MERKLE",
"inputs": [],
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "MERKLE_ROOT",
"inputs": [],
"outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "SABLIER_LOCKUP",
"inputs": [],
"outputs": [{ "name": "", "type": "address", "internalType": "contract ISablierLockup" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "STREAM_CANCELABLE",
"inputs": [],
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "STREAM_TRANSFERABLE",
"inputs": [],
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "TOKEN",
"inputs": [],
"outputs": [{ "name": "", "type": "address", "internalType": "contract IERC20" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "VESTING_CLIFF_DURATION",
"inputs": [],
"outputs": [{ "name": "", "type": "uint40", "internalType": "uint40" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "VESTING_CLIFF_UNLOCK_PERCENTAGE",
"inputs": [],
"outputs": [{ "name": "", "type": "uint256", "internalType": "UD60x18" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "VESTING_GRANULARITY",
"inputs": [],
"outputs": [{ "name": "", "type": "uint40", "internalType": "uint40" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "VESTING_START_TIME",
"inputs": [],
"outputs": [{ "name": "", "type": "uint40", "internalType": "uint40" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "VESTING_START_UNLOCK_PERCENTAGE",
"inputs": [],
"outputs": [{ "name": "", "type": "uint256", "internalType": "UD60x18" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "VESTING_TOTAL_DURATION",
"inputs": [],
"outputs": [{ "name": "", "type": "uint40", "internalType": "uint40" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "admin",
"inputs": [],
"outputs": [{ "name": "", "type": "address", "internalType": "address" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "attestor",
"inputs": [],
"outputs": [{ "name": "", "type": "address", "internalType": "address" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "calculateMinFeeWei",
"inputs": [],
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "campaignName",
"inputs": [],
"outputs": [{ "name": "", "type": "string", "internalType": "string" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "claim",
"inputs": [
{ "name": "index", "type": "uint256", "internalType": "uint256" },
{ "name": "recipient", "type": "address", "internalType": "address" },
{ "name": "amount", "type": "uint128", "internalType": "uint128" },
{ "name": "merkleProof", "type": "bytes32[]", "internalType": "bytes32[]" }
],
"outputs": [],
"stateMutability": "payable"
},
{
"type": "function",
"name": "claimTo",
"inputs": [
{ "name": "index", "type": "uint256", "internalType": "uint256" },
{ "name": "to", "type": "address", "internalType": "address" },
{ "name": "amount", "type": "uint128", "internalType": "uint128" },
{ "name": "merkleProof", "type": "bytes32[]", "internalType": "bytes32[]" }
],
"outputs": [],
"stateMutability": "payable"
},
{
"type": "function",
"name": "claimViaAttestation",
"inputs": [
{ "name": "index", "type": "uint256", "internalType": "uint256" },
{ "name": "to", "type": "address", "internalType": "address" },
{ "name": "amount", "type": "uint128", "internalType": "uint128" },
{ "name": "expireAt", "type": "uint40", "internalType": "uint40" },
{ "name": "merkleProof", "type": "bytes32[]", "internalType": "bytes32[]" },
{ "name": "attestation", "type": "bytes", "internalType": "bytes" }
],
"outputs": [],
"stateMutability": "payable"
},
{
"type": "function",
"name": "claimViaSig",
"inputs": [
{ "name": "index", "type": "uint256", "internalType": "uint256" },
{ "name": "recipient", "type": "address", "internalType": "address" },
{ "name": "to", "type": "address", "internalType": "address" },
{ "name": "amount", "type": "uint128", "internalType": "uint128" },
{ "name": "validFrom", "type": "uint40", "internalType": "uint40" },
{ "name": "merkleProof", "type": "bytes32[]", "internalType": "bytes32[]" },
{ "name": "signature", "type": "bytes", "internalType": "bytes" }
],
"outputs": [],
"stateMutability": "payable"
},
{
"type": "function",
"name": "claimedStreams",
"inputs": [{ "name": "recipient", "type": "address", "internalType": "address" }],
"outputs": [{ "name": "", "type": "uint256[]", "internalType": "uint256[]" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "clawback",
"inputs": [
{ "name": "to", "type": "address", "internalType": "address" },
{ "name": "amount", "type": "uint128", "internalType": "uint128" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "domainSeparator",
"inputs": [],
"outputs": [{ "name": "", "type": "bytes32", "internalType": "bytes32" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "firstClaimTime",
"inputs": [],
"outputs": [{ "name": "", "type": "uint40", "internalType": "uint40" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "hasClaimed",
"inputs": [{ "name": "index", "type": "uint256", "internalType": "uint256" }],
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "hasExpired",
"inputs": [],
"outputs": [{ "name": "", "type": "bool", "internalType": "bool" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "ipfsCID",
"inputs": [],
"outputs": [{ "name": "", "type": "string", "internalType": "string" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "lowerMinFeeUSD",
"inputs": [{ "name": "newMinFeeUSD", "type": "uint256", "internalType": "uint256" }],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "minFeeUSD",
"inputs": [],
"outputs": [{ "name": "", "type": "uint256", "internalType": "uint256" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "setAttestor",
"inputs": [{ "name": "newAttestor", "type": "address", "internalType": "address" }],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "sponsor",
"inputs": [
{ "name": "token", "type": "address", "internalType": "contract IERC20" },
{ "name": "amount", "type": "uint128", "internalType": "uint128" },
{ "name": "biller", "type": "address", "internalType": "address" }
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "streamShape",
"inputs": [],
"outputs": [{ "name": "", "type": "string", "internalType": "string" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "transferAdmin",
"inputs": [{ "name": "newAdmin", "type": "address", "internalType": "address" }],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "event",
"name": "ClaimLLWithTransfer",
"inputs": [
{ "name": "index", "type": "uint256", "indexed": false, "internalType": "uint256" },
{ "name": "recipient", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "amount", "type": "uint128", "indexed": false, "internalType": "uint128" },
{ "name": "to", "type": "address", "indexed": false, "internalType": "address" },
{ "name": "viaSig", "type": "bool", "indexed": false, "internalType": "bool" }
],
"anonymous": false
},
{
"type": "event",
"name": "ClaimLLWithVesting",
"inputs": [
{ "name": "index", "type": "uint256", "indexed": false, "internalType": "uint256" },
{ "name": "recipient", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "amount", "type": "uint128", "indexed": false, "internalType": "uint128" },
{ "name": "streamId", "type": "uint256", "indexed": true, "internalType": "uint256" },
{ "name": "to", "type": "address", "indexed": false, "internalType": "address" },
{ "name": "viaSig", "type": "bool", "indexed": false, "internalType": "bool" }
],
"anonymous": false
},
{
"type": "event",
"name": "Clawback",
"inputs": [
{ "name": "admin", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "to", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "amount", "type": "uint128", "indexed": false, "internalType": "uint128" }
],
"anonymous": false
},
{
"type": "event",
"name": "LowerMinFeeUSD",
"inputs": [
{ "name": "comptroller", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "newMinFeeUSD", "type": "uint256", "indexed": false, "internalType": "uint256" },
{ "name": "previousMinFeeUSD", "type": "uint256", "indexed": false, "internalType": "uint256" }
],
"anonymous": false
},
{
"type": "event",
"name": "SetAttestor",
"inputs": [
{ "name": "caller", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "previousAttestor", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "newAttestor", "type": "address", "indexed": true, "internalType": "address" }
],
"anonymous": false
},
{
"type": "event",
"name": "Sponsor",
"inputs": [
{ "name": "caller", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "token", "type": "address", "indexed": true, "internalType": "contract IERC20" },
{ "name": "amount", "type": "uint128", "indexed": false, "internalType": "uint128" },
{ "name": "biller", "type": "address", "indexed": true, "internalType": "address" }
],
"anonymous": false
},
{
"type": "event",
"name": "TransferAdmin",
"inputs": [
{ "name": "oldAdmin", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "newAdmin", "type": "address", "indexed": true, "internalType": "address" }
],
"anonymous": false
},
{
"type": "error",
"name": "CallerNotAdmin",
"inputs": [
{ "name": "admin", "type": "address", "internalType": "address" },
{ "name": "caller", "type": "address", "internalType": "address" }
]
},
{
"type": "error",
"name": "PRBMath_MulDiv18_Overflow",
"inputs": [
{ "name": "x", "type": "uint256", "internalType": "uint256" },
{ "name": "y", "type": "uint256", "internalType": "uint256" }
]
},
{
"type": "error",
"name": "PRBMath_UD60x18_IntoUint128_Overflow",
"inputs": [{ "name": "x", "type": "uint256", "internalType": "UD60x18" }]
},
{
"type": "error",
"name": "SablierMerkleBase_CallerNotComptroller",
"inputs": [
{ "name": "comptroller", "type": "address", "internalType": "address" },
{ "name": "caller", "type": "address", "internalType": "address" }
]
},
{
"type": "error",
"name": "SablierMerkleBase_CampaignExpired",
"inputs": [
{ "name": "blockTimestamp", "type": "uint256", "internalType": "uint256" },
{ "name": "expiration", "type": "uint40", "internalType": "uint40" }
]
},
{
"type": "error",
"name": "SablierMerkleBase_CampaignNotStarted",
"inputs": [
{ "name": "blockTimestamp", "type": "uint256", "internalType": "uint256" },
{ "name": "campaignStartTime", "type": "uint40", "internalType": "uint40" }
]
},
{
"type": "error",
"name": "SablierMerkleBase_ClawbackNotAllowed",
"inputs": [
{ "name": "blockTimestamp", "type": "uint256", "internalType": "uint256" },
{ "name": "expiration", "type": "uint40", "internalType": "uint40" },
{ "name": "firstClaimTime", "type": "uint40", "internalType": "uint40" }
]
},
{
"type": "error",
"name": "SablierMerkleBase_FeeTransferFailed",
"inputs": [
{ "name": "feeRecipient", "type": "address", "internalType": "address" },
{ "name": "feeAmount", "type": "uint256", "internalType": "uint256" }
]
},
{
"type": "error",
"name": "SablierMerkleBase_IndexClaimed",
"inputs": [{ "name": "index", "type": "uint256", "internalType": "uint256" }]
},
{
"type": "error",
"name": "SablierMerkleBase_InsufficientFeePayment",
"inputs": [
{ "name": "feePaid", "type": "uint256", "internalType": "uint256" },
{ "name": "minFeeWei", "type": "uint256", "internalType": "uint256" }
]
},
{ "type": "error", "name": "SablierMerkleBase_InvalidProof", "inputs": [] },
{
"type": "error",
"name": "SablierMerkleBase_NewMinFeeUSDNotLower",
"inputs": [
{ "name": "currentMinFeeUSD", "type": "uint256", "internalType": "uint256" },
{ "name": "newMinFeeUSD", "type": "uint256", "internalType": "uint256" }
]
},
{ "type": "error", "name": "SablierMerkleBase_SponsorAmountZero", "inputs": [] },
{ "type": "error", "name": "SablierMerkleBase_ToZeroAddress", "inputs": [] },
{
"type": "error",
"name": "SablierMerkleBase_UnsupportedClaimType",
"inputs": [
{ "name": "claimTypeRequired", "type": "uint8", "internalType": "enum ClaimType" },
{ "name": "claimTypeSupported", "type": "uint8", "internalType": "enum ClaimType" }
]
},
{
"type": "error",
"name": "SablierMerkleSignature_AttestationExpired",
"inputs": [
{ "name": "expireAt", "type": "uint256", "internalType": "uint256" },
{ "name": "blockTimestamp", "type": "uint256", "internalType": "uint256" }
]
},
{ "type": "error", "name": "SablierMerkleSignature_AttestorNotSet", "inputs": [] },
{
"type": "error",
"name": "SablierMerkleSignature_CallerNotAuthorized",
"inputs": [
{ "name": "caller", "type": "address", "internalType": "address" },
{ "name": "campaignAdmin", "type": "address", "internalType": "address" },
{ "name": "comptroller", "type": "address", "internalType": "address" }
]
},
{ "type": "error", "name": "SablierMerkleSignature_InvalidSignature", "inputs": [] },
{
"type": "error",
"name": "SablierMerkleSignature_SignatureNotYetValid",
"inputs": [
{ "name": "validFrom", "type": "uint40", "internalType": "uint40" },
{ "name": "blockTimestamp", "type": "uint40", "internalType": "uint40" }
]
},
{
"type": "error",
"name": "SafeERC20FailedOperation",
"inputs": [{ "name": "token", "type": "address", "internalType": "address" }]
}
],
"bytecode": {
"object": "0x6102a0604052346109bf57613c63803803809161001e826102a0610bb3565b6102a0396102a00160606102a08203126109bf576102a0516001600160401b0381116109bf57610240816102a0018303126109bf576040519161024083016001600160401b03811184821017610981576040526102a08201516001600160401b0381116109bf578161009591846102a00101610bd6565b83526100a46102c08301610c43565b60208401526100b66102e08301610c55565b604084015261030082015160038110156109bf5760608401526100dc6103208301610c43565b608084015261034082015160a08401526100f96103608301610c43565b60c084015261010b6103808301610c43565b60e084015261011d6103a08301610c62565b6101008401526103c08201516001600160401b0381116109bf578161014791846102a00101610bd6565b6101208401526103e08201516001600160a01b03811681036109bf57610140840152610400820151610160840152610420820151906001600160401b0382116109bf5761019991836102a00101610bd6565b61018083018190526104408201516101a08401526104608201519091906001600160a01b03811681036109bf576101c08401526101d96104808201610c43565b6101e08401526102046102206101f26104a08401610c55565b92836102008701526102a00101610c43565b6102208401526102156102c0610c62565b6102206102e0610c62565b6040858101516101408701519151936001600160a01b0390921692901515608085018581106001600160401b038211176109815760405284526020840192835260408401958652606084019415158552865164ffffffffff602089015116906060890151916003831015610b9f5760c08a01516101008b01516101208c01516101608d01516101c08e01516040519992976001600160a01b0391821696929564ffffffffff169490936101408c019392909116908b84106001600160401b038511176109815760409384526001600160a01b039081168c5260208c01988952928b0191825260608b019384529890911660808a0190815260a08a0193845260c08a0189905260e08a019788526101008a019485526101208a019586525f80546001600160a01b0319168a178155909864ffffffffff92917fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808180a3511660805251906003821015610b9f5760a09190915285516001600160a01b0390811660c052905164ffffffffff1660e05290516101005290511661012052518051906001600160401b0382116109815760015490600182811c92168015610b95575b60208310146109635781601f849311610b27575b50602090601f8311600114610ac1575f92610ab6575b50508160011b915f199060031b1c1916176001555b518051906001600160401b03821161098157600354600181811c91168015610aac575b602082101461096357601f8111610a49575b50602090601f83116001146109e15760209392915f91836109d6575b50508160011b915f199060031b1c1916176003555b51915160405163111b863560e31b81525f60048201526001600160a01b0391821660248201529283916044918391165afa9081156109cb575f91610995575b50600455466101405260405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f13cd784591b49af6fc220be53013eaddf1dc15399ca43850d206ea319aca082160408201524660608201523060808201526080815261053760a082610bb3565b51902061016052516001600160a01b0316610180525115156101a0525115156101c052518051906001600160401b03821161098157600754600181811c91168015610977575b602082101461096357601f8111610900575b50602090601f831160011461089157918064ffffffffff94926101e0945f92610886575b50508160011b915f199060031b1c1916176007555b60018060a01b03610120511660018060a01b036101805116906040519060205f81840163095ea7b360e01b81528560248601528119604486015260448552610611606486610bb3565b84519082855af15f513d8261086a575b505015610825575b50505082608082015116825260a0810151610200528260e082015116610220528261022082015116610240526101a08101516102605201511661028052604051612f949081610ccf82396080518181816109d50152611e81015260a051818181610407015281816104f101528181610dcf0152818161112f01526119ab015260c05181818161033d0152818161037d0152818161082501528181610bc801528181610ee101528181611eb701526129dc015260e0518181816107d40152818161191301528181611dd6015261222b015261010051818181610c3d0152612060015261012051818181610994015281816112c40152818161144b01528181611878015281816123a5015261255401526101405181612a6101526101605181612a870152610180518181816103d101528181611644015261274d01526101a0518181816106e401528181611488015261259101526101c051818181610792015281816114b201526125bb01526101e0518181816101cd015281816113450152612425015261020051818181610c03015281816113c701526124ba015261022051818181610920015281816116090152612712015261024051818181610b780152818161122201526122d5015261026051818181610758015281816113800152612473015261028051818181610e6101528181611260015261231b0152f35b61085d610862936040519063095ea7b360e01b602083015260248201525f604482015260448152610857606482610bb3565b82610c76565b610c76565b5f8080610629565b90915061087e5750803b15155b5f80610621565b600114610877565b015190505f806105b3565b90601f1983169160075f52815f20925f5b8181106108e857509260019285926101e09664ffffffffff9896106108d0575b505050811b016007556105c8565b01515f1960f88460031b161c191690555f80806108c2565b929360206001819287860151815501950193016108a2565b60075f527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688601f840160051c81019160208510610959575b601f0160051c01905b81811061094e575061058f565b5f8155600101610941565b9091508190610938565b634e487b7160e01b5f52602260045260245ffd5b90607f169061057d565b634e487b7160e01b5f52604160045260245ffd5b90506020813d6020116109c3575b816109b060209383610bb3565b810103126109bf57515f6104c2565b5f80fd5b3d91506109a3565b6040513d5f823e3d90fd5b015190505f8061046e565b90601f1983169160035f52815f20925f5b818110610a315750916001939185602097969410610a19575b505050811b01600355610483565b01515f1960f88460031b161c191690555f8080610a0b565b929360206001819287860151815501950193016109f2565b60035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c81019160208510610aa2575b601f0160051c01905b818110610a975750610452565b5f8155600101610a8a565b9091508190610a81565b90607f1690610440565b015190505f80610408565b60015f9081528281209350601f198516905b818110610b0f5750908460019594939210610af7575b505050811b0160015561041d565b01515f1960f88460031b161c191690555f8080610ae9565b92936020600181928786015181550195019301610ad3565b60015f529091507fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f840160051c81019160208510610b8b575b90601f859493920160051c01905b818110610b7d57506103f2565b5f8155849350600101610b70565b9091508190610b62565b91607f16916103de565b634e487b7160e01b5f52602160045260245ffd5b601f909101601f19168101906001600160401b0382119082101761098157604052565b81601f820112156109bf578051906001600160401b0382116109815760405192610c0a601f8401601f191660200185610bb3565b828452602083830101116109bf575f5b828110610c2e57505060205f918301015290565b80602080928401015182828701015201610c1a565b519064ffffffffff821682036109bf57565b519081151582036109bf57565b51906001600160a01b03821682036109bf57565b905f602091828151910182855af1156109cb575f513d610cc557506001600160a01b0381163b155b610ca55750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b60011415610c9e56fe60806040526004361015610011575f80fd5b5f3560e01c80630724fda914611a055780630854a79c1461199b5780631686c90914611817578063207435831461109757806323e533671461107c5780632481a13a14610f595780633a12a5bc14610e855780633b8d3fc514610e445780633f31ae3f14610dc057806349fc73dd14610c7d5780634e0bb8cc14610c6057806351e75e8b14610c26578063536378c314610bec5780635f82c67e14610b9c5780636c0b1e8c14610b5b5780637423649b14610b4057806375829def14610aba57806376c30a95146109f95780637ca3944d146109b857806382bfefc81461096857806382d72f7f14610944578063833e7260146109035780638ec688691461081257806390e64d13146107f8578063bb4b5734146107b7578063bf44497a1461077b578063c947611f14610741578063cada25c214610709578063cbe9e5ef146106cd578063ce5165071461068d578063e74f822d14610466578063eb8cd775146103f5578063f3ffe13f146103a5578063f5770b1f14610249578063f698da2514610227578063f851a440146101f55763fe19f495146101b0575f80fd5b346101f1575f6003193601126101f157602060405164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346101f1575f6003193601126101f157602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346101f1575f6003193601126101f1576020610241612a5e565b604051908152f35b346101f15760206003193601126101f157610262611c67565b73ffffffffffffffffffffffffffffffffffffffff5f54168033141580610365575b6102fc575073ffffffffffffffffffffffffffffffffffffffff806102a761297a565b921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000600654161760065516337fe12891ebe30d5f5d47856103adbbd7804332e875271e2903e5dd759badf2f42d5f80a4005b7f153cfb83000000000000000000000000000000000000000000000000000000005f523360045260245273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660445260645ffd5b5073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016331415610284565b346101f1575f6003193601126101f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101f1575f6003193601126101f1577f00000000000000000000000000000000000000000000000000000000000000006040516003821015610439576020918152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60c06003193601126101f15760043561047d611c8a565b604435906fffffffffffffffffffffffffffffffff821682036101f1576064359264ffffffffff84168094036101f15760843567ffffffffffffffff81116101f1576104cd903690600401611cef565b9060a43567ffffffffffffffff81116101f1576104ee903690600401611d92565b907f000000000000000000000000000000000000000000000000000000000000000060038110156104395760018103610657575073ffffffffffffffffffffffffffffffffffffffff86161561062f5761054661297a565b73ffffffffffffffffffffffffffffffffffffffff811615610607574289106105d757916105c6916105ce9594936105d59a60405160208101917f219f32e1e2ac61bb8bf48019aeabd1a04366f69f4d9a4e73b315e56deb50c04383523360408301526060820152606081526105bd608082611add565b51902090612bf9565b853385611e74565b33906122c7565b005b887f820dbdf9000000000000000000000000000000000000000000000000000000005f526004524260245260445ffd5b7f91cce831000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f036fcd52000000000000000000000000000000000000000000000000000000005f5260045ffd5b610688907fcb0b66a3000000000000000000000000000000000000000000000000000000005f526001600452611dc0565b60445ffd5b346101f15760206003193601126101f15760206106c360043560ff6001918060081c5f526005602052161b60405f205416151590565b6040519015158152f35b346101f1575f6003193601126101f15760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346101f1575f6003193601126101f157602061072361297a565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101f1575f6003193601126101f15760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101f1575f6003193601126101f15760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346101f1575f6003193601126101f157602060405164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101f1575f6003193601126101f15760206106c3611dce565b346101f15760206003193601126101f1577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166004353382036108d357600454808210156108a557816040917fcafa56d109bc30839f1bad76f9d17abcbd6c936490d4ec0fbc6d331bf89f92af9360045582519182526020820152a2005b7f173c9c82000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b507fead08252000000000000000000000000000000000000000000000000000000005f526004523360245260445ffd5b346101f1575f6003193601126101f157602060405164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101f1575f6003193601126101f157602064ffffffffff60025416604051908152f35b346101f1575f6003193601126101f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101f1575f6003193601126101f157602060405164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101f15760206003193601126101f15773ffffffffffffffffffffffffffffffffffffffff610a27611c67565b165f52600860205260405f20604051806020835491828152019081935f5260205f20905f5b818110610aa45750505081610a62910382611add565b604051918291602083019060208452518091526040830191905f5b818110610a8b575050500390f35b8251845285945060209384019390920191600101610a7d565b8254845260209093019260019283019201610a4c565b346101f15760206003193601126101f15773ffffffffffffffffffffffffffffffffffffffff610ae8611c67565b610af06128cc565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f55337fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf805f80a3005b346101f1575f6003193601126101f157602060405160018152f35b346101f1575f6003193601126101f157602060405164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101f1575f6003193601126101f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101f1575f6003193601126101f15760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101f1575f6003193601126101f15760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101f1575f6003193601126101f1576020600454604051908152f35b346101f1575f6003193601126101f1576040515f6003548060011c90600181168015610db6575b602083108114610d8957828552908115610d475750600114610ce9575b610ce583610cd181850382611add565b604051918291602083526020830190611c0a565b0390f35b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b808210610d2d57509091508101602001610cd1610cc1565b919260018160209254838588010152019101909291610d15565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b84019091019150610cd19050610cc1565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691610ca4565b610dc936611d20565b909291927f000000000000000000000000000000000000000000000000000000000000000060038110156104395780610e14575093610e0f83926105d596868585611e74565b6122c7565b610688907fcb0b66a3000000000000000000000000000000000000000000000000000000005f525f600452611dc0565b346101f1575f6003193601126101f157602060405164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101f1575f6003193601126101f157600454604051907fb0fa59e8000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610f4e575f90610f1b575b602090604051908152f35b506020813d602011610f46575b81610f3560209383611add565b810103126101f15760209051610f10565b3d9150610f28565b6040513d5f823e3d90fd5b346101f15760606003193601126101f15760043573ffffffffffffffffffffffffffffffffffffffff81168082036101f157610f93611cd0565b9173ffffffffffffffffffffffffffffffffffffffff610fb1611cad565b1692831561062f576fffffffffffffffffffffffffffffffff169081156110545761102690604051907f23b872dd00000000000000000000000000000000000000000000000000000000602083015233602483015285604483015283606483015260648252611021608483611add565b612b72565b6040519081527f5c3fcf40f5e26ff8e74068a6d3b372d00de14949e859fa20fb3616b2c7128b9b60203392a4005b7f642ef277000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101f1575f6003193601126101f157610ce5610cd1611b1e565b60e06003193601126101f1576004356110ae611c8a565b6110b6611cad565b91606435906fffffffffffffffffffffffffffffffff82168083036101f15760843564ffffffffff81168091036101f15760a43567ffffffffffffffff81116101f157611107903690600401611cef565b60c49291923567ffffffffffffffff81116101f15761112a903690600401611d92565b9390977f000000000000000000000000000000000000000000000000000000000000000060038110156104395780610e14575073ffffffffffffffffffffffffffffffffffffffff8a1694851561062f576111f9906040519a8b8a604060208301927fb0f12a3a6931229a836eaab08aeb1ebe2ddebad3bfd83f30d39f6c4a3b0f4f818452015273ffffffffffffffffffffffffffffffffffffffff85169c8d60608201528960808201528a60a08201528860c082015260c081526111f060e082611add565b51902084612bf9565b64ffffffffff4216938481116117e757509087611217939288611e74565b61121f612282565b907f000000000000000000000000000000000000000000000000000000000000000064ffffffffff16806117df575081525b64ffffffffff611285818351167f0000000000000000000000000000000000000000000000000000000000000000906122ab565b1660208201819052421061133d5750506001856112e8611338937fb0e61d06868c2b844ea5ce4c42d43866e18f6d8131ca2e2ce1af2ccc10e8d0ad97987f000000000000000000000000000000000000000000000000000000000000000061291d565b604051948594859273ffffffffffffffffffffffffffffffffffffffff906fffffffffffffffffffffffffffffffff60609497969397608087019887521660208601521660408401521515910152565b0390a2005b90959392915f7f000000000000000000000000000000000000000000000000000000000000000064ffffffffff81166117c6575b5061137a612282565b916113a57f000000000000000000000000000000000000000000000000000000000000000082612ca4565b6113ae90612b1b565b6fffffffffffffffffffffffffffffffff1683526113ec7f000000000000000000000000000000000000000000000000000000000000000082612ca4565b6113f590612b1b565b9060208401916fffffffffffffffffffffffffffffffff1682525f5473ffffffffffffffffffffffffffffffffffffffff16946040519561143587611ac0565b8652602086019a8b5260408601918252606086017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152608087017f00000000000000000000000000000000000000000000000000000000000000001515815260a08801917f00000000000000000000000000000000000000000000000000000000000000001515835260c089019384526114e4611b1e565b9460e08a019586526040519e8f9a7f253c6162000000000000000000000000000000000000000000000000000000008c5260048c0160a090525173ffffffffffffffffffffffffffffffffffffffff1660a48c01525173ffffffffffffffffffffffffffffffffffffffff1660c48b0152516fffffffffffffffffffffffffffffffff1660e48a01525173ffffffffffffffffffffffffffffffffffffffff1661010489015251151561012488015251151561014487015251805164ffffffffff166101648701526020015164ffffffffff16610184860152516101a4850161012090526101c485016115d691611c0a565b92516fffffffffffffffffffffffffffffffff166024850152516fffffffffffffffffffffffffffffffff1660448401527f000000000000000000000000000000000000000000000000000000000000000064ffffffffff16606484015264ffffffffff16608483015203857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1691815a6020945f91f1948515610f4e575f95611792575b50835f52600860205260405f208054680100000000000000008110156117655760018101808355811015611738575f91825260209182902001869055604080519283526fffffffffffffffffffffffffffffffff939093169082015273ffffffffffffffffffffffffffffffffffffffff9290921690820152600160608201527f6edacaef45d4eeb1d0fb82b2a0bbac8709e930057f116753d65da770427aad4690608090a3005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9094506020813d6020116117be575b816117ae60209383611add565b810103126101f157519385611690565b3d91506117a1565b6117d9915064ffffffffff8451166122ab565b88611371565b825250611251565b84907f663ab84b000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b346101f15760406003193601126101f157611830611c67565b611838611cd0565b6118406128cc565b64ffffffffff600254168015158061194d575b8061193e575b6118e457506fffffffffffffffffffffffffffffffff169061189c82827f000000000000000000000000000000000000000000000000000000000000000061291d565b7f2e9d425ba8b27655048400b366d7b6a1f7180ebdb088e06bb7389704860ffe1f602073ffffffffffffffffffffffffffffffffffffffff805f5416936040519586521693a3005b7fe2e40a0c000000000000000000000000000000000000000000000000000000005f524260045264ffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660245260445260645ffd5b50611947611dce565b15611859565b5062093a80810164ffffffffff811161196e5764ffffffffff164211611853565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6119a436611d20565b93909291927f000000000000000000000000000000000000000000000000000000000000000060038110156104395780610e14575073ffffffffffffffffffffffffffffffffffffffff83161561062f576105d5946105ce91853385611e74565b346101f1575f6003193601126101f1576040515f6001548060011c90600181168015611ab6575b602083108114610d8957828552908115610d475750600114611a5857610ce583610cd181850382611add565b60015f9081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b808210611a9c57509091508101602001610cd1610cc1565b919260018160209254838588010152019101909291611a84565b91607f1691611a2c565b610100810190811067ffffffffffffffff82111761176557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761176557604052565b604051905f6007548060011c9160018216918215611c00575b602084108314610d89578386528592908115611bc35750600114611b64575b611b6292500383611add565b565b5060075f90815290917fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6885b818310611ba7575050906020611b6292820101611b56565b6020919350806001915483858901015201910190918492611b8f565b60209250611b629491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101611b56565b92607f1692611b37565b91908251928382525f5b848110611c525750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f845f6020809697860101520116010190565b80602080928401015182828601015201611c14565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101f157565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101f157565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101f157565b602435906fffffffffffffffffffffffffffffffff821682036101f157565b9181601f840112156101f15782359167ffffffffffffffff83116101f1576020808501948460051b0101116101f157565b9060806003198301126101f1576004359160243573ffffffffffffffffffffffffffffffffffffffff811681036101f157916044356fffffffffffffffffffffffffffffffff811681036101f157916064359067ffffffffffffffff82116101f157611d8e91600401611cef565b9091565b9181601f840112156101f15782359167ffffffffffffffff83116101f157602083818601950101116101f157565b600381101561043957602452565b64ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015159081611e03575090565b905042101590565b67ffffffffffffffff811161176557601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b3d15611e6f573d90611e5682611e0b565b91611e646040519384611add565b82523d5f602084013e565b606090565b939491909264ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000164281116122535750611eb1611dce565b6121fc577f00000000000000000000000000000000000000000000000000000000000000009373ffffffffffffffffffffffffffffffffffffffff851692600454604051907fb0fa59e80000000000000000000000000000000000000000000000000000000082526004820152602081602481885afa908115610f4e575f916121ca575b5080341061219b5750611f5f8760ff6001918060081c5f526005602052161b60405f205416151590565b61216f576fffffffffffffffffffffffffffffffff6040519173ffffffffffffffffffffffffffffffffffffffff60208401948a865216604084015216606082015260608152611fb0608082611add565b5190206040516020810191825260208152611fcc604082611add565b5190209067ffffffffffffffff8711611765578660051b60405197611ff4602083018a611add565b885260208801908201913683116101f157905b82821061215f57505050925f935b86518510156120575760208560051b88010151908181105f14612046575f52602052600160405f205b940193612015565b905f52602052600160405f2061203e565b919492955092507f0000000000000000000000000000000000000000000000000000000000000000036121375760025464ffffffffff811615612103575b508060081c5f526005602052600160ff60405f2092161b8154179055346120ba575050565b5f8080809334905af16120cb611e45565b50156120d45750565b7fe57d366c000000000000000000000000000000000000000000000000000000005f526004523460245260445ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff16176002555f612095565b7fb4f06787000000000000000000000000000000000000000000000000000000005f5260045ffd5b8135815260209182019101612007565b867f02bf1aba000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fa164c6b4000000000000000000000000000000000000000000000000000000005f523460045260245260445ffd5b90506020813d6020116121f4575b816121e560209383611add565b810103126101f157515f611f35565b3d91506121d8565b7fdf4bae05000000000000000000000000000000000000000000000000000000005f524260045264ffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660245260445ffd5b7f14659648000000000000000000000000000000000000000000000000000000005f524260045260245260445ffd5b604051906040820182811067ffffffffffffffff821117611765576040525f6020838281520152565b9064ffffffffff8091169116019064ffffffffff821161196e57565b929190916122d3612282565b7f000000000000000000000000000000000000000000000000000000000000000064ffffffffff16806128c5575064ffffffffff421681525b64ffffffffff612340818351167f0000000000000000000000000000000000000000000000000000000000000000906122ab565b1660208201819052421061242057509161241b5f73ffffffffffffffffffffffffffffffffffffffff93856123c96fffffffffffffffffffffffffffffffff7fb0e61d06868c2b844ea5ce4c42d43866e18f6d8131ca2e2ce1af2ccc10e8d0ad9816837f000000000000000000000000000000000000000000000000000000000000000061291d565b6040519586951697859273ffffffffffffffffffffffffffffffffffffffff906fffffffffffffffffffffffffffffffff60609497969397608087019887521660208601521660408401521515910152565b0390a2565b93925f7f000000000000000000000000000000000000000000000000000000000000000064ffffffffff81166128ac575b5061245a612282565b6fffffffffffffffffffffffffffffffff8416916124987f000000000000000000000000000000000000000000000000000000000000000084612ca4565b6124a190612b1b565b6fffffffffffffffffffffffffffffffff1682526124df7f000000000000000000000000000000000000000000000000000000000000000084612ca4565b6124e890612b1b565b60208301906fffffffffffffffffffffffffffffffff1681525f5473ffffffffffffffffffffffffffffffffffffffff16936040519461252786611ac0565b8552602085019973ffffffffffffffffffffffffffffffffffffffff89168b5260408601918252606086017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152608087017f00000000000000000000000000000000000000000000000000000000000000001515815260a08801917f00000000000000000000000000000000000000000000000000000000000000001515835260c089019384526125ed611b1e565b9460e08a019586526040519e8f9a7f253c6162000000000000000000000000000000000000000000000000000000008c5260048c0160a090525173ffffffffffffffffffffffffffffffffffffffff1660a48c01525173ffffffffffffffffffffffffffffffffffffffff1660c48b0152516fffffffffffffffffffffffffffffffff1660e48a01525173ffffffffffffffffffffffffffffffffffffffff1661010489015251151561012488015251151561014487015251805164ffffffffff166101648701526020015164ffffffffff16610184860152516101a4850161012090526101c485016126df91611c0a565b92516fffffffffffffffffffffffffffffffff166024850152516fffffffffffffffffffffffffffffffff1660448401527f000000000000000000000000000000000000000000000000000000000000000064ffffffffff16606484015264ffffffffff16608483015203857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1691815a6020945f91f1948515610f4e575f95612864575b5073ffffffffffffffffffffffffffffffffffffffff1692835f52600860205260405f208054680100000000000000008110156117655760018101808355811015611738577f6edacaef45d4eeb1d0fb82b2a0bbac8709e930057f116753d65da770427aad4694875f9261285f948452602084200155604051948594859273ffffffffffffffffffffffffffffffffffffffff906fffffffffffffffffffffffffffffffff60609497969397608087019887521660208601521660408401521515910152565b0390a3565b9094506020813d6020116128a4575b8161288060209383611add565b810103126101f157519373ffffffffffffffffffffffffffffffffffffffff612799565b3d9150612873565b6128bf915064ffffffffff8751166122ab565b5f612451565b815261230c565b73ffffffffffffffffffffffffffffffffffffffff5f54163381036128ee5750565b7fc6cce6a4000000000000000000000000000000000000000000000000000000005f526004523360245260445ffd5b611b629273ffffffffffffffffffffffffffffffffffffffff604051937fa9059cbb000000000000000000000000000000000000000000000000000000006020860152166024840152604483015260448252611021606483611add565b73ffffffffffffffffffffffffffffffffffffffff6006541680612a5b57506040517fcada25c200000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610f4e575f91612a0f575090565b90506020813d602011612a53575b81612a2a60209383611add565b810103126101f1575173ffffffffffffffffffffffffffffffffffffffff811681036101f15790565b3d9150612a1d565b90565b467f000000000000000000000000000000000000000000000000000000000000000003612aa9577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f13cd784591b49af6fc220be53013eaddf1dc15399ca43850d206ea319aca0821604082015246606082015230608082015260808152612b1560a082611add565b51902090565b6fffffffffffffffffffffffffffffffff8111612b47576fffffffffffffffffffffffffffffffff1690565b7f4916adce000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b905f602091828151910182855af115610f4e575f513d612bf0575073ffffffffffffffffffffffffffffffffffffffff81163b155b612bae5750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415612ba7565b90604290939293612c08612a5e565b90604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090612c4583611e0b565b92612c536040519485611add565b80845236818601116101f1576020815f92612c75978388013785010152612d71565b15612c7c57565b7f45aa7fec000000000000000000000000000000000000000000000000000000005f5260045ffd5b9190917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83820983820291828083109203918083039214612d6057670de0b6b3a7640000821015612d30577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106699394670de0b6b3a7640000910990828211900360ee1b910360121c170290565b84907f5173648d000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b5050670de0b6b3a764000090049150565b9190823b612db95790612d8391612e95565b50600481101561043957159182612d9957505090565b73ffffffffffffffffffffffffffffffffffffffff919250811691161490565b915f92612e08612e34859460405192839160208301957f1626ba7e0000000000000000000000000000000000000000000000000000000087526024840152604060448401526064830190611c0a565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611add565b51915afa612e40611e45565b81612e87575b81612e4f575090565b90506020818051810103126101f157602001517f1626ba7e000000000000000000000000000000000000000000000000000000001490565b905060208151101590612e46565b8151919060418303612ec557612ebe9250602082015190606060408401519301515f1a90612ecf565b9192909190565b50505f9160029190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20