UNPKG

blocklock-js

Version:

A library for encrypting and decrypting data for the future

820 lines (818 loc) 256 kB
/* Autogenerated file. Do not edit manually. */ /* tslint:disable */ /* eslint-disable */ import { Contract, ContractFactory, ContractTransactionResponse, Interface, } from "ethers"; import type { Signer, ContractDeployTransaction, ContractRunner } from "ethers"; import type { NonPayableOverrides } from "../../common"; import type { SubscriptionFundingTest, SubscriptionFundingTestInterface, } from "../../SubscriptionFunding.t.sol/SubscriptionFundingTest"; const _abi = [ { type: "function", name: "ADMIN_ROLE", inputs: [], outputs: [ { name: "", type: "bytes32", internalType: "bytes32", }, ], stateMutability: "view", }, { type: "function", name: "IS_TEST", inputs: [], outputs: [ { name: "", type: "bool", internalType: "bool", }, ], stateMutability: "view", }, { type: "function", name: "consumersToAddToSubscription", inputs: [ { name: "", type: "uint256", internalType: "uint256", }, ], outputs: [ { name: "", type: "address", internalType: "address", }, ], stateMutability: "view", }, { type: "function", name: "excludeArtifacts", inputs: [], outputs: [ { name: "excludedArtifacts_", type: "string[]", internalType: "string[]", }, ], stateMutability: "view", }, { type: "function", name: "excludeContracts", inputs: [], outputs: [ { name: "excludedContracts_", type: "address[]", internalType: "address[]", }, ], stateMutability: "view", }, { type: "function", name: "excludeSelectors", inputs: [], outputs: [ { name: "excludedSelectors_", type: "tuple[]", internalType: "struct StdInvariant.FuzzSelector[]", components: [ { name: "addr", type: "address", internalType: "address", }, { name: "selectors", type: "bytes4[]", internalType: "bytes4[]", }, ], }, ], stateMutability: "view", }, { type: "function", name: "excludeSenders", inputs: [], outputs: [ { name: "excludedSenders_", type: "address[]", internalType: "address[]", }, ], stateMutability: "view", }, { type: "function", name: "failed", inputs: [], outputs: [ { name: "", type: "bool", internalType: "bool", }, ], stateMutability: "view", }, { type: "function", name: "setUp", inputs: [], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "targetArtifactSelectors", inputs: [], outputs: [ { name: "targetedArtifactSelectors_", type: "tuple[]", internalType: "struct StdInvariant.FuzzArtifactSelector[]", components: [ { name: "artifact", type: "string", internalType: "string", }, { name: "selectors", type: "bytes4[]", internalType: "bytes4[]", }, ], }, ], stateMutability: "view", }, { type: "function", name: "targetArtifacts", inputs: [], outputs: [ { name: "targetedArtifacts_", type: "string[]", internalType: "string[]", }, ], stateMutability: "view", }, { type: "function", name: "targetContracts", inputs: [], outputs: [ { name: "targetedContracts_", type: "address[]", internalType: "address[]", }, ], stateMutability: "view", }, { type: "function", name: "targetInterfaces", inputs: [], outputs: [ { name: "targetedInterfaces_", type: "tuple[]", internalType: "struct StdInvariant.FuzzInterface[]", components: [ { name: "addr", type: "address", internalType: "address", }, { name: "artifacts", type: "string[]", internalType: "string[]", }, ], }, ], stateMutability: "view", }, { type: "function", name: "targetSelectors", inputs: [], outputs: [ { name: "targetedSelectors_", type: "tuple[]", internalType: "struct StdInvariant.FuzzSelector[]", components: [ { name: "addr", type: "address", internalType: "address", }, { name: "selectors", type: "bytes4[]", internalType: "bytes4[]", }, ], }, ], stateMutability: "view", }, { type: "function", name: "targetSenders", inputs: [], outputs: [ { name: "targetedSenders_", type: "address[]", internalType: "address[]", }, ], stateMutability: "view", }, { type: "function", name: "test_CallsToBlocklockSender_ShouldRevert_IfBlocklockSenderAddressIsIncorrect", inputs: [], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "test_CancelSubscription", inputs: [], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "test_CancelSubscription_WithPendingRequest_ShouldRevert", inputs: [], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "test_Deployment_Configurations", inputs: [], outputs: [], stateMutability: "view", }, { type: "function", name: "test_EstimatedRequestPrice_Increases_WithCallbackGasLimit", inputs: [], outputs: [], stateMutability: "view", }, { type: "function", name: "test_EstimatedRequestPrice_Increases_WithGasPrice", inputs: [], outputs: [], stateMutability: "view", }, { type: "function", name: "test_FulfillDecryptionRequest_ForAdditionalSubscriberAddress", inputs: [], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "test_FulfillDecryptionRequest_ForSubscriptionWithZeroBalance_ShouldRevert", inputs: [], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "test_FulfillDecryptionRequest_ForSubscription_WithOnlyRequestPriceBalance", inputs: [], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "test_FulfillDecryptionRequest_WithIncorrectDecryptionKey_ShouldRevert", inputs: [], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "test_FulfillDecryptionRequest_WithInvalidSignature_ShouldRevert", inputs: [], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "test_FulfillDecryptionRequest_WithLowCallbackGasLimit", inputs: [], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "test_FulfillDecryptionRequest_WithRevertingReceiver_ShouldNotRevert", inputs: [], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "test_FulfillDecryptionRequest_WithSubscription_Successfully", inputs: [], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "test_FulfillDecryptionRequest_WithZeroCallbackGasLimit", inputs: [], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "test_NoChargeAtRequestTime_ForSubscriptionRequest", inputs: [], outputs: [], stateMutability: "nonpayable", }, { type: "function", name: "test_Update_SignatureScheme", inputs: [], outputs: [], stateMutability: "nonpayable", }, { type: "event", name: "BlocklockCallbackFailed", inputs: [ { name: "requestId", type: "uint256", indexed: true, internalType: "uint256", }, ], anonymous: false, }, { type: "event", name: "BlocklockCallbackSuccess", inputs: [ { name: "requestId", type: "uint256", indexed: true, internalType: "uint256", }, { name: "condition", type: "bytes", indexed: false, internalType: "bytes", }, { name: "ciphertext", type: "tuple", indexed: false, internalType: "struct TypesLib.Ciphertext", components: [ { name: "u", type: "tuple", internalType: "struct BLS.PointG2", components: [ { name: "x", type: "uint256[2]", internalType: "uint256[2]", }, { name: "y", type: "uint256[2]", internalType: "uint256[2]", }, ], }, { name: "v", type: "bytes", internalType: "bytes", }, { name: "w", type: "bytes", internalType: "bytes", }, ], }, { name: "decryptionKey", type: "bytes", indexed: false, internalType: "bytes", }, ], anonymous: false, }, { type: "event", name: "log", inputs: [ { name: "", type: "string", indexed: false, internalType: "string", }, ], anonymous: false, }, { type: "event", name: "log_address", inputs: [ { name: "", type: "address", indexed: false, internalType: "address", }, ], anonymous: false, }, { type: "event", name: "log_array", inputs: [ { name: "val", type: "uint256[]", indexed: false, internalType: "uint256[]", }, ], anonymous: false, }, { type: "event", name: "log_array", inputs: [ { name: "val", type: "int256[]", indexed: false, internalType: "int256[]", }, ], anonymous: false, }, { type: "event", name: "log_array", inputs: [ { name: "val", type: "address[]", indexed: false, internalType: "address[]", }, ], anonymous: false, }, { type: "event", name: "log_bytes", inputs: [ { name: "", type: "bytes", indexed: false, internalType: "bytes", }, ], anonymous: false, }, { type: "event", name: "log_bytes32", inputs: [ { name: "", type: "bytes32", indexed: false, internalType: "bytes32", }, ], anonymous: false, }, { type: "event", name: "log_int", inputs: [ { name: "", type: "int256", indexed: false, internalType: "int256", }, ], anonymous: false, }, { type: "event", name: "log_named_address", inputs: [ { name: "key", type: "string", indexed: false, internalType: "string", }, { name: "val", type: "address", indexed: false, internalType: "address", }, ], anonymous: false, }, { type: "event", name: "log_named_array", inputs: [ { name: "key", type: "string", indexed: false, internalType: "string", }, { name: "val", type: "uint256[]", indexed: false, internalType: "uint256[]", }, ], anonymous: false, }, { type: "event", name: "log_named_array", inputs: [ { name: "key", type: "string", indexed: false, internalType: "string", }, { name: "val", type: "int256[]", indexed: false, internalType: "int256[]", }, ], anonymous: false, }, { type: "event", name: "log_named_array", inputs: [ { name: "key", type: "string", indexed: false, internalType: "string", }, { name: "val", type: "address[]", indexed: false, internalType: "address[]", }, ], anonymous: false, }, { type: "event", name: "log_named_bytes", inputs: [ { name: "key", type: "string", indexed: false, internalType: "string", }, { name: "val", type: "bytes", indexed: false, internalType: "bytes", }, ], anonymous: false, }, { type: "event", name: "log_named_bytes32", inputs: [ { name: "key", type: "string", indexed: false, internalType: "string", }, { name: "val", type: "bytes32", indexed: false, internalType: "bytes32", }, ], anonymous: false, }, { type: "event", name: "log_named_decimal_int", inputs: [ { name: "key", type: "string", indexed: false, internalType: "string", }, { name: "val", type: "int256", indexed: false, internalType: "int256", }, { name: "decimals", type: "uint256", indexed: false, internalType: "uint256", }, ], anonymous: false, }, { type: "event", name: "log_named_decimal_uint", inputs: [ { name: "key", type: "string", indexed: false, internalType: "string", }, { name: "val", type: "uint256", indexed: false, internalType: "uint256", }, { name: "decimals", type: "uint256", indexed: false, internalType: "uint256", }, ], anonymous: false, }, { type: "event", name: "log_named_int", inputs: [ { name: "key", type: "string", indexed: false, internalType: "string", }, { name: "val", type: "int256", indexed: false, internalType: "int256", }, ], anonymous: false, }, { type: "event", name: "log_named_string", inputs: [ { name: "key", type: "string", indexed: false, internalType: "string", }, { name: "val", type: "string", indexed: false, internalType: "string", }, ], anonymous: false, }, { type: "event", name: "log_named_uint", inputs: [ { name: "key", type: "string", indexed: false, internalType: "string", }, { name: "val", type: "uint256", indexed: false, internalType: "uint256", }, ], anonymous: false, }, { type: "event", name: "log_string", inputs: [ { name: "", type: "string", indexed: false, internalType: "string", }, ], anonymous: false, }, { type: "event", name: "log_uint", inputs: [ { name: "", type: "uint256", indexed: false, internalType: "uint256", }, ], anonymous: false, }, { type: "event", name: "logs", inputs: [ { name: "", type: "bytes", indexed: false, internalType: "bytes", }, ], anonymous: false, }, ] as const; const _bytecode = "0x600c8054600160ff199182168117909255601f8054909116909117905560c0604052601360809081527f424e3235342d424c532d424c4f434b4c4f434b0000000000000000000000000060a0526023906100599082610234565b50604080516080810182527f2691d39ecc380bfa873911a0b848c77556ee948fb8ab649137d3d3e78153f6ca8183019081527f2863e20a5125b098108a5061b31f405e16a069e9ebff60022f57f4c4fd0237bf6060830152815281518083019092527f193513dbe180d700b189c529754f650b7b7882122c8a1e242a938d23ea9f765c82527f11c939ea560caf31f552c9c4879b15865d38ba1dfb0f7a7d2ac46a4f0cae25ba6020838101919091528101919091528051602490610120908290600261014a565b506020820151610136906002808401919061014a565b505050348015610144575f5ffd5b506102ee565b8260028101928215610178579160200282015b8281111561017857825182559160200191906001019061015d565b50610184929150610188565b5090565b5b80821115610184575f8155600101610189565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806101c457607f821691505b6020821081036101e257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561022f57805f5260205f20601f840160051c8101602085101561020d5750805b601f840160051c820191505b8181101561022c575f8155600101610219565b50505b505050565b81516001600160401b0381111561024d5761024d61019c565b6102618161025b84546101b0565b846101e8565b6020601f821160018114610293575f831561027c5750848201515b5f19600385901b1c1916600184901b17845561022c565b5f84815260208120601f198516915b828110156102c257878501518255602094850194600190920191016102a2565b50848210156102df57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6201cf9880620002fd5f395ff3fe608060405234801561000f575f5ffd5b50600436106101e7575f3560e01c80637b68cb1511610109578063ba414fa61161009e578063e20c9f711161006e578063e20c9f7114610377578063edf06c381461037f578063fa7626d414610387578063fcf6760e14610394575f5ffd5b8063ba414fa614610347578063bccd1e371461035f578063d8c0b89d14610367578063da6f54461461036f575f5ffd5b8063916a17c6116100d9578063916a17c61461031a578063b0464fdc1461032f578063b3191fb114610337578063b5508aa91461033f575f5ffd5b80637b68cb15146102ed5780637b805258146102f557806385226c81146102fd5780638c5e3b5114610312575f5ffd5b80634aa646b01161017f57806360cfc9231161014f57806360cfc92314610293578063658e17261461029b57806366d9a9a0146102a357806375b238fc146102b8575f5ffd5b80634aa646b01461025057806353aee9401461027b57806358ec323a146102835780635d408d421461028b575f5ffd5b80633d705725116101ba5780633d705725146102305780633e5e3c23146102385780633f7286f414610240578063466ebb4d14610248575f5ffd5b80630a9254e4146101eb57806314c2fe27146101f55780631ed7831c146101fd5780632ade38801461021b575b5f5ffd5b6101f361039c565b005b6101f361043b565b610205611115565b604051610212919061ba10565b60405180910390f35b610223611175565b604051610212919061ba89565b6101f36112b1565b610205611ff2565b610205612050565b6101f36120ae565b61026361025e36600461bb52565b612d63565b6040516001600160a01b039091168152602001610212565b6101f3612d8b565b6101f3612eaf565b6101f3612fea565b6101f36143c9565b6101f3614ba0565b6102ab614f45565b604051610212919061bbad565b6102df7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b604051908152602001610212565b6101f36150a9565b6101f36156c6565b6103056157d1565b604051610212919061bc2b565b6101f361589c565b610322616a34565b604051610212919061bc82565b610322616b15565b6101f3616bf6565b610305617515565b61034f6175e0565b6040519015158152602001610212565b6101f361767a565b6101f3618854565b6101f36193af565b610205619f08565b6101f3619f66565b601f5461034f9060ff1681565b6101f361a5f3565b6103a461a7e0565b6103ac61a7e8565b602c80546001600160a01b03199081166001600160a01b0393841617909155602b8054821693831693909317909255602a8054831693821693909317909255602980548216938316939093179092556028805490921692169190911790556207a12062061a80620f4240622dc6c0620c3500600a6113886104328787878787878761aef6565b50505050505050565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561048b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104af919061bcf9565b156104bc576104bc61bd10565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561050c575f5ffd5b505af115801561051e573d5f5f3e3d5ffd5b5050602b546040515f93506001600160a01b03909116915061053f9061b95c565b6001600160a01b039091168152602001604051809103905ff080158015610568573d5f5f3e3d5ffd5b5060205460405163ca669fa760e01b81526001600160a01b0390911660048201529091505f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156105bc575f5ffd5b505af11580156105ce573d5f5f3e3d5ffd5b50505050806001600160a01b031663b96dbba7674563918244f400006040518263ffffffff1660e01b81526004015f604051808303818588803b158015610613575f5ffd5b505af1158015610625573d5f5f3e3d5ffd5b50505050505f816001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610667573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061068b919061bcf9565b9050805f0361069c5761069c61bd10565b6106c96040518060400160405280601281526020015f5160206201cd775f395f51905f528152508261afeb565b602b54604051634b16093560e01b8152620186a060048201819052674563918244f400009290915f916001600160a01b031690634b16093590602401602060405180830381865afa158015610720573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610744919061bcf9565b90506107696040518060600160405280603281526020016201cbdc603291398261afeb565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156107b9575f5ffd5b505af11580156107cb573d5f5f3e3d5ffd5b50506729a2241af62c00005f9081526022602052604051634d3de35360e01b81528593509091506001600160a01b03881690634d3de353906108319085905f5160206201c7125f395f51905f52905f5160206201c3805f395f51905f529060040161be52565b6020604051808303815f875af115801561084d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610871919061bcf9565b602b5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa1580156108bc573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108e3919081019061c0f4565b905061091a8363ffffffff16826040015163ffffffff16146040518060800160405280604881526020016201c3e36048913961b030565b610943815f01515f14156040518060600160405280603281526020016201c4806032913961b030565b61096c81602001515f146040518060800160405280604881526020016201cf1b6048913961b030565b610995828260600151146040518060600160405280604081526020016201cde76040913961b030565b6040516348f50c0f60e01b8152620186a060048201525f5160206201c2735f395f51905f52906348f50c0f906024015f604051808303815f87803b1580156109db575f5ffd5b505af11580156109ed573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b158015610a4a575f5ffd5b505af1158015610a5c573d5f5f3e3d5ffd5b505060405163248e63e160e11b8152600160048201819052602482018190525f604483015260648201525f5160206201c2735f395f51905f52925063491cc7c291506084015f604051808303815f87803b158015610ab8575f5ffd5b505af1158015610aca573d5f5f3e3d5ffd5b50506040518592507f15083536507666802cbd84fcc1e37ed89879bad2345aaa38d48d91a5071d0f5d91505f90a2602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b039091169063f7cef80090610b579086905f5160206201ca935f395f51905f52905f5160206201c2935f395f51905f529060040161c21f565b5f604051808303815f87803b158015610b6e575f5ffd5b505af1158015610b80573d5f5f3e3d5ffd5b505050505f5a90505f610b93828461c25d565b9050610bcc6040518060400160405280601981526020015f5160206201c80d5f395f51905f52815250856040015163ffffffff1661afeb565b610bfd6040518060400160405280601981526020015f5160206201ca735f395f51905f52815250856020015161afeb565b610c2b6040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261afeb565b610c586040518060400160405280601381526020015f5160206201c59e5f395f51905f528152503a61afeb565b60408051808201909152601481525f5160206201c53e5f395f51905f526020820152610c8d90610c883a8461c276565b61afeb565b602a5460405163b094728960e01b815260048101879052610d1b916001600160a01b03169063b0947289906024015b602060405180830381865afa158015610cd7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cfb919061c29c565b156040518060800160405280605881526020016201c1e66058913961b030565b602b5460405163dc311dd360e01b8152600481018c90525f9182916001600160a01b039091169063dc311dd3906024015f60405180830381865afa158015610d65573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d8c919081019061c2d2565b50506001600160401b0316915091505f826001600160601b03168c610db1919061c25d565b9050610ddf6040518060600160405280602c81526020016201c454602c9139846001600160601b031661afeb565b610e026040518060600160405280602781526020016201c517602791398261afeb565b610e168c846001600160601b03168361b08b565b610e3c818b10156040518060800160405280604381526020016201cab36043913961b030565b610e73610e526001600160601b0385168361c3c6565b8d146040518060600160405280602581526020016201c99a6025913961b030565b610ea181610e813a8761c276565b106040518060600160405280602481526020016201c1c26024913961b030565b610ec7826001146040518060600160405280602981526020016201cb7b6029913961b030565b610f6881602b5f9054906101000a90046001600160a01b03166001600160a01b031663995cb36e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f1b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f3f919061c3d9565b6001600160601b0316146040518060600160405280604081526020016201c8526040913961b030565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b158015610fbc575f5ffd5b505af1158015610fce573d5f5f3e3d5ffd5b5050601f54602b5460405163bd18636b60e01b81526101009092046001600160a01b039081166004840181905231945016915063bd18636b906024015f604051808303815f87803b158015611021575f5ffd5b505af1158015611033573d5f5f3e3d5ffd5b5050601f5461107a925083915061105a90859061010090046001600160a01b03163161c3c6565b116040518060600160405280603581526020016201c23e6035913961b030565b602b54604080516318e3dd2760e01b815290516001600160601b038716926001600160a01b0316916318e3dd279160048083019260209291908290030181865afa1580156110ca573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110ee919061c3d9565b6001600160601b0316146111045761110461bd10565b505050505050505050505050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561116b57602002820191905f5260205f20905b81546001600160a01b0316815260019091019060200180831161114d575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020015f905b828210156112a8575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015611291578382905f5260205f200180546112069061bd24565b80601f01602080910402602001604051908101604052809291908181526020018280546112329061bd24565b801561127d5780601f106112545761010080835404028352916020019161127d565b820191905f5260205f20905b81548152906001019060200180831161126057829003601f168201915b5050505050815260200190600101906111e9565b505050508152505081526020019060010190611198565b50505050905090565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa158015611301573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611325919061bcf9565b156113325761133261bd10565b602c5f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611381573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a5919061bcf9565b156113b2576113b261bd10565b602b54604051634b16093560e01b8152620186a060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa158015611400573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611424919061bcf9565b60205460405163ca669fa760e01b81526001600160a01b03909116600482018190529192509031905f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561147c575f5ffd5b505af115801561148e573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba7836040518263ffffffff1660e01b81526004015f604051808303818588803b1580156114df575f5ffd5b505af11580156114f1573d5f5f3e3d5ffd5b50505050506115538282611505919061c25d565b6020805460408051808201909152601981527f416c6963652062616c616e6365206e6f74206465626974656400000000000000928101929092526001600160a01b031631919091149061b030565b61158c5f831160405180604001604052806015815260200174496e76616c6964207265717565737420707269636560581b81525061b030565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156115dc575f5ffd5b505af11580156115ee573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051634d3de35360e01b8152620186a094509092506001600160a01b0390911690634d3de3539061165b9085905f5160206201c7125f395f51905f52905f5160206201c3805f395f51905f529060040161be52565b6020604051808303815f875af1158015611677573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169b919061bcf9565b6040516348f50c0f60e01b8152620186a060048201529091505f5160206201c2735f395f51905f52906348f50c0f906024015f604051808303815f87803b1580156116e4575f5ffd5b505af11580156116f6573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611753575f5ffd5b505af1158015611765573d5f5f3e3d5ffd5b505050505f6040518060600160405280604081526020016201ca336040913960405163f28dceb360e01b815260206004820152601d60248201527f5369676e617475726520766572696669636174696f6e206661696c656400000060448201529091505f5160206201c2735f395f51905f529063f28dceb3906064015f604051808303815f87803b1580156117f8575f5ffd5b505af115801561180a573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef800915061185f9086905f5160206201ca935f395f51905f5290869060040161c3f2565b5f604051808303815f87803b158015611876575f5ffd5b505af1158015611888573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118dc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611900919061bcf9565b1561190d5761190d61bd10565b602c5f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561195c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611980919061bcf9565b60011461198f5761198f61bd10565b602a5460405163c58343ef60e01b8152600481018590525f916001600160a01b03169063c58343ef906024015f60405180830381865afa1580156119d5573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119fc919081019061c41c565b602b5460405163c58343ef60e01b8152600481018790529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015611a47573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a6e919081019061c0f4565b90505f5a90505f611a7f828761c25d565b9050611ab86040518060400160405280601981526020015f5160206201c80d5f395f51905f52815250846040015163ffffffff1661afeb565b611ae96040518060400160405280601981526020015f5160206201ca735f395f51905f52815250846020015161afeb565b611b176040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261afeb565b611b446040518060400160405280601381526020015f5160206201c59e5f395f51905f528152503a61afeb565b60408051808201909152601481525f5160206201c53e5f395f51905f526020820152611b7490610c883a8461c276565b602a5460405163b094728960e01b815260048101899052611ba7916001600160a01b03169063b094728990602401610cbc565b611bcf8460c00151156040518060600160405280602d81526020016201ca06602d913961b030565b6729a2241af62c00005f52602260209081525f5160206201ce275f395f51905f5254602c54604080516397a9c28560e01b81529051611c7d946001600160a01b03909316926397a9c28592600480820193918290030181865afa158015611c38573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c5c919061bcf9565b14156040518060600160405280602a81526020016201c356602a913961b030565b602c54604080516236b65760e11b81529051611d0a926001600160a01b031691626d6cae9160048083019260209291908290030181865afa158015611cc4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ce8919061bcf9565b6001146040518060600160405280602c81526020016201cd19602c913961b030565b611d17836020015161b0d9565b611db88a602b5f9054906101000a90046001600160a01b03166001600160a01b03166318e3dd276040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d8f919061c3d9565b6001600160601b0316146040518060600160405280603681526020016201c2b36036913961b030565b602b5460408051634cae59b760e11b81529051611e4f926001600160a01b03169163995cb36e9160048083019260209291908290030181865afa158015611e01573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e25919061c3d9565b6001600160601b03165f146040518060600160405280603681526020016201c2b36036913961b030565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611ea3575f5ffd5b505af1158015611eb5573d5f5f3e3d5ffd5b50506040805160048082526024820183526020820180516001600160e01b0316631e9acf1760e31b179052915163f28dceb360e01b81525f5160206201c2735f395f51905f52945063f28dceb39350611f0e920161c550565b5f604051808303815f87803b158015611f25575f5ffd5b505af1158015611f37573d5f5f3e3d5ffd5b5050601f54602b546040516354236fb360e01b81526101009092046001600160a01b03908116600484018190523194501691506354236fb3906024015f604051808303815f87803b158015611f8a575f5ffd5b505af1158015611f9c573d5f5f3e3d5ffd5b50505050611fe481601f60019054906101000a90046001600160a01b03166001600160a01b031631146040518060600160405280603881526020016201cba46038913961b030565b505050505050505050505050565b6060601880548060200260200160405190810160405280929190818152602001828054801561116b57602002820191905f5260205f209081546001600160a01b0316815260019091019060200180831161114d575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561116b57602002820191905f5260205f209081546001600160a01b0316815260019091019060200180831161114d575050505050905090565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120fe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612122919061bcf9565b1561212f5761212f61bd10565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561217f575f5ffd5b505af1158015612191573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba7674563918244f400006040518263ffffffff1660e01b81526004015f604051808303818588803b1580156121ea575f5ffd5b505af11580156121fc573d5f5f3e3d5ffd5b50505050505f602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612252573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612276919061bcf9565b9050805f036122875761228761bd10565b6122b46040518060400160405280601281526020015f5160206201cd775f395f51905f528152508261afeb565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b158015612308575f5ffd5b505af115801561231a573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b0316631d2b2afd670de0b6b3a76400006040518263ffffffff1660e01b81526004015f604051808303818588803b158015612373575f5ffd5b505af1158015612385573d5f5f3e3d5ffd5b5050602b54604051634b16093560e01b8152620493e0600482018190526753444835ec580000955093505f92506001600160a01b0390911690634b16093590602401602060405180830381865afa1580156123e2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612406919061bcf9565b905061242b6040518060600160405280603281526020016201cbdc603291398261afeb565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561247b575f5ffd5b505af115801561248d573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051634d3de35360e01b81528694509092506001600160a01b0390911690634d3de353906124f79085905f5160206201c7125f395f51905f52905f5160206201c3805f395f51905f529060040161be52565b6020604051808303815f875af1158015612513573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612537919061bcf9565b602a5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015612582573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125a9919081019061c41c565b602b5460405163c58343ef60e01b8152600481018590529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa1580156125f4573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261261b919081019061c0f4565b90506126528463ffffffff16826040015163ffffffff16146040518060800160405280604881526020016201c3e36048913961b030565b61267b815f01515f14156040518060600160405280603281526020016201c4806032913961b030565b6126a481602001515f146040518060800160405280604881526020016201cf1b6048913961b030565b6126cd838260600151146040518060600160405280604081526020016201cde76040913961b030565b6040516348f50c0f60e01b8152620186a060048201525f5160206201c2735f395f51905f52906348f50c0f906024015f604051808303815f87803b158015612713575f5ffd5b505af1158015612725573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b158015612782575f5ffd5b505af1158015612794573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef80091506127f79087905f5160206201ca935f395f51905f52905f5160206201c2935f395f51905f529060040161c21f565b5f604051808303815f87803b15801561280e575f5ffd5b505af1158015612820573d5f5f3e3d5ffd5b505050505f5a90505f612833828461c25d565b905061286c6040518060400160405280601981526020015f5160206201c80d5f395f51905f52815250856040015163ffffffff1661afeb565b61289d6040518060400160405280601981526020015f5160206201ca735f395f51905f52815250856020015161afeb565b6128cb6040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261afeb565b6128f86040518060400160405280601381526020015f5160206201c59e5f395f51905f528152503a61afeb565b60408051808201909152601481525f5160206201c53e5f395f51905f52602082015261292890610c883a8461c276565b602a5460405163b094728960e01b8152600481018890526129b6916001600160a01b03169063b0947289906024015b602060405180830381865afa158015612972573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612996919061c29c565b156040518060800160405280604381526020016201c3a06043913961b030565b602b5460405163dc311dd360e01b8152600481018d90525f9182916001600160a01b039091169063dc311dd3906024015f60405180830381865afa158015612a00573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612a27919081019061c2d2565b50506001600160401b0316915091505f826001600160601b03168d612a4c919061c25d565b9050612a7a6040518060600160405280602c81526020016201c454602c9139846001600160601b031661afeb565b612a9d6040518060600160405280602781526020016201c517602791398261afeb565b612ab18d846001600160601b03168361b08b565b612ad7818c10156040518060800160405280604381526020016201cab36043913961b030565b612b0e612aed6001600160601b0385168361c3c6565b8e146040518060600160405280602581526020016201c99a6025913961b030565b612b1c81610e813a8761c276565b612b42826001146040518060600160405280602981526020016201cb7b6029913961b030565b602a5460405163c58343ef60e01b8152600481018b90526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015612b88573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612baf919081019061c41c565b9750612bd88860c001516040518060800160405280604381526020016201c7686043913961b030565b6729a2241af62c00005f52602260209081525f5160206201ce275f395f51905f5254602c54604080516397a9c28560e01b81529051612c85946001600160a01b03909316926397a9c28592600480820193918290030181865afa158015612c41573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c65919061bcf9565b146040518060600160405280602a81526020016201c356602a913961b030565b602c54604080516236b65760e11b81529051612ccc926001600160a01b031691626d6cae9160048083019260209291908290030181865afa158015611cc4573d5f5f3e3d5ffd5b602b5460408051633bc32c7560e01b81529051610ec7926001600160a01b031691633bc32c759160048083019260209291908290030181865afa158015612d15573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d39919061c3d9565b6001600160601b03165f146040518060800160405280604a81526020016201c950604a913961b030565b602d8181548110612d72575f80fd5b5f918252602090912001546001600160a01b0316905081565b602b5460405163192ae22b60e11b8152620186a060048201819052606460248301819052909290915f916001600160a01b031690633255c45690604401602060405180830381865afa158015612de3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e07919061bcf9565b602b5460405163192ae22b60e11b815263ffffffff8616600482015260c8602482018190529450919250612eaa916001600160a01b0390911690633255c45690604401602060405180830381865afa158015612e65573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e89919061bcf9565b82106040518060800160405280604781526020016201cc8c6047913961b030565b505050565b602054602b54612ed4916001600160a01b039081169116674563918244f4000061b121565b602c80546001600160a01b0319166001600160a01b0392831617905560205460405163ca669fa760e01b815291166004820181905231905f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b158015612f3b575f5ffd5b505af1158015612f4d573d5f5f3e3d5ffd5b5050602c5460205460405163127b03ab60e31b81526001600160a01b039182166004820152911692506393d81d5891506024015f604051808303815f87803b158015612f97575f5ffd5b505af1158015612fa9573d5f5f3e3d5ffd5b505060208054604080516060810190915260388082526001600160a01b03909216319450612fe69350858511929091906201c8929083013961b030565b5050565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561303a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061305e919061bcf9565b1561306b5761306b61bd10565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156130bb575f5ffd5b505af11580156130cd573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba75f6040518263ffffffff1660e01b81526004015f604051808303818588803b15801561311e575f5ffd5b505af1158015613130573d5f5f3e3d5ffd5b50505050505f602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613186573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131aa919061bcf9565b9050805f036131bb576131bb61bd10565b6131e86040518060400160405280601281526020015f5160206201cd775f395f51905f528152508261afeb565b602b54604051634b16093560e01b8152620186a0600482018190525f92909183916001600160a01b031690634b16093590602401602060405180830381865afa158015613237573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061325b919061bcf9565b90506132806040518060600160405280603281526020016201cbdc603291398261afeb565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156132d0575f5ffd5b505af11580156132e2573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051634d3de35360e01b81528694509092506001600160a01b0390911690634d3de3539061334c9085905f5160206201c7125f395f51905f52905f5160206201c3805f395f51905f529060040161be52565b6020604051808303815f875af1158015613368573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061338c919061bcf9565b602a5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa1580156133d7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526133fe919081019061c41c565b602b5460405163c58343ef60e01b8152600481018590529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015613449573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613470919081019061c0f4565b90506134a78463ffffffff16826040015163ffffffff16146040518060800160405280604881526020016201c3e36048913961b030565b6134d0815f01515f14156040518060600160405280603281526020016201c4806032913961b030565b6134f981602001515f146040518060800160405280604881526020016201cf1b6048913961b030565b613522838260600151146040518060600160405280604081526020016201cde76040913961b030565b6040516348f50c0f60e01b8152620186a060048201525f5160206201c2735f395f51905f52906348f50c0f906024015f604051808303815f87803b158015613568575f5ffd5b505af115801561357a573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156135d7575f5ffd5b505af11580156135e9573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef800915061364c9087905f5160206201ca935f395f51905f52905f5160206201c2935f395f51905f529060040161c21f565b5f604051808303815f87803b158015613663575f5ffd5b505af1158015613675573d5f5f3e3d5ffd5b505050505f5a90505f613688828461c25d565b90506136c16040518060400160405280601981526020015f5160206201c80d5f395f51905f52815250856040015163ffffffff1661afeb565b6136f26040518060400160405280601981526020015f5160206201ca735f395f51905f52815250856020015161afeb565b6137206040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261afeb565b61374d6040518060400160405280601381526020015f5160206201c59e5f395f51905f528152503a61afeb565b60408051808201909152601481525f5160206201c53e5f395f51905f52602082015261377d90610c883a8461c276565b602a5460405163b094728960e01b815260048101889052613809916001600160a01b03169063b094728990602401602060405180830381865afa1580156137c6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137ea919061c29c565b6040518060800160405280604681526020016201ccd36046913961b030565b602b5460405163dc311dd360e01b8152600481018d90525f9182916001600160a01b039091169063dc311dd3906024015f60405180830381865afa158015613853573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261387a919081019061c2d2565b50506001600160401b0316915091506138b56040518060600160405280602c81526020016201c454602c9139836001600160601b031661afeb565b5f6138c96001600160601b0384168e61c25d565b90506138ee6040518060600160405280602781526020016201c517602791398261afeb565b613925613904826001600160601b03861661c3c6565b8e146040518060600160405280602981526020016201c5be6029913961b030565b80156139335761393361bd10565b613958825f146040518060600160405280602a81526020016201c4ed602a913961b030565b602a5460405163c58343ef60e01b8152600481018b90526001600160a01b039091169063c58343ef906024015f60405180830381865afa15801561399e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526139c5919081019061c41c565b97506139ee8860c001516040518060800160405280604381526020016201c7686043913961b030565b6729a2241af62c00005f52602260209081525f5160206201ce275f395f51905f5254602c54604080516397a9c28560e01b81529051613a9c946001600160a01b03909316926397a9c28592600480820193918290030181865afa158015613a57573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a7b919061bcf9565b14156040518060600160405280602681526020016201c92a6026913961b030565b602c54604080516236b65760e11b81529051613ae3926001600160a01b031691626d6cae9160048083019260209291908290030181865afa158015611cc4573d5f5f3e3d5ffd5b602b5460408051633bc32c7560e01b81529051613b2c926001600160a01b031691633bc32c759160048083019260209291908290030181865afa158015612d15573d5f5f3e3d5ffd5b613b8081602b5f9054906101000a90046001600160a01b03166001600160a01b031663995cb36e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f1b573d5f5f3e3d5ffd5b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b158015613bd4575f5ffd5b505af1158015613be6573d5f5f3e3d5ffd5b5050601f54604080516004808252602482018352602082018051631e9acf1760e31b6001600160e01b03909116179052915163f28dceb360e01b81526101009093046001600160a01b03163194505f5160206201c2735f395f51905f52935063f28dceb392613c55920161c550565b5f604051808303815f87803b158015613c6c575f5ffd5b505af1158015613c7e573d5f5f3e3d5ffd5b5050602b54601f5460405163bd18636b60e01b81526001600160a01b03610100909204821660048201529116925063bd18636b91506024015f604051808303815f87803b158015613ccd575f5ffd5b505af1158015613cdf573d5f5f3e3d5ffd5b5050601f54613d269250839150613d0690859061010090046001600160a01b03163161c3c6565b146040518060600160405280603c81526020016201c6d6603c913961b030565b602b54604080516318e3dd2760e01b815290516001600160601b038716926001600160a01b0316916318e3dd279160048083019260209291908290030181865afa158015613d76573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d9a919061c3d9565b6001600160601b031614613db057613db061bd10565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b158015613e04575f5ffd5b505af1158015613e16573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b0316631d2b2afd671bc16d674ec800006040518263ffffffff1660e01b81526004015f604051808303818588803b158015613e6f575f5ffd5b505af1158015613e81573d5f5f3e3d5ffd5b50506040516348f50c0f60e01b8152620186a060048201525f5160206201c2735f395f51905f5293506348f50c0f925060240190505f604051808303815f87803b158015613ecd575f5ffd5b505af1158015613edf573d5f5f3e3d5ffd5b505050505a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529097505f5160206201c2735f395f51905f529063ca669fa7906024015f604051808303815f87803b158015613f3b575f5ffd5b505af1158015613f4d573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef8009150613fb0908d905f5160206201ca93