@sablier/airdrops
Version:
EVM smart contracts of the Sablier Airdrops protocol
217 lines • 194 kB
JSON
{
"abi": [
{
"type": "constructor",
"inputs": [{ "name": "initialComptroller", "type": "address", "internalType": "address" }],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "comptroller",
"inputs": [],
"outputs": [{ "name": "", "type": "address", "internalType": "contract ISablierComptroller" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "computeMerkleLL",
"inputs": [
{ "name": "campaignCreator", "type": "address", "internalType": "address" },
{
"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" }
]
}
],
"outputs": [{ "name": "merkleLL", "type": "address", "internalType": "address" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "createMerkleLL",
"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": "aggregateAmount", "type": "uint256", "internalType": "uint256" },
{ "name": "recipientCount", "type": "uint256", "internalType": "uint256" }
],
"outputs": [{ "name": "merkleLL", "type": "address", "internalType": "contract ISablierMerkleLL" }],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "nativeToken",
"inputs": [],
"outputs": [{ "name": "", "type": "address", "internalType": "address" }],
"stateMutability": "view"
},
{
"type": "function",
"name": "setComptroller",
"inputs": [{ "name": "newComptroller", "type": "address", "internalType": "contract ISablierComptroller" }],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "setNativeToken",
"inputs": [{ "name": "newNativeToken", "type": "address", "internalType": "address" }],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "function",
"name": "transferFeesToComptroller",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "event",
"name": "CreateMerkleLL",
"inputs": [
{ "name": "merkleLL", "type": "address", "indexed": true, "internalType": "contract ISablierMerkleLL" },
{
"name": "campaignParams",
"type": "tuple",
"indexed": false,
"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": "aggregateAmount", "type": "uint256", "indexed": false, "internalType": "uint256" },
{ "name": "recipientCount", "type": "uint256", "indexed": false, "internalType": "uint256" },
{ "name": "comptroller", "type": "address", "indexed": false, "internalType": "address" },
{ "name": "minFeeUSD", "type": "uint256", "indexed": false, "internalType": "uint256" }
],
"anonymous": false
},
{
"type": "event",
"name": "SetComptroller",
"inputs": [
{
"name": "oldComptroller",
"type": "address",
"indexed": false,
"internalType": "contract ISablierComptroller"
},
{
"name": "newComptroller",
"type": "address",
"indexed": false,
"internalType": "contract ISablierComptroller"
}
],
"anonymous": false
},
{
"type": "event",
"name": "SetNativeToken",
"inputs": [
{ "name": "comptroller", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "nativeToken", "type": "address", "indexed": false, "internalType": "address" }
],
"anonymous": false
},
{
"type": "event",
"name": "TransferFeesToComptroller",
"inputs": [
{ "name": "comptroller", "type": "address", "indexed": true, "internalType": "address" },
{ "name": "feeAmount", "type": "uint256", "indexed": false, "internalType": "uint256" }
],
"anonymous": false
},
{
"type": "error",
"name": "Comptrollerable_CallerNotComptroller",
"inputs": [
{ "name": "comptroller", "type": "address", "internalType": "address" },
{ "name": "caller", "type": "address", "internalType": "address" }
]
},
{
"type": "error",
"name": "Comptrollerable_UnsupportedInterfaceId",
"inputs": [
{ "name": "previousComptroller", "type": "address", "internalType": "address" },
{ "name": "newComptroller", "type": "address", "internalType": "address" },
{ "name": "minimalInterfaceId", "type": "bytes4", "internalType": "bytes4" }
]
},
{
"type": "error",
"name": "SablierFactoryMerkleBase_ForbidNativeToken",
"inputs": [{ "name": "nativeToken", "type": "address", "internalType": "address" }]
},
{
"type": "error",
"name": "SablierFactoryMerkleBase_NativeTokenAlreadySet",
"inputs": [{ "name": "nativeToken", "type": "address", "internalType": "address" }]
},
{ "type": "error", "name": "SablierFactoryMerkleBase_NativeTokenZeroAddress", "inputs": [] }
],
"bytecode": {
"object": "0x6080806040523461011a57602081614fea803803809161001f8285610131565b83398101031261011a57516001600160a01b0381169081900361011a576040516301ffc9a760e01b8152630654439160e41b6004820152602081602481855afa908115610126575f916100e7575b50156100c6575f80546001600160a01b031916821781556040805191825260208201929092527ff45d882a72fce9d8d7a7e2e196a338d4d9d4057510b4b9ddf91a7066104d2eaf9190a1604051614e8190816101698239f35b6364ca3de160e11b5f525f600452602452630654439160e41b60445260645ffd5b90506020813d60201161011e575b8161010260209383610131565b8101031261011a5751801515810361011a575f61006d565b5f80fd5b3d91506100f5565b6040513d5f823e3d90fd5b601f909101601f19168101906001600160401b0382119082101761015457604052565b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c9081635fe3b56714610b4f575080636da1e10214610a2b57806378f82ce7146109835780637b4573c61461055b5780638bad38dd14610310578063cb787fd4146100be5763e1758bd814610069575f80fd5b346100ba575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ba57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b5f80fd5b346100ba5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ba576100f5610b9c565b60243567ffffffffffffffff81116100ba5780600401906102407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126100ba576101c401359073ffffffffffffffffffffffffffffffffffffffff82168092036100ba5760209261017e73ffffffffffffffffffffffffffffffffffffffff93611197565b6102866102b4845f54168660405181808201526101ce816101a2604082018a610f85565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610be0565b6040516101e4816101a285820194878b87610ea8565b51902095613c639561025f604051946101ff858a0187610be0565b888652848601986111e98a396040519283918c61022788850197606089526080860190610f85565b921660408401526060830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610be0565b604051958694610277858701998a9251928391610cc0565b85019151809385840190610cc0565b0101037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610be0565b51902060405190848201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b60218401526035830152605582015260558152610304607582610be0565b51902016604051908152f35b346100ba5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ba5760043573ffffffffffffffffffffffffffffffffffffffff81168091036100ba57610368611146565b5f549073ffffffffffffffffffffffffffffffffffffffff8216916040517fc34df33e000000000000000000000000000000000000000000000000000000008152602081600481875afa9081156104f5575f91610500575b507fffffffff00000000000000000000000000000000000000000000000000000000604051917f01ffc9a70000000000000000000000000000000000000000000000000000000083521690816004820152602081602481875afa9081156104f5575f916104ba575b5015610487577ff45d882a72fce9d8d7a7e2e196a338d4d9d4057510b4b9ddf91a7066104d2eaf60408585807fffffffffffffffffffffffff00000000000000000000000000000000000000008716175f5582519182526020820152a1005b82847fc9947bc2000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b90506020813d6020116104ed575b816104d560209383610be0565b810103126100ba575180151581036100ba5785610428565b3d91506104c8565b6040513d5f823e3d90fd5b90506020813d602011610553575b8161051b60209383610be0565b810103126100ba57517fffffffff00000000000000000000000000000000000000000000000000000000811681036100ba57846103c0565b3d915061050e565b346100ba5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ba5760043567ffffffffffffffff81116100ba576102407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126100ba5760405190610240820182811067ffffffffffffffff82111761094a57604052806004013567ffffffffffffffff81116100ba5761060c9060043691840101610c5b565b825261061a60248201610ca1565b602083015261062b60448201610cb3565b6040830152606481013560038110156100ba57606083015261064f60848201610ca1565b608083015260a481013560a083015261066a60c48201610ca1565b60c083015261067b60e48201610ca1565b9060e083019182526106906101048201610bbf565b61010084015261012481013567ffffffffffffffff81116100ba576106bb9060043691840101610c5b565b6101208401526106ce6101448201610bbf565b61014084015261016481013561016084015261018481013567ffffffffffffffff81116100ba576107839161071e73ffffffffffffffffffffffffffffffffffffffff9260043691840101610c5b565b6101808601526101a48101356101a08601526107776102246107436101c48401610bbf565b92836101c08901526107586101e48201610ca1565b6101e089015261076b6102048201610cb3565b61020089015201610ca1565b61022086015216611197565b805164ffffffffff1680610977575064ffffffffff60015b16905273ffffffffffffffffffffffffffffffffffffffff5f54166040516020808201526107d0816101a26040820186610d5e565b6040516107e7816101a26020820194863387610ea8565b5190209060405190613c63908183019083821067ffffffffffffffff83111761094a5783926111e984396060825260406108246060840188610d5e565b92336020820152015203905ff580156104f55773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff5f541691604051927f88dc31a80000000000000000000000000000000000000000000000000000000084525f6004850152336024850152602084604481845afa9384156104f5575f94610914575b506108ef83927f468ebbbcf67ff87c689a8d3a329745946d33f793200e080d9276d9e0ebdca7f49260209660405193849360a0855260a0850190610d5e565b91602435898501526044356040850152606084015260808301520390a2604051908152f35b93506020843d602011610942575b8161092f60209383610be0565b810103126100ba579251926108ef6108b0565b3d9150610922565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b64ffffffffff9061079b565b346100ba575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ba5773ffffffffffffffffffffffffffffffffffffffff5f54167f56dedb874d4fc0f70753f281fa2c25e82085163206086fe826cf834b51701f6c6020475f80808084885af1503d15610a26573d610a0681610c21565b90610a146040519283610be0565b81525f833d92013e5b604051908152a2005b610a1d565b346100ba5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ba5773ffffffffffffffffffffffffffffffffffffffff610a77610b9c565b610a7f611146565b168015610b275760015473ffffffffffffffffffffffffffffffffffffffff811680610afc57507fffffffffffffffffffffffff0000000000000000000000000000000000000000829116176001556040519081527f7b0a5ae0a2e8f0dc2ec7555098e00dd4af1418ee3fd1bcf9bb14f6990c10fa9260203392a2005b7f6d9f7c38000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f2f70e6c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100ba575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100ba5760209073ffffffffffffffffffffffffffffffffffffffff5f54168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036100ba57565b359073ffffffffffffffffffffffffffffffffffffffff821682036100ba57565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761094a57604052565b67ffffffffffffffff811161094a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f820112156100ba57803590610c7282610c21565b92610c806040519485610be0565b828452602083830101116100ba57815f926020809301838601378301015290565b359064ffffffffff821682036100ba57565b359081151582036100ba57565b5f5b838110610cd15750505f910152565b8181015183820152602001610cc2565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093610d1d81518092818752878088019101610cc0565b0116010190565b906003821015610d315752565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9061022064ffffffffff81610e54610e12610d8487516102408852610240880190610ce1565b846020890151166020880152604088015115156040880152610dae60608901516060890190610d24565b84608089015116608088015260a088015160a08801528460c08901511660c08801528460e08901511660e088015273ffffffffffffffffffffffffffffffffffffffff61010089015116610100880152610120880151878203610120890152610ce1565b73ffffffffffffffffffffffffffffffffffffffff61014088015116610140870152610160870151610160870152610180870151868203610180880152610ce1565b946101a08101516101a086015273ffffffffffffffffffffffffffffffffffffffff6101c0820151166101c0860152826101e0820151166101e0860152610200810151151561020086015201511691015290565b90602893927fffffffffffffffffffffffffffffffffffffffff000000000000000000000000809260601b16835260601b166014820152610ef28251809360208685019101610cc0565b010190565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156100ba57016020813591019167ffffffffffffffff82116100ba5781360383136100ba57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b90610fa3610f938380610ef7565b6102408452610240840191610f47565b64ffffffffff610fb560208501610ca1565b166020830152610fc760408401610cb3565b15156040830152606083013560038110156100ba5761113f6102206110d96110878295610ffe64ffffffffff9660608a0190610d24565b8561100b60808b01610ca1565b16608089015260a089013560a08901528561102860c08b01610ca1565b1660c08901528561103b60e08b01610ca1565b1660e089015273ffffffffffffffffffffffffffffffffffffffff6110636101008b01610bbf565b166101008901526110786101208a018a610ef7565b908983036101208b0152610f47565b73ffffffffffffffffffffffffffffffffffffffff6110a96101408a01610bbf565b166101408801526101608801356101608801526110ca610180890189610ef7565b908883036101808a0152610f47565b956101a08101356101a087015273ffffffffffffffffffffffffffffffffffffffff6111086101c08301610bbf565b166101c08701528361111d6101e08301610ca1565b166101e08701526111316102008201610cb3565b151561020087015201610ca1565b1691015290565b73ffffffffffffffffffffffffffffffffffffffff5f54168033036111685750565b7fa7e1519e000000000000000000000000000000000000000000000000000000005f526004523360245260445ffd5b73ffffffffffffffffffffffffffffffffffffffff806001541691169081146111bd5750565b7fb1c99895000000000000000000000000000000000000000000000000000000005f5260045260245ffdfe6102a0604052346109bf57613c63803803809161001e826102a0610bb3565b6102a0396102a00160606102a08203126109bf576102a0516001600160401b0381116109bf57610240816102a0018303126109bf576040519161024083016001600160401b03811184821017610981576040526102a08201516001600160401b0381116109bf578161009591846102a00101610bd6565b83526100a46102c08301610c43565b60208401526100b66102e08301610c55565b604084015261030082015160038110156109bf5760608401526100dc6103208301610c43565b608084015261034082015160a08401526100f96103608301610c43565b60c084015261010b6103808301610c43565b60e084015261011d6103a08301610c62565b6101008401526103c08201516001600160401b0381116109bf578161014791846102a00101610bd6565b6101208401526103e08201516001600160a01b03811681036109bf57610140840152610400820151610160840152610420820151906001600160401b0382116109bf5761019991836102a00101610bd6565b61018083018190526104408201516101a08401526104608201519091906001600160a01b03811681036109bf576101c08401526101d96104808201610c43565b6101e08401526102046102206101f26104a08401610c55565b92836102008701526102a00101610c43565b6102208401526102156102c0610c62565b6102206102e0610c62565b6040858101516101408701519151936001600160a01b0390921692901515608085018581106001600160401b038211176109815760405284526020840192835260408401958652606084019415158552865164ffffffffff602089015116906060890151916003831015610b9f5760c08a01516101008b01516101208c01516101608d01516101c08e01516040519992976001600160a01b0391821696929564ffffffffff169490936101408c019392909116908b84106001600160401b038511176109815760409384526001600160a01b039081168c5260208c01988952928b0191825260608b019384529890911660808a0190815260a08a0193845260c08a0189905260e08a019788526101008a019485526101208a019586525f80546001600160a01b0319168a178155909864ffffffffff92917fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf808180a3511660805251906003821015610b9f5760a09190915285516001600160a01b0390811660c052905164ffffffffff1660e05290516101005290511661012052518051906001600160401b0382116109815760015490600182811c92168015610b95575b60208310146109635781601f849311610b27575b50602090601f8311600114610ac1575f92610ab6575b50508160011b915f199060031b1c1916176001555b518051906001600160401b03821161098157600354600181811c91168015610aac575b602082101461096357601f8111610a49575b50602090601f83116001146109e15760209392915f91836109d6575b50508160011b915f199060031b1c1916176003555b51915160405163111b863560e31b81525f60048201526001600160a01b0391821660248201529283916044918391165afa9081156109cb575f91610995575b50600455466101405260405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f13cd784591b49af6fc220be53013eaddf1dc15399ca43850d206ea319aca082160408201524660608201523060808201526080815261053760a082610bb3565b51902061016052516001600160a01b0316610180525115156101a0525115156101c052518051906001600160401b03821161098157600754600181811c91168015610977575b602082101461096357601f8111610900575b50602090601f831160011461089157918064ffffffffff94926101e0945f92610886575b50508160011b915f199060031b1c1916176007555b60018060a01b03610120511660018060a01b036101805116906040519060205f81840163095ea7b360e01b81528560248601528119604486015260448552610611606486610bb3565b84519082855af15f513d8261086a575b505015610825575b50505082608082015116825260a0810151610200528260e082015116610220528261022082015116610240526101a08101516102605201511661028052604051612f949081610ccf82396080518181816109d50152611e81015260a051818181610407015281816104f101528181610dcf0152818161112f01526119ab015260c05181818161033d0152818161037d0152818161082501528181610bc801528181610ee101528181611eb701526129dc015260e0518181816107d40152818161191301528181611dd6015261222b015261010051818181610c3d0152612060015261012051818181610994015281816112c40152818161144b01528181611878015281816123a5015261255401526101405181612a6101526101605181612a870152610180518181816103d101528181611644015261274d01526101a0518181816106e401528181611488015261259101526101c051818181610792015281816114b201526125bb01526101e0518181816101cd015281816113450152612425015261020051818181610c03015281816113c701526124ba015261022051818181610920015281816116090152612712015261024051818181610b780152818161122201526122d5015261026051818181610758015281816113800152612473015261028051818181610e6101528181611260015261231b0152f35b61085d610862936040519063095ea7b360e01b602083015260248201525f604482015260448152610857606482610bb3565b82610c76565b610c76565b5f8080610629565b90915061087e5750803b15155b5f80610621565b600114610877565b015190505f806105b3565b90601f1983169160075f52815f20925f5b8181106108e857509260019285926101e09664ffffffffff9896106108d0575b505050811b016007556105c8565b01515f1960f88460031b161c191690555f80806108c2565b929360206001819287860151815501950193016108a2565b60075f527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c688601f840160051c81019160208510610959575b601f0160051c01905b81811061094e575061058f565b5f8155600101610941565b9091508190610938565b634e487b7160e01b5f52602260045260245ffd5b90607f169061057d565b634e487b7160e01b5f52604160045260245ffd5b90506020813d6020116109c3575b816109b060209383610bb3565b810103126109bf57515f6104c2565b5f80fd5b3d91506109a3565b6040513d5f823e3d90fd5b015190505f8061046e565b90601f1983169160035f52815f20925f5b818110610a315750916001939185602097969410610a19575b505050811b01600355610483565b01515f1960f88460031b161c191690555f8080610a0b565b929360206001819287860151815501950193016109f2565b60035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c81019160208510610aa2575b601f0160051c01905b818110610a975750610452565b5f8155600101610a8a565b9091508190610a81565b90607f1690610440565b015190505f80610408565b60015f9081528281209350601f198516905b818110610b0f5750908460019594939210610af7575b505050811b0160015561041d565b01515f1960f88460031b161c191690555f8080610ae9565b92936020600181928786015181550195019301610ad3565b60015f529091507fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f840160051c81019160208510610b8b575b90601f859493920160051c01905b818110610b7d57506103f2565b5f8155849350600101610b70565b9091508190610b62565b91607f16916103de565b634e487b7160e01b5f52602160045260245ffd5b601f909101601f19168101906001600160401b0382119082101761098157604052565b81601f820112156109bf578051906001600160401b0382116109815760405192610c0a601f8401601f191660200185610bb3565b828452602083830101116109bf575f5b828110610c2e57505060205f918301015290565b80602080928401015182828701015201610c1a565b519064ffffffffff821682036109bf57565b519081151582036109bf57565b51906001600160a01b03821682036109bf57565b905f602091828151910182855af1156109cb575f513d610cc557506001600160a01b0381163b155b610ca55750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b60011415610c9e56fe60806040526004361015610011575f80fd5b5f3560e01c80630724fda914611a055780630854a79c1461199b5780631686c90914611817578063207435831461109757806323e533671461107c5780632481a13a14610f595780633a12a5bc14610e855780633b8d3fc514610e445780633f31ae3f14610dc057806349fc73dd14610c7d5780634e0bb8cc14610c6057806351e75e8b14610c26578063536378c314610bec5780635f82c67e14610b9c5780636c0b1e8c14610b5b5780637423649b14610b4057806375829def14610aba57806376c30a95146109f95780637ca3944d146109b857806382bfefc81461096857806382d72f7f14610944578063833e7260146109035780638ec688691461081257806390e64d13146107f8578063bb4b5734146107b7578063bf44497a1461077b578063c947611f14610741578063cada25c214610709578063cbe9e5ef146106cd578063ce5165071461068d578063e74f822d14610466578063eb8cd775146103f5578063f3ffe13f146103a5578063f5770b1f14610249578063f698da2514610227578063f851a440146101f55763fe19f495146101b0575f80fd5b346101f1575f6003193601126101f157602060405164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b346101f1575f6003193601126101f157602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346101f1575f6003193601126101f1576020610241612a5e565b604051908152f35b346101f15760206003193601126101f157610262611c67565b73ffffffffffffffffffffffffffffffffffffffff5f54168033141580610365575b6102fc575073ffffffffffffffffffffffffffffffffffffffff806102a761297a565b921691827fffffffffffffffffffffffff0000000000000000000000000000000000000000600654161760065516337fe12891ebe30d5f5d47856103adbbd7804332e875271e2903e5dd759badf2f42d5f80a4005b7f153cfb83000000000000000000000000000000000000000000000000000000005f523360045260245273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660445260645ffd5b5073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016331415610284565b346101f1575f6003193601126101f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101f1575f6003193601126101f1577f00000000000000000000000000000000000000000000000000000000000000006040516003821015610439576020918152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60c06003193601126101f15760043561047d611c8a565b604435906fffffffffffffffffffffffffffffffff821682036101f1576064359264ffffffffff84168094036101f15760843567ffffffffffffffff81116101f1576104cd903690600401611cef565b9060a43567ffffffffffffffff81116101f1576104ee903690600401611d92565b907f000000000000000000000000000000000000000000000000000000000000000060038110156104395760018103610657575073ffffffffffffffffffffffffffffffffffffffff86161561062f5761054661297a565b73ffffffffffffffffffffffffffffffffffffffff811615610607574289106105d757916105c6916105ce9594936105d59a60405160208101917f219f32e1e2ac61bb8bf48019aeabd1a04366f69f4d9a4e73b315e56deb50c04383523360408301526060820152606081526105bd608082611add565b51902090612bf9565b853385611e74565b33906122c7565b005b887f820dbdf9000000000000000000000000000000000000000000000000000000005f526004524260245260445ffd5b7f91cce831000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f036fcd52000000000000000000000000000000000000000000000000000000005f5260045ffd5b610688907fcb0b66a3000000000000000000000000000000000000000000000000000000005f526001600452611dc0565b60445ffd5b346101f15760206003193601126101f15760206106c360043560ff6001918060081c5f526005602052161b60405f205416151590565b6040519015158152f35b346101f1575f6003193601126101f15760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346101f1575f6003193601126101f157602061072361297a565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346101f1575f6003193601126101f15760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101f1575f6003193601126101f15760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346101f1575f6003193601126101f157602060405164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101f1575f6003193601126101f15760206106c3611dce565b346101f15760206003193601126101f1577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166004353382036108d357600454808210156108a557816040917fcafa56d109bc30839f1bad76f9d17abcbd6c936490d4ec0fbc6d331bf89f92af9360045582519182526020820152a2005b7f173c9c82000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b507fead08252000000000000000000000000000000000000000000000000000000005f526004523360245260445ffd5b346101f1575f6003193601126101f157602060405164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101f1575f6003193601126101f157602064ffffffffff60025416604051908152f35b346101f1575f6003193601126101f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101f1575f6003193601126101f157602060405164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101f15760206003193601126101f15773ffffffffffffffffffffffffffffffffffffffff610a27611c67565b165f52600860205260405f20604051806020835491828152019081935f5260205f20905f5b818110610aa45750505081610a62910382611add565b604051918291602083019060208452518091526040830191905f5b818110610a8b575050500390f35b8251845285945060209384019390920191600101610a7d565b8254845260209093019260019283019201610a4c565b346101f15760206003193601126101f15773ffffffffffffffffffffffffffffffffffffffff610ae8611c67565b610af06128cc565b16807fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f55337fbdd36143ee09de60bdefca70680e0f71189b2ed7acee364b53917ad433fdaf805f80a3005b346101f1575f6003193601126101f157602060405160018152f35b346101f1575f6003193601126101f157602060405164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101f1575f6003193601126101f157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101f1575f6003193601126101f15760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101f1575f6003193601126101f15760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101f1575f6003193601126101f1576020600454604051908152f35b346101f1575f6003193601126101f1576040515f6003548060011c90600181168015610db6575b602083108114610d8957828552908115610d475750600114610ce9575b610ce583610cd181850382611add565b604051918291602083526020830190611c0a565b0390f35b60035f9081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b808210610d2d57509091508101602001610cd1610cc1565b919260018160209254838588010152019101909291610d15565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b84019091019150610cd19050610cc1565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691610ca4565b610dc936611d20565b909291927f000000000000000000000000000000000000000000000000000000000000000060038110156104395780610e14575093610e0f83926105d596868585611e74565b6122c7565b610688907fcb0b66a3000000000000000000000000000000000000000000000000000000005f525f600452611dc0565b346101f1575f6003193601126101f157602060405164ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101f1575f6003193601126101f157600454604051907fb0fa59e8000000000000000000000000000000000000000000000000000000008252600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610f4e575f90610f1b575b602090604051908152f35b506020813d602011610f46575b81610f3560209383611add565b810103126101f15760209051610f10565b3d9150610f28565b6040513d5f823e3d90fd5b346101f15760606003193601126101f15760043573ffffffffffffffffffffffffffffffffffffffff81168082036101f157610f93611cd0565b9173ffffffffffffffffffffffffffffffffffffffff610fb1611cad565b1692831561062f576fffffffffffffffffffffffffffffffff169081156110545761102690604051907f23b872dd00000000000000000000000000000000000000000000000000000000602083015233602483015285604483015283606483015260648252611021608483611add565b612b72565b6040519081527f5c3fcf40f5e26ff8e74068a6d3b372d00de14949e859fa20fb3616b2c7128b9b60203392a4005b7f642ef277000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101f1575f6003193601126101f157610ce5610cd1611b1e565b60e06003193601126101f1576004356110ae611c8a565b6110b6611cad565b91606435906fffffffffffffffffffffffffffffffff82168083036101f15760843564ffffffffff81168091036101f15760a43567ffffffffffffffff81116101f157611107903690600401611cef565b60c49291923567ffffffffffffffff81116101f15761112a903690600401611d92565b9390977f000000000000000000000000000000000000000000000000000000000000000060038110156104395780610e14575073ffffffffffffffffffffffffffffffffffffffff8a1694851561062f576111f9906040519a8b8a604060208301927fb0f12a3a6931229a836eaab08aeb1ebe2ddebad3bfd83f30d39f6c4a3b0f4f818452015273ffffffffffffffffffffffffffffffffffffffff85169c8d60608201528960808201528a60a08201528860c082015260c081526111f060e082611add565b51902084612bf9565b64ffffffffff4216938481116117e757509087611217939288611e74565b61121f612282565b907f000000000000000000000000000000000000000000000000000000000000000064ffffffffff16806117df575081525b64ffffffffff611285818351167f0000000000000000000000000000000000000000000000000000000000000000906122ab565b1660208201819052421061133d5750506001856112e8611338937fb0e61d06868c2b844ea5ce4c42d43866e18f6d8131ca2e2ce1af2ccc10e8d0ad97987f000000000000000000000000000000000000000000000000000000000000000061291d565b604051948594859273ffffffffffffffffffffffffffffffffffffffff906fffffffffffffffffffffffffffffffff60609497969397608087019887521660208601521660408401521515910152565b0390a2005b90959392915f7f000000000000000000000000000000000000000000000000000000000000000064ffffffffff81166117c6575b5061137a612282565b916113a57f000000000000000000000000000000000000000000000000000000000000000082612ca4565b6113ae90612b1b565b6fffffffffffffffffffffffffffffffff1683526113ec7f000000000000000000000000000000000000000000000000000000000000000082612ca4565b6113f590612b1b565b9060208401916fffffffffffffffffffffffffffffffff1682525f5473ffffffffffffffffffffffffffffffffffffffff16946040519561143587611ac0565b8652602086019a8b5260408601918252606086017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152608087017f00000000000000000000000000000000000000000000000000000000000000001515815260a08801917f00000000000000000000000000000000000000000000000000000000000000001515835260c089019384526114e4611b1e565b9460e08a019586526040519e8f9a7f253c6162000000000000000000000000000000000000000000000000000000008c5260048c0160a090525173ffffffffffffffffffffffffffffffffffffffff1660a48c01525173ffffffffffffffffffffffffffffffffffffffff1660c48b0152516fffffffffffffffffffffffffffffffff1660e48a01525173ffffffffffffffffffffffffffffffffffffffff1661010489015251151561012488015251151561014487015251805164ffffffffff166101648701526020015164ffffffffff16610184860152516101a4850161012090526101c485016115d691611c0a565b92516fffffffffffffffffffffffffffffffff166024850152516fffffffffffffffffffffffffffffffff1660448401527f000000000000000000000000000000000000000000000000000000000000000064ffffffffff16606484015264ffffffffff16608483015203857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1691815a6020945f91f1948515610f4e575f95611792575b50835f52600860205260405f208054680100000000000000008110156117655760018101808355811015611738575f91825260209182902001869055604080519283526fffffffffffffffffffffffffffffffff939093169082015273ffffffffffffffffffffffffffffffffffffffff9290921690820152600160608201527f6edacaef45d4eeb1d0fb82b2a0bbac8709e930057f116753d65da770427aad4690608090a3005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b9094506020813d6020116117be575b816117ae60209383611add565b810103126101f157519385611690565b3d91506117a1565b6117d9915064ffffffffff8451166122ab565b88611371565b825250611251565b84907f663ab84b000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b346101f15760406003193601126101f157611830611c67565b611838611cd0565b6118406128cc565b64ffffffffff600254168015158061194d575b8061193e575b6118e457506fffffffffffffffffffffffffffffffff169061189c82827f000000000000000000000000000000000000000000000000000000000000000061291d565b7f2e9d425ba8b27655048400b366d7b6a1f7180ebdb088e06bb7389704860ffe1f602073ffffffffffffffffffffffffffffffffffffffff805f5416936040519586521693a3005b7fe2e40a0c000000000000000000000000000000000000000000000000000000005f524260045264ffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660245260445260645ffd5b50611947611dce565b15611859565b5062093a80810164ffffffffff811161196e5764ffffffffff164211611853565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6119a436611d20565b93909291927f000000000000000000000000000000000000000000000000000000000000000060038110156104395780610e14575073ffffffffffffffffffffffffffffffffffffffff83161561062f576105d5946105ce91853385611e74565b346101f1575f6003193601126101f1576040515f6001548060011c90600181168015611ab6575b602083108114610d8957828552908115610d475750600114611a5857610ce583610cd181850382611add565b60015f9081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b808210611a9c57509091508101602001610cd1610cc1565b919260018160209254838588010152019101909291611a84565b91607f1691611a2c565b610100810190811067ffffffffffffffff82111761176557604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761176557604052565b604051905f6007548060011c9160018216918215611c00575b602084108314610d89578386528592908115611bc35750600114611b64575b611b6292500383611add565b565b5060075f90815290917fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6885b818310611ba7575050906020611b6292820101611b56565b6020919350806001915483858901015201910190918492611b8f565b60209250611b629491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101611b56565b92607f1692611b37565b91908251928382525f5b848110611c525750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f845f6020809697860101520116010190565b80602080928401015182828601015201611c14565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101f157565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101f157565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036101f157565b602435906fffffffffffffffffffffffffffffffff821682036101f157565b9181601f840112156101f15782359167ffffffffffffffff83116101f1576020808501948460051b0101116101f157565b9060806003198301126101f1576004359160243573ffffffffffffffffffffffffffffffffffffffff811681036101f157916044356fffffffffffffffffffffffffffffffff811681036101f157916064359067ffffffffffffffff82116101f157611d8e91600401611cef565b9091565b9181601f840112156101f15782359167ffffffffffffffff83116101f157602083818601950101116101f157565b600381101561043957602452565b64ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015159081611e03575090565b905042101590565b67ffffffffffffffff811161176557601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b3d15611e6f573d90611e5682611e0b565b91611e646040519384611add565b82523d5f602084013e565b606090565b939491909264ffffffffff7f0000000000000000000000000000000000000000000000000000000000000000164281116122535750611eb1611dce565b6121fc577f00000000000000000000000000000000000000000000000000000000000000009373ffffffffffffffffffffffffffffffffffffffff851692600454604051907fb0fa59e80000000000000000000000000000000000000000000000000000000082526004820152602081602481885afa908115610f4e575f916121ca575b5080341061219b5750611f5f8760ff6001918060081c5f526005602052161b60405f205416151590565b61216f576fffffffffffffffffffffffffffffffff6040519173ffffffffffffffffffffffffffffffffffffffff60208401948a865216604084015216606082015260608152611fb0608082611add565b5190206040516020810191825260208152611fcc604082611add565b5190209067ffffffffffffffff8711611765578660051b60405197611ff4602083018a611add565b885260208801908201913683116101f157905b82821061215f57505050925f935b86518510156120575760208560051b88010151908181105f14612046575f52602052600160405f205b940193612015565b905f52602052600160405f2061203e565b919492955092507f0000000000000000000000000000000000000000000000000000000000000000036121375760025464ffffffffff811615612103575b508060081c5f526005602052600160ff60405f2092161b8154179055346120ba575050565b5f8080809334905af16120cb611e45565b50156120d45750565b7fe57d366c000000000000000000000000000000000000000000000000000000005f526004523460245260445ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000164264ffffffffff16176002555f612095565b7fb4f06787000000000000000000000000000000000000000000000000000000005f5260045ffd5b8135815260209182019101612007565b867f02bf1aba000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fa164c6b4000000000000000000000000000000000000000000000000000000005f523460045260245260445ffd5b90506020813d6020116121f4575b816121e560209383611add565b810103126101f157515f611f35565b3d91506121d8565b7fdf4bae05000000000000000000000000000000000000000000000000000000005f524260045264ffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660245260445ffd5b7f14659648000000000000000000000000000000000000000000000000000000005f524260045260245260445ffd5b604051906040820182811067ffffffffffffffff821117611765576040525f6020838281520152565b9064ffffffffff8091169116019064ffffffffff821161196e57565b929190916122d3612282565b7f000000000000000000000000000000000000000000000000000000000000000064ffffffffff16806128c5575064ffffffffff421681525b64ffffffffff612340818351167f0000000000000000000000000000000000000000000000000000000000000000906122ab565b1660208201819052421061242057509161241b5f73ffffffffffffffffffffffffffffffffffffffff93856123c96fffffffffffffffffffffffffffffffff7fb0e61d06868c2b844ea5ce4c42d43866e18f6d8131ca2e2ce1af2ccc10e8d0ad9816837f000000000000000000000000000000000000000000000000000000000000000061291d565b6040519586951697859273ffffffffffffffffffffffffffffffffffffffff906fffffffffffffffffffffffffffffffff60609497969397608087019887521660208601521660408401521515910152565b0390a2565b93925f7f000000000000000000000000000000000000000000000000000000000000000064ffffffffff81166128ac575b5061245a612282565b6fffffffffffffffffffffffffffffffff8416916124987f000000000000000000000000000000000000000000000000000000000000000084612ca4565b6124a190612b1b565b6fffffffffffffffffffffffffffffffff1682526124df7f000000000000000000000000000000000000000000000000000000000000000084612ca4565b6124e890612b1b565b60208301906fffffffffffffffffffffffffffffffff1681525f5473ffffffffffffffffffffffffffffffffffffffff16936040519461252786611ac0565b8552602085019973ffffffffffffffffffffffffffffffffffffffff89168b5260408601918252606086017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168152608087017f00000000000000000000000000000000000000000000000000000000000000001515815260a08801917f00000000000000000000000000000000000000000000000000000000000000001515835260c089019384526125ed611b1e565b9460e08a019586526040519e8f9a7f253c6162000000000000000000000000000000000000000000000000000000008c5260048c0160a090525173ffffffffffffffffffffffffffffffffffffffff1660a48c01525173ffffffffffffffffffffffffffffffffffffffff1660c48b0152516fffffffffffffffffffffffffffffffff1660e48a01525173ffffffffffffffffffffffffffffffffffffffff1661010489015251151561012488015251151561014487015251805164ffffffffff166101648701526020015164ffffffffff16610184860152516101a4850161012090526101c485016126df91611c0a565b92516fffffffffffffffffffffffffffffffff166024850152516fffffffffffffffffffffffffffffffff1660448401527f000000000000000000000000000000000000000000000000000000000000000064ffffffffff16606484015264ffffffffff16608483015203857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1691815a6020945f91f1948515610f4e575f95612864575b5073ffffffffffffffffffffffffffffffffffffffff1692835f52600860205260405f208054680100000000000000008110156117655760018101808355811015611738577f6edacaef45d4eeb1d0fb82b2a0bbac8709e930057f116753d65da770427aad4694875f9261285f948452602084200155604051948594859273ffffffffffffffffffffffffffffffffffffffff906fffffffffffffffffffffffffffffffff60609497969397608087019887521660208601521660408401521515910152565b0390a3565b9094506020813d6020116128a4575b8161288060209383611add565b810103126101f157519373ffffffffffffffffffffffffffffffffffffffff612799565b3d9150612873565b6128bf915064ffffffffff8751166122ab565b5f612451565b815261230c565b73ffffffffffffffffffffffffffffffffffffffff5f54163381036128ee5750565b7fc6cce6a4000000000000000000000000000000000000000000000000000000005f526004523360245260445ffd5b611b629273ffffffffffffffffffffffffffffffffffffffff604051937fa9059cbb000000000000000000000000000000000000000000000000000000006020860152166024840152604483015260448252611021606483611add565b73ffffffffffffffffffffffffffffffffffffffff6006541680612a5b57506040517fcada25c200000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610f4e575f91612a0f575090565b90506020813d602011612a53575b81612a2a60209383611add565b810103126101f1575173ffffffffffffffffffffffffffffffffffffffff811681036101f15790565b3d9150612a1d565b90565b467f000000000000000000000000000000000000000000000000000000000000000003612aa9577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f13cd784591b49af6fc220be53013eaddf1dc15399ca43850d206ea319aca0821604082015246606082015230608082015260808152612b1560a082611add565b51902090565b6fffffffffffffffffffffffffffffffff8111612b47576fffffffffffffffffffffffffffffffff1690565b7f4916adce000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b905f602091828151910182855af115610f4e575f513d612bf0575073ffffffffffffffffffffffffffffffffffffffff81163b155b612bae5750565b73ffffffffffffffffffffffffffffffffffffffff907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415612ba7565b90604290939293612c08612a5e565b90604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090612c4583611e0b565b92612c536040519485611add565b80845236818601116101f1576020815f92612c75978388013785010152612d71565b15612c7c57565b7f45aa7fec000000000000000000000000000000000000000000000000000000005f5260045ffd5b9190917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83820983820291828083109203918083039214612d6057670de0b6b3a7640000821015612d30577faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106699394670de0b6b3a7640000910990828211900360ee1b910360121c170290565b84907f5173648d000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b5050670de0b6b3a764000090049150565b9190823b612db95790612d8391612e95565b50600481101561043957159182612d9957505090565b73ffffffffffffffffffffffffffffffffffffffff919250811691161490565b915f92612e08612e34859460405192839160208301957f1626ba7e0000000000000000000000000000