{
  "_format": "hh-sol-artifact-1",
  "contractName": "CfManagerSoftcap",
  "sourceName": "contracts/managers/crowdfunding-softcap/CfManagerSoftcap.sol",
  "abi": [
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "contractFlavor",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "contractVersion",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "issuer",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "paymentMethod",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenPrice",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokenPricePrecision",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "softCap",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minInvestment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxInvestment",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "whitelistRequired",
              "type": "bool"
            },
            {
              "internalType": "string",
              "name": "info",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "feeManager",
              "type": "address"
            }
          ],
          "internalType": "struct Structs.CampaignConstructor",
          "name": "params",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokensReturned",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "CancelCampaign",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "investor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "CancelInvestment",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "ChangeOwnership",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "investor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "Claim",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "fundsRaised",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokensSold",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokensRefund",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "Finalize",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "investor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenAmount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "tokenValue",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "Invest",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "info",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "setter",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        }
      ],
      "name": "SetInfo",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "cancelCampaign",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cancelInvestment",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "investor",
          "type": "address"
        }
      ],
      "name": "cancelInvestmentFor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "changeOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "investor",
          "type": "address"
        }
      ],
      "name": "claim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "investor",
          "type": "address"
        }
      ],
      "name": "claimedAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "commonState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "flavor",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "version",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "contractAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "string",
              "name": "info",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stablecoin",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "softCap",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "finalized",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "canceled",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "pricePerToken",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "fundsRaised",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "tokensSold",
              "type": "uint256"
            }
          ],
          "internalType": "struct Structs.CampaignCommonState",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "finalize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "flavor",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getInfoHistory",
      "outputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "info",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "timestamp",
              "type": "uint256"
            }
          ],
          "internalType": "struct Structs.InfoEntry[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "flavor",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "version",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "contractAddress",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "issuer",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "stablecoin",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "tokenPrice",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "softCap",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "minInvestment",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maxInvestment",
              "type": "uint256"
            },
            {
              "internalType": "bool",
              "name": "whitelistRequired",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "finalized",
              "type": "bool"
            },
            {
              "internalType": "bool",
              "name": "canceled",
              "type": "bool"
            },
            {
              "internalType": "uint256",
              "name": "totalClaimableTokens",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalInvestorsCount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalClaimsCount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalFundsRaised",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalTokensSold",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "totalTokensBalance",
              "type": "uint256"
            },
            {
              "internalType": "string",
              "name": "info",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "feeManager",
              "type": "address"
            }
          ],
          "internalType": "struct Structs.CfManagerSoftcapState",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "invest",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "beneficiary",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "investForBeneficiary",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "investor",
          "type": "address"
        }
      ],
      "name": "investmentAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "wallet",
          "type": "address"
        }
      ],
      "name": "isWalletWhitelisted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "info",
          "type": "string"
        }
      ],
      "name": "setInfo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stablecoin",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "investor",
          "type": "address"
        }
      ],
      "name": "tokenAmount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405260006018553480156200001657600080fd5b506040516200412938038062004129833981016040819052620000399162000c12565b60408101516001600160a01b03166200006f5760405162461bcd60e51b8152600401620000669062000fea565b60405180910390fd5b60608101516001600160a01b03166200009c5760405162461bcd60e51b8152600401620000669062000fa3565b60008160c0015111620000c35760405162461bcd60e51b8152600401620000669062000f3c565b8061012001518161014001511015620000f05760405162461bcd60e51b81526004016200006690620010be565b600081610140015111620001185760405162461bcd60e51b8152600401620000669062000edf565b60006200012f82606001516200066260201b60201c565b905060006001600160a01b0382166200014d5782608001516200014f565b815b90506001600160a01b0381166200017a5760405162461bcd60e51b815260040162000066906200111b565b60006200019184606001516200072d60201b60201c565b90506000808211620001a8578460e00151620001aa565b815b905060008560e0015111620001d35760405162461bcd60e51b8152600401620000669062001074565b60a08501516000906001600160a01b031615620001f5578560a0015162000273565b836001600160a01b0316631818e2ec6040518163ffffffff1660e01b815260040160006040518083038186803b1580156200022f57600080fd5b505afa15801562000244573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200026e919081019062000d74565b608001515b90506000620002ad6200029c8861010001518960c001518a6060015186620007e360201b60201c565b60c089015160608a01518562000840565b90506000620002e7620002d68961012001518a60c001518b6060015187620007e360201b60201c565b60c08a015160608b01518662000840565b9050604051806102c001604052808960000151815260200189602001518152602001306001600160a01b0316815260200189604001516001600160a01b0316815260200189606001516001600160a01b03168152602001876001600160a01b03168152602001846001600160a01b031681526020018960c00151815260200185815260200183815260200182815260200189610140015181526020018961016001511515815260200160001515815260200160001515815260200160008152602001600081526020016000815260200160008152602001600081526020018961018001518152602001896101a001516001600160a01b03168152506000808201518160000190805190602001906200040192919062000970565b5060208281015180516200041c926001850192019062000970565b5060408201516002820180546001600160a01b039283166001600160a01b0319918216179091556060840151600384018054918416918316919091179055608084015160048401805491841691831691909117905560a084015160058401805491841691831691909117905560c084015160068401805491909316911617905560e082015160078201556101008083015160088301556101208301516009830155610140830151600a830155610160830151600b830155610180830151600c830180546101a08601516101c08701511515620100000262ff00001991151590950261ff001994151560ff19909316929092179390931617919091169190911790556101e0820151600d820155610200820151600e820155610220820151600f8201556102408201516010820155610260820151601182015561028082015180516200057291601284019160209091019062000970565b506102a08201518160130160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550905050816200063389606001516001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015620005e757600080fd5b505afa158015620005fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000622919062000e7e565b60c08b015160608c01518762000840565b1015620006545760405162461bcd60e51b8152600401620000669062001031565b50505050505050506200139f565b60408051600481526024810182526020810180516001600160e01b031663060638bb60e21b1790529051600091829182916001600160a01b03861691620006aa919062000ec1565b600060405180830381855afa9150503d8060008114620006e7576040519150601f19603f3d011682016040523d82523d6000602084013e620006ec565b606091505b50915091508115620007215760008180602001905181019062000710919062000ab1565b610120015193506200072892505050565b6000925050505b919050565b60408051600481526024810182526020810180516001600160e01b0316633093f85b60e21b1790529051600091829182916001600160a01b0386169162000775919062000ec1565b600060405180830381855afa9150503d8060008114620007b2576040519150601f19603f3d011682016040523d82523d6000602084013e620007b7565b606091505b50915091508115620007215780806020019051810190620007d9919062000e7e565b9250505062000728565b6000620007f0826200086f565b84620007fc856200086f565b6200080786620008f9565b620008139089620012e1565b6200081f9190620012e1565b6200082b919062001188565b62000837919062001188565b95945050505050565b60006200084d836200086f565b6200085884620008f9565b62000863846200086f565b620008138789620012e1565b6000816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015620008ab57600080fd5b505afa158015620008c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008e6919062000e97565b620008f390600a620011f6565b92915050565b6000816001600160a01b031663c24fe16c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200093557600080fd5b505afa1580156200094a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008f3919062000e7e565b8280546200097e9062001336565b90600052602060002090601f016020900481019282620009a25760008555620009ed565b82601f10620009bd57805160ff1916838001178555620009ed565b82800160010185558215620009ed579182015b82811115620009ed578251825591602001919060010190620009d0565b50620009fb929150620009ff565b5090565b5b80821115620009fb576000815560010162000a00565b80516001600160a01b03811681146200072857600080fd5b805180151581146200072857600080fd5b600082601f83011262000a50578081fd5b81516001600160401b0381111562000a6c5762000a6c62001389565b62000a81601f8201601f19166020016200115c565b81815284602083860101111562000a96578283fd5b62000aa982602083016020870162001303565b949350505050565b60006020828403121562000ac3578081fd5b81516001600160401b038082111562000ada578283fd5b818401915061014080838703121562000af1578384fd5b62000afc816200115c565b905082518281111562000b0d578485fd5b62000b1b8782860162000a3f565b82525060208301518281111562000b30578485fd5b62000b3e8782860162000a3f565b60208301525062000b526040840162000a16565b604082015262000b656060840162000a16565b606082015260808301518281111562000b7c578485fd5b62000b8a8782860162000a3f565b60808301525060a08301518281111562000ba2578485fd5b62000bb08782860162000a3f565b60a08301525060c08301518281111562000bc8578485fd5b62000bd68782860162000a3f565b60c08301525060e083810151908201526101008084015190820152610120915062000c0382840162000a16565b91810191909152949350505050565b60006020828403121562000c24578081fd5b81516001600160401b038082111562000c3b578283fd5b81840191506101c080838703121562000c52578384fd5b62000c5d816200115c565b905082518281111562000c6e578485fd5b62000c7c8782860162000a3f565b82525060208301518281111562000c91578485fd5b62000c9f8782860162000a3f565b60208301525062000cb36040840162000a16565b604082015262000cc66060840162000a16565b606082015262000cd96080840162000a16565b608082015262000cec60a0840162000a16565b60a082015260c0838101519082015260e0808401519082015261010080840151908201526101208084015190820152610140808401519082015261016062000d3681850162000a2e565b90820152610180838101518381111562000d4e578586fd5b62000d5c8882870162000a3f565b8284015250506101a0915062000c0382840162000a16565b60006020828403121562000d86578081fd5b81516001600160401b038082111562000d9d578283fd5b9083019060e0828603121562000db1578283fd5b62000dbd60e06200115c565b82518281111562000dcc578485fd5b62000dda8782860162000a3f565b82525060208301518281111562000def578485fd5b62000dfd8782860162000a3f565b60208301525062000e116040840162000a16565b604082015262000e246060840162000a16565b606082015262000e376080840162000a16565b608082015262000e4a60a0840162000a16565b60a082015260c08301518281111562000e61578485fd5b62000e6f8782860162000a3f565b60c08301525095945050505050565b60006020828403121562000e90578081fd5b5051919050565b60006020828403121562000ea9578081fd5b815160ff8116811462000eba578182fd5b9392505050565b6000825162000ed581846020870162001303565b9190910192915050565b60208082526039908201527f43664d616e61676572536f66746361703a204d617820696e766573746d656e7460408201527f2068617320746f20626520626967676572207468616e20302e00000000000000606082015260800190565b60208082526041908201527f43664d616e61676572536f66746361703a20496e697469616c2070726963652060408201527f70657220746f6b656e206d7573742062652067726561746572207468616e20306060820152601760f91b608082015260a00190565b60208082526027908201527f43664d616e61676572536f66746361703a20496e76616c6964206173736574206040820152666164647265737360c81b606082015260800190565b60208082526027908201527f43664d616e61676572536f66746361703a20496e76616c6964206f776e6572206040820152666164647265737360c81b606082015260800190565b60208082526023908201527f43664d616e61676572536f66746361703a20496e76616c696420736f6674206360408201526230b81760e91b606082015260800190565b6020808252602a908201527f43664d616e61676572536f66746361703a20496e76616c696420707269636520604082015269383932b1b4b9b4b7b71760b11b606082015260800190565b6020808252603b908201527f43664d616e61676572536f66746361703a204d61782068617320746f2062652060408201527f626967676572207468616e206d696e20696e766573746d656e742e0000000000606082015260800190565b60208082526021908201527f43664d616e61676572536f66746361703a20496e76616c6964206973737565726040820152601760f91b606082015260800190565b6040518181016001600160401b038111828210171562001180576200118062001389565b604052919050565b600082620011a457634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611620011bd5750620011ed565b818704821115620011d257620011d262001373565b80861615620011e057918102915b9490941c938002620011ac565b94509492505050565b600062000eba60001960ff851684600082620012155750600162000eba565b81620012245750600062000eba565b81600181146200123d576002811462001248576200127c565b600191505062000eba565b60ff8411156200125c576200125c62001373565b6001841b91508482111562001275576200127562001373565b5062000eba565b5060208310610133831016604e8410600b8410161715620012b4575081810a83811115620012ae57620012ae62001373565b62000eba565b620012c38484846001620011a9565b808604821115620012d857620012d862001373565b02949350505050565b6000816000190483118215151615620012fe57620012fe62001373565b500290565b60005b838110156200132057818101518382015260200162001306565b8381111562001330576000848401525b50505050565b6002810460018216806200134b57607f821691505b602082108114156200136d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b612d7a80620013af6000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806367c5bd54116100ad578063a96b7f0511610071578063a96b7f051461022f578063aac8f96714610242578063e9cbd82214610262578063ed0ea00314610277578063f59e4f651461028a57610121565b806367c5bd54146101e4578063937f6e77146101f757806394f8e9541461020a578063980e78441461021257806398e162551461021a57610121565b80632af4c31e116100f45780632af4c31e1461018e5780632afcf480146101a157806336921c0c146101b45780634bb278f3146101c757806354fd4d50146101cf57610121565b806304e86903146101265780631818e2ec1461014f5780631865c57d146101645780631e83409a14610179575b600080fd5b610139610134366004611f3b565b610292565b6040516101469190612b0e565b60405180910390f35b6101576102ad565b6040516101469190612861565b61016c6104f6565b604051610146919061296c565b61018c610187366004611f3b565b61081a565b005b61018c61019c366004611f3b565b610956565b61018c6101af366004612085565b6109da565b61018c6101c2366004611f84565b6109e8565b61018c610a39565b6101d7610d6f565b6040516101469190612275565b61018c6101f2366004611f3b565b610e04565b61018c610205366004611fe4565b610e35565b61018c610f14565b61018c610f47565b6102226110b9565b60405161014691906121f7565b61013961023d366004611f3b565b6111b4565b610255610250366004611f3b565b6111cf565b604051610146919061226a565b61026a6111fb565b6040516101469190612131565b610139610285366004611f3b565b61120a565b6101d7611225565b6001600160a01b031660009081526015602052604090205490565b6102b5611d2f565b604051806101a001604052806000800180546102d090612cc8565b80601f01602080910402602001604051908101604052809291908181526020018280546102fc90612cc8565b80156103495780601f1061031e57610100808354040283529160200191610349565b820191906000526020600020905b81548152906001019060200180831161032c57829003601f168201915b505050505081526020016000600101805461036390612cc8565b80601f016020809104026020016040519081016040528092919081815260200182805461038f90612cc8565b80156103dc5780601f106103b1576101008083540402835291602001916103dc565b820191906000526020600020905b8154815290600101906020018083116103bf57829003601f168201915b50505091835250506002546001600160a01b0390811660208301526003541660408201526012805460609092019161041390612cc8565b80601f016020809104026020016040519081016040528092919081815260200182805461043f90612cc8565b801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b50505091835250506004546001600160a01b0390811660208301526006541660408201526009546060820152600c5460ff6101008083048216151560808501526201000090920416151560a083015260075460c0830152600f5460e0830152601054910152905090565b6104fe611dbf565b604051806102c0016040528060008001805461051990612cc8565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612cc8565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b50505050508152602001600060010180546105ac90612cc8565b80601f01602080910402602001604051908101604052809291908181526020018280546105d890612cc8565b80156106255780601f106105fa57610100808354040283529160200191610625565b820191906000526020600020905b81548152906001019060200180831161060857829003601f168201915b50505091835250506002546001600160a01b0390811660208301526003548116604083015260045481166060830152600554811660808301526006541660a082015260075460c082015260095460e0820152600a5461010080830191909152600b54610120830152600c5460ff808216151561014085015291810482161515610160840152620100009004161515610180820152600d546101a0820152600e546101c08201526018546101e0820152600f54610200820152601054610220820152610240016106f2611236565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161071d9190612131565b60206040518083038186803b15801561073557600080fd5b505afa158015610749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076d919061209d565b81526020016000601201805461078290612cc8565b80601f01602080910402602001604051908101604052809291908181526020018280546107ae90612cc8565b80156107fb5780601f106107d0576101008083540402835291602001916107fb565b820191906000526020600020905b8154815290600101906020018083116107de57829003601f168201915b50505091835250506013546001600160a01b0316602090910152905090565b600c54610100900460ff1661084a5760405162461bcd60e51b815260040161084190612817565b60405180910390fd5b6001600160a01b038116600090815260156020908152604080832054601690925290912054811580159061087e5750600081115b61089a5760405162461bcd60e51b8152600401610841906126d0565b6001601860008282546108ad9190612b17565b9091555050600d80548391906000906108c7908490612c85565b90915550506001600160a01b03831660009081526015602052604081205561090283836108f2611236565b6001600160a01b03169190611245565b6004546040516001600160a01b03858116927f9137e112a187039f8a3291c0a66fce97153d25ec42036e82360d5d0106d19a6e9261094992909116908690869042906121a3565b60405180910390a2505050565b6003546001600160a01b031633146109805760405162461bcd60e51b815260040161084190612334565b600380546001600160a01b0319166001600160a01b0383161790556040517fb4fa0c8f1565e6385961540cac5b9884d84157c515100cf972728e8be8dacdd3906109cf90339084904290612145565b60405180910390a150565b6109e533338361129b565b50565b816001600160a01b0316836001600160a01b031614610a29576001600160a01b0383163314610a295760405162461bcd60e51b815260040161084190612382565b610a3483838361129b565b505050565b6003546001600160a01b03163314610a635760405162461bcd60e51b815260040161084190612334565b600c5462010000900460ff1615610a8c5760405162461bcd60e51b815260040161084190612712565b600c54610100900460ff1615610ab45760405162461bcd60e51b8152600401610841906125f6565b6000610abe6111fb565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610aee9190612131565b60206040518083038186803b158015610b0657600080fd5b505afa158015610b1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3e919061209d565b60095490915081101580610b575750610b556116c4565b155b610b735760405162461bcd60e51b815260040161084190612439565b600c805461ff0019166101001790556000610b8c611236565b6010546040516370a0823160e01b81529192509060009082906001600160a01b038516906370a0823190610bc4903090600401612131565b60206040518083038186803b158015610bdc57600080fd5b505afa158015610bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c14919061209d565b610c1e9190612c85565b6004805460408051631629a1fb60e21b815290519394506001600160a01b03909116926358a687ec9282810192600092919082900301818387803b158015610c6557600080fd5b505af1158015610c79573d6000803e3d6000fd5b505050506000841115610d0157600080610c91611722565b91509150600081118015610cad57506001600160a01b03821615155b15610cea57610cc66001600160a01b0388168383611245565b610ce533610cd48389612c85565b6001600160a01b038a169190611245565b610cfe565b610cfe6001600160a01b0388163388611245565b50505b8015610d1b57610d1b6001600160a01b0384163383611245565b60045460405133917fc7ffb23c3f55c770b94ffcdbbe7d3b0520a2e76b9abe111f43c7c48cab999a6a91610d60916001600160a01b03169088908790879042906121c9565b60405180910390a25050505050565b606060006001018054610d8190612cc8565b80601f0160208091040260200160405190810160405280929190818152602001828054610dad90612cc8565b8015610dfa5780601f10610dcf57610100808354040283529160200191610dfa565b820191906000526020600020905b815481529060010190602001808311610ddd57829003601f168201915b5050505050905090565b600c5462010000900460ff16610e2c5760405162461bcd60e51b8152600401610841906127a7565b6109e5816117fa565b6003546001600160a01b03163314610e5f5760405162461bcd60e51b815260040161084190612334565b6040805180820190915281815242602080830191909152601480546001810182556000919091528251805160029092027fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0192610ec192849290910190611ea2565b506020918201516001909101558151610ee09160129190840190611ea2565b507f39b28594242c42fce47a0a6e63bac12adbd07fbb35580f5a54b236858101d58a8133426040516109cf93929190612288565b600c54610100900460ff1615610f3c5760405162461bcd60e51b8152600401610841906125f6565b610f45336117fa565b565b6003546001600160a01b03163314610f715760405162461bcd60e51b815260040161084190612334565b600c5462010000900460ff1615610f9a5760405162461bcd60e51b815260040161084190612712565b600c54610100900460ff1615610fc25760405162461bcd60e51b8152600401610841906125f6565b600c805462ff00001916620100001790556000610fdd611236565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016110089190612131565b60206040518083038186803b15801561102057600080fd5b505afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611058919061209d565b9050801561106d5761106d33826108f2611236565b60045460405133917faf1ae5c6fb3f0ce445b207ae00f52f0b564d8fe58282727032de5d199eaa7981916110ae916001600160a01b03169085904290612182565b60405180910390a250565b60606014805480602002602001604051908101604052809291908181526020016000905b828210156111ab578382906000526020600020906002020160405180604001604052908160008201805461111090612cc8565b80601f016020809104026020016040519081016040528092919081815260200182805461113c90612cc8565b80156111895780601f1061115e57610100808354040283529160200191611189565b820191906000526020600020905b81548152906001019060200180831161116c57829003601f168201915b50505050508152602001600182015481525050815260200190600101906110dd565b50505050905090565b6001600160a01b031660009081526017602052604090205490565b600c5460009060ff1615806111f55750600c5460ff1680156111f557506111f582611937565b92915050565b6006546001600160a01b031690565b6001600160a01b031660009081526016602052604090205490565b6060600080018054610d8190612cc8565b6004546001600160a01b031690565b610a348363a9059cbb60e01b8484604051602401611264929190612169565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526119b8565b600c5462010000900460ff16156112c45760405162461bcd60e51b815260040161084190612712565b600c54610100900460ff16156112ec5760405162461bcd60e51b8152600401610841906125f6565b816112f6816111cf565b6113125760405162461bcd60e51b8152600401610841906125b3565b600082116113325760405162461bcd60e51b815260040161084190612673565b600061133c611236565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016113679190612131565b60206040518083038186803b15801561137f57600080fd5b505afa158015611393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b7919061209d565b60095460075460045460065493945091926113e1928592916001600160a01b039182169116611a47565b10156113ff5760405162461bcd60e51b815260040161084190612556565b600d5460009061140f9083612c85565b60075460045460065492935060009261143892889290916001600160a01b039182169116611a95565b60075460045460065492935060009261146192859290916001600160a01b039182169116611a47565b90506000821180156114735750600081115b61148f5760405162461bcd60e51b8152600401610841906124b3565b818310156114af5760405162461bcd60e51b8152600401610841906124f9565b6001600160a01b0387166000908152601560205260408120546114f1906114d69085612b17565b6007546004546006546001600160a01b039182169116611a47565b90506114fc84611abd565b81101561151b5760405162461bcd60e51b8152600401610841906124b3565b600b5481111561153d5760405162461bcd60e51b8152600401610841906122ed565b61155c89308461154b6111fb565b6001600160a01b0316929190611b01565b6001600160a01b0388166000908152601560205260409020546115955760016000600e01600082825461158f9190612b17565b90915550505b6001600160a01b038816600090815260156020526040812080548592906115bd908490612b17565b90915550506001600160a01b038816600090815260166020526040812080548492906115ea908490612b17565b90915550506001600160a01b03881660009081526017602052604081208054859290611617908490612b17565b9091555050600d8054849190600090611631908490612b17565b90915550506010805484919060009061164b908490612b17565b9091555050600f8054839190600090611665908490612b17565b90915550506004546040516001600160a01b038a8116927ff29b7b9c9bc4f1c24045a5a10b8bb59a7318d7a1e2e46af68bd5560dfce0e044926116b192909116908790879042906121a3565b60405180910390a2505050505050505050565b600f5460095460009182916116f7916116dc91612c85565b6007546004546006546001600160a01b039182169116611a95565b60075460045460065492935061171c928492916001600160a01b039081169116611a47565b91505090565b6013546040516000918291829182916001600160a01b039091169061174b903090602401612131565b60408051601f198184030181529181526020820180516001600160e01b03166308cbebd760e31b179052516117809190612115565b6000604051808303816000865af19150503d80600081146117bd576040519150601f19603f3d011682016040523d82523d6000602084013e6117c2565b606091505b509150915081156117ec57808060200190518101906117e19190611f57565b9350935050506117f6565b6000809350935050505b9091565b6001600160a01b038116600090815260156020908152604080832054601690925290912054811580159061182e5750600081115b61184a5760405162461bcd60e51b8152600401610841906122b6565b60016000600e0160008282546118609190612c85565b90915550506001600160a01b03831660009081526015602090815260408083208390556016825280832083905560179091528120819055600d80548492906118a9908490612c85565b9091555050601080548391906000906118c3908490612c85565b9091555050600f80548291906000906118dd908490612c85565b909155506118f0905083826108f26111fb565b6004546040516001600160a01b03858116927f211dda46c5b3693e6a4dae7489d6a6738cf8a0104ce5b5ddbb477496a796e3ba9261094992909116908690869042906121a3565b600554604051633657e85160e01b81526000916001600160a01b031690633657e85190611968908590600401612131565b60206040518083038186803b15801561198057600080fd5b505afa158015611994573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f59190611fc4565b6000611a0d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b289092919063ffffffff16565b805190915015610a345780806020019051810190611a2b9190611fc4565b610a345760405162461bcd60e51b81526004016108419061275d565b6000611a5283611b3f565b611a5b84611bbd565b611a6484611b3f565b611a6e8789612c66565b611a789190612c66565b611a829190612b2f565b611a8c9190612b2f565b95945050505050565b6000611aa082611b3f565b84611aaa85611b3f565b611ab386611bbd565b611a6e9089612c66565b6007546004546006546000928392611ae4928692916001600160a01b039081169116611a47565b600a549091508110611af857600a54611afa565b805b9392505050565b611b22846323b872dd60e01b85858560405160240161126493929190612145565b50505050565b6060611b378484600085611c30565b949350505050565b6000816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611b7a57600080fd5b505afa158015611b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb291906120b5565b6111f590600a612b95565b6000816001600160a01b031663c24fe16c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611bf857600080fd5b505afa158015611c0c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f5919061209d565b606082471015611c525760405162461bcd60e51b8152600401610841906123f3565b611c5b85611cf0565b611c775760405162461bcd60e51b81526004016108419061263c565b600080866001600160a01b03168587604051611c939190612115565b60006040518083038185875af1925050503d8060008114611cd0576040519150601f19603f3d011682016040523d82523d6000602084013e611cd5565b606091505b5091509150611ce5828286611cf6565b979650505050505050565b3b151590565b60608315611d05575081611afa565b825115611d155782518084602001fd5b8160405162461bcd60e51b81526004016108419190612275565b604051806101a00160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000151581526020016000151581526020016000815260200160008152602001600081525090565b604051806102c00160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581526020016000151581526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006001600160a01b031681525090565b828054611eae90612cc8565b90600052602060002090601f016020900481019282611ed05760008555611f16565b82601f10611ee957805160ff1916838001178555611f16565b82800160010185558215611f16579182015b82811115611f16578251825591602001919060010190611efb565b50611f22929150611f26565b5090565b5b80821115611f225760008155600101611f27565b600060208284031215611f4c578081fd5b8135611afa81612d2f565b60008060408385031215611f69578081fd5b8251611f7481612d2f565b6020939093015192949293505050565b600080600060608486031215611f98578081fd5b8335611fa381612d2f565b92506020840135611fb381612d2f565b929592945050506040919091013590565b600060208284031215611fd5578081fd5b81518015158114611afa578182fd5b60006020808385031215611ff6578182fd5b823567ffffffffffffffff8082111561200d578384fd5b818501915085601f830112612020578384fd5b81358181111561203257612032612d19565b604051601f8201601f191681018501838111828210171561205557612055612d19565b604052818152838201850188101561206b578586fd5b818585018683013790810190930193909352509392505050565b600060208284031215612096578081fd5b5035919050565b6000602082840312156120ae578081fd5b5051919050565b6000602082840312156120c6578081fd5b815160ff81168114611afa578182fd5b6001600160a01b03169052565b15159052565b60008151808452612101816020860160208601612c9c565b601f01601f19169290920160200192915050565b60008251612127818460208701612c9c565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6001600160a01b03959095168552602085019390935260408401919091526060830152608082015260a00190565b60208082528251828201819052600091906040908185019080840286018301878501865b8381101561225c57888303603f190185528151805187855261223f888601826120e9565b91890151948901949094529487019492509086019060010161221b565b509098975050505050505050565b901515815260200190565b600060208252611afa60208301846120e9565b60006060825261229b60608301866120e9565b6001600160a01b039490941660208301525060400152919050565b6020808252601c908201527f4143664d616e616765723a204e6f20746f6b656e73206f776e65642e00000000604082015260600190565b60208082526027908201527f4143664d616e616765723a20496e766573746d656e7420616d6f756e7420746f60408201526637903434b3b41760c91b606082015260800190565b6020808252602e908201527f4143664d616e616765723a204f6e6c79206f776e65722063616e2063616c6c2060408201526d3a3434b990333ab731ba34b7b71760911b606082015260800190565b6020808252604b908201527f4143664d616e616765723a204f6e6c79207370656e6465722063616e2064656360408201527f69646520746f20626f6f6b2074686520696e766573746d656e74206f6e20736f60608201526a36b2b7b7329032b639b29760a91b608082015260a00190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b60208082526054908201527f4143664d616e616765723a2043616e206f6e6c792066696e616c697a6520636160408201527f6d706169676e20696620746865206d696e696d756d2066756e64696e6720676f60608201527330b6103430b9903132b2b7103932b0b1b432b21760611b608082015260a00190565b60208082526026908201527f4143664d616e616765723a20496e766573746d656e7420616d6f756e7420746f60408201526537903637bb9760d11b606082015260800190565b6020808252603e908201527f4143664d616e616765723a204e6f7420656e6f75676820746f6b656e73206c6560408201527f667420666f72207468697320696e766573746d656e7420616d6f756e742e0000606082015260800190565b6020808252603c908201527f4143664d616e616765723a206e6f7420656e6f75676820746f6b656e7320666f60408201527f722073616c6520746f2072656163682074686520736f66746361702e00000000606082015260800190565b60208082526023908201527f4143664d616e616765723a2057616c6c6574206e6f742077686974656c69737460408201526232b21760e91b606082015260800190565b60208082526026908201527f4143664d616e616765723a205468652063616d706169676e2069732066696e616040820152653634bd32b21760d11b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526037908201527f4143664d616e616765723a20496e766573746d656e7420616d6f756e7420686160408201527f7320746f2062652067726561746572207468616e20302e000000000000000000606082015260800190565b60208082526022908201527f43664d616e61676572536f66746361703a204e6f20746f6b656e73206f776e65604082015261321760f11b606082015260800190565b6020808252602b908201527f4143664d616e616765723a205468652063616d706169676e206861732062656560408201526a371031b0b731b2b632b21760a91b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252604a908201527f4143664d616e616765723a2043616e206f6e6c792063616e63656c20666f722060408201527f736f6d656f6e65206966207468652063616d706169676e20686173206265656e6060820152691031b0b731b2b632b21760b11b608082015260a00190565b6020808252602a908201527f4143664d616e616765723a205468652063616d706169676e206973206e6f74206040820152693334b730b634bd32b21760b11b606082015260800190565b60006020825282516101a08060208501526128806101c08501836120e9565b91506020850151601f198086850301604087015261289e84836120e9565b9350604087015191506128b460608701836120d6565b606087015191506128c860808701836120d6565b60808701519150808685030160a0870152506128e483826120e9565b92505060a08501516128f960c08601826120d6565b5060c085015161290c60e08601826120d6565b5060e08501516101008581019190915285015161012061292e818701836120e3565b8601519050610140612942868201836120e3565b86015161016086810191909152860151610180808701919091529095015193019290925250919050565b60006020825282516102c080602085015261298b6102e08501836120e9565b91506020850151601f19808685030160408701526129a984836120e9565b9350604087015191506129bf60608701836120d6565b606087015191506129d360808701836120d6565b608087015191506129e760a08701836120d6565b60a087015191506129fb60c08701836120d6565b60c08701519150612a0f60e08701836120d6565b60e0870151610100878101919091528701516101208088019190915287015161014080880191909152870151610160808801919091528701519150610180612a59818801846120e3565b87015191506101a0612a6d878201846120e3565b87015191506101c0612a81878201846120e3565b8701516101e087810191909152870151610200808801919091528701516102208088019190915287015161024080880191909152870151610260808801919091528701516102808088019190915287015186850382016102a080890191909152909250612aee85846120e9565b94508088015192505050612b04828601826120d6565b5090949350505050565b90815260200190565b60008219821115612b2a57612b2a612d03565b500190565b600082612b4a57634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611612b615750612b8c565b818704821115612b7357612b73612d03565b80861615612b8057918102915b9490941c938002612b52565b94509492505050565b6000611afa60001960ff851684600082612bb157506001611afa565b81612bbe57506000611afa565b8160018114612bd45760028114612bde57612c0b565b6001915050611afa565b60ff841115612bef57612bef612d03565b6001841b915084821115612c0557612c05612d03565b50611afa565b5060208310610133831016604e8410600b8410161715612c3e575081810a83811115612c3957612c39612d03565b611afa565b612c4b8484846001612b4f565b808604821115612c5d57612c5d612d03565b02949350505050565b6000816000190483118215151615612c8057612c80612d03565b500290565b600082821015612c9757612c97612d03565b500390565b60005b83811015612cb7578181015183820152602001612c9f565b83811115611b225750506000910152565b600281046001821680612cdc57607f821691505b60208210811415612cfd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146109e557600080fdfea264697066735822122037de3e9bb4017cf34b7d44d6d35012b94a20a9d9f4cdc93daf07f6856cabdefa64736f6c63430008000033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c806367c5bd54116100ad578063a96b7f0511610071578063a96b7f051461022f578063aac8f96714610242578063e9cbd82214610262578063ed0ea00314610277578063f59e4f651461028a57610121565b806367c5bd54146101e4578063937f6e77146101f757806394f8e9541461020a578063980e78441461021257806398e162551461021a57610121565b80632af4c31e116100f45780632af4c31e1461018e5780632afcf480146101a157806336921c0c146101b45780634bb278f3146101c757806354fd4d50146101cf57610121565b806304e86903146101265780631818e2ec1461014f5780631865c57d146101645780631e83409a14610179575b600080fd5b610139610134366004611f3b565b610292565b6040516101469190612b0e565b60405180910390f35b6101576102ad565b6040516101469190612861565b61016c6104f6565b604051610146919061296c565b61018c610187366004611f3b565b61081a565b005b61018c61019c366004611f3b565b610956565b61018c6101af366004612085565b6109da565b61018c6101c2366004611f84565b6109e8565b61018c610a39565b6101d7610d6f565b6040516101469190612275565b61018c6101f2366004611f3b565b610e04565b61018c610205366004611fe4565b610e35565b61018c610f14565b61018c610f47565b6102226110b9565b60405161014691906121f7565b61013961023d366004611f3b565b6111b4565b610255610250366004611f3b565b6111cf565b604051610146919061226a565b61026a6111fb565b6040516101469190612131565b610139610285366004611f3b565b61120a565b6101d7611225565b6001600160a01b031660009081526015602052604090205490565b6102b5611d2f565b604051806101a001604052806000800180546102d090612cc8565b80601f01602080910402602001604051908101604052809291908181526020018280546102fc90612cc8565b80156103495780601f1061031e57610100808354040283529160200191610349565b820191906000526020600020905b81548152906001019060200180831161032c57829003601f168201915b505050505081526020016000600101805461036390612cc8565b80601f016020809104026020016040519081016040528092919081815260200182805461038f90612cc8565b80156103dc5780601f106103b1576101008083540402835291602001916103dc565b820191906000526020600020905b8154815290600101906020018083116103bf57829003601f168201915b50505091835250506002546001600160a01b0390811660208301526003541660408201526012805460609092019161041390612cc8565b80601f016020809104026020016040519081016040528092919081815260200182805461043f90612cc8565b801561048c5780601f106104615761010080835404028352916020019161048c565b820191906000526020600020905b81548152906001019060200180831161046f57829003601f168201915b50505091835250506004546001600160a01b0390811660208301526006541660408201526009546060820152600c5460ff6101008083048216151560808501526201000090920416151560a083015260075460c0830152600f5460e0830152601054910152905090565b6104fe611dbf565b604051806102c0016040528060008001805461051990612cc8565b80601f016020809104026020016040519081016040528092919081815260200182805461054590612cc8565b80156105925780601f1061056757610100808354040283529160200191610592565b820191906000526020600020905b81548152906001019060200180831161057557829003601f168201915b50505050508152602001600060010180546105ac90612cc8565b80601f01602080910402602001604051908101604052809291908181526020018280546105d890612cc8565b80156106255780601f106105fa57610100808354040283529160200191610625565b820191906000526020600020905b81548152906001019060200180831161060857829003601f168201915b50505091835250506002546001600160a01b0390811660208301526003548116604083015260045481166060830152600554811660808301526006541660a082015260075460c082015260095460e0820152600a5461010080830191909152600b54610120830152600c5460ff808216151561014085015291810482161515610160840152620100009004161515610180820152600d546101a0820152600e546101c08201526018546101e0820152600f54610200820152601054610220820152610240016106f2611236565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161071d9190612131565b60206040518083038186803b15801561073557600080fd5b505afa158015610749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061076d919061209d565b81526020016000601201805461078290612cc8565b80601f01602080910402602001604051908101604052809291908181526020018280546107ae90612cc8565b80156107fb5780601f106107d0576101008083540402835291602001916107fb565b820191906000526020600020905b8154815290600101906020018083116107de57829003601f168201915b50505091835250506013546001600160a01b0316602090910152905090565b600c54610100900460ff1661084a5760405162461bcd60e51b815260040161084190612817565b60405180910390fd5b6001600160a01b038116600090815260156020908152604080832054601690925290912054811580159061087e5750600081115b61089a5760405162461bcd60e51b8152600401610841906126d0565b6001601860008282546108ad9190612b17565b9091555050600d80548391906000906108c7908490612c85565b90915550506001600160a01b03831660009081526015602052604081205561090283836108f2611236565b6001600160a01b03169190611245565b6004546040516001600160a01b03858116927f9137e112a187039f8a3291c0a66fce97153d25ec42036e82360d5d0106d19a6e9261094992909116908690869042906121a3565b60405180910390a2505050565b6003546001600160a01b031633146109805760405162461bcd60e51b815260040161084190612334565b600380546001600160a01b0319166001600160a01b0383161790556040517fb4fa0c8f1565e6385961540cac5b9884d84157c515100cf972728e8be8dacdd3906109cf90339084904290612145565b60405180910390a150565b6109e533338361129b565b50565b816001600160a01b0316836001600160a01b031614610a29576001600160a01b0383163314610a295760405162461bcd60e51b815260040161084190612382565b610a3483838361129b565b505050565b6003546001600160a01b03163314610a635760405162461bcd60e51b815260040161084190612334565b600c5462010000900460ff1615610a8c5760405162461bcd60e51b815260040161084190612712565b600c54610100900460ff1615610ab45760405162461bcd60e51b8152600401610841906125f6565b6000610abe6111fb565b90506000816001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401610aee9190612131565b60206040518083038186803b158015610b0657600080fd5b505afa158015610b1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3e919061209d565b60095490915081101580610b575750610b556116c4565b155b610b735760405162461bcd60e51b815260040161084190612439565b600c805461ff0019166101001790556000610b8c611236565b6010546040516370a0823160e01b81529192509060009082906001600160a01b038516906370a0823190610bc4903090600401612131565b60206040518083038186803b158015610bdc57600080fd5b505afa158015610bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c14919061209d565b610c1e9190612c85565b6004805460408051631629a1fb60e21b815290519394506001600160a01b03909116926358a687ec9282810192600092919082900301818387803b158015610c6557600080fd5b505af1158015610c79573d6000803e3d6000fd5b505050506000841115610d0157600080610c91611722565b91509150600081118015610cad57506001600160a01b03821615155b15610cea57610cc66001600160a01b0388168383611245565b610ce533610cd48389612c85565b6001600160a01b038a169190611245565b610cfe565b610cfe6001600160a01b0388163388611245565b50505b8015610d1b57610d1b6001600160a01b0384163383611245565b60045460405133917fc7ffb23c3f55c770b94ffcdbbe7d3b0520a2e76b9abe111f43c7c48cab999a6a91610d60916001600160a01b03169088908790879042906121c9565b60405180910390a25050505050565b606060006001018054610d8190612cc8565b80601f0160208091040260200160405190810160405280929190818152602001828054610dad90612cc8565b8015610dfa5780601f10610dcf57610100808354040283529160200191610dfa565b820191906000526020600020905b815481529060010190602001808311610ddd57829003601f168201915b5050505050905090565b600c5462010000900460ff16610e2c5760405162461bcd60e51b8152600401610841906127a7565b6109e5816117fa565b6003546001600160a01b03163314610e5f5760405162461bcd60e51b815260040161084190612334565b6040805180820190915281815242602080830191909152601480546001810182556000919091528251805160029092027fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0192610ec192849290910190611ea2565b506020918201516001909101558151610ee09160129190840190611ea2565b507f39b28594242c42fce47a0a6e63bac12adbd07fbb35580f5a54b236858101d58a8133426040516109cf93929190612288565b600c54610100900460ff1615610f3c5760405162461bcd60e51b8152600401610841906125f6565b610f45336117fa565b565b6003546001600160a01b03163314610f715760405162461bcd60e51b815260040161084190612334565b600c5462010000900460ff1615610f9a5760405162461bcd60e51b815260040161084190612712565b600c54610100900460ff1615610fc25760405162461bcd60e51b8152600401610841906125f6565b600c805462ff00001916620100001790556000610fdd611236565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016110089190612131565b60206040518083038186803b15801561102057600080fd5b505afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611058919061209d565b9050801561106d5761106d33826108f2611236565b60045460405133917faf1ae5c6fb3f0ce445b207ae00f52f0b564d8fe58282727032de5d199eaa7981916110ae916001600160a01b03169085904290612182565b60405180910390a250565b60606014805480602002602001604051908101604052809291908181526020016000905b828210156111ab578382906000526020600020906002020160405180604001604052908160008201805461111090612cc8565b80601f016020809104026020016040519081016040528092919081815260200182805461113c90612cc8565b80156111895780601f1061115e57610100808354040283529160200191611189565b820191906000526020600020905b81548152906001019060200180831161116c57829003601f168201915b50505050508152602001600182015481525050815260200190600101906110dd565b50505050905090565b6001600160a01b031660009081526017602052604090205490565b600c5460009060ff1615806111f55750600c5460ff1680156111f557506111f582611937565b92915050565b6006546001600160a01b031690565b6001600160a01b031660009081526016602052604090205490565b6060600080018054610d8190612cc8565b6004546001600160a01b031690565b610a348363a9059cbb60e01b8484604051602401611264929190612169565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526119b8565b600c5462010000900460ff16156112c45760405162461bcd60e51b815260040161084190612712565b600c54610100900460ff16156112ec5760405162461bcd60e51b8152600401610841906125f6565b816112f6816111cf565b6113125760405162461bcd60e51b8152600401610841906125b3565b600082116113325760405162461bcd60e51b815260040161084190612673565b600061133c611236565b6001600160a01b03166370a08231306040518263ffffffff1660e01b81526004016113679190612131565b60206040518083038186803b15801561137f57600080fd5b505afa158015611393573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b7919061209d565b60095460075460045460065493945091926113e1928592916001600160a01b039182169116611a47565b10156113ff5760405162461bcd60e51b815260040161084190612556565b600d5460009061140f9083612c85565b60075460045460065492935060009261143892889290916001600160a01b039182169116611a95565b60075460045460065492935060009261146192859290916001600160a01b039182169116611a47565b90506000821180156114735750600081115b61148f5760405162461bcd60e51b8152600401610841906124b3565b818310156114af5760405162461bcd60e51b8152600401610841906124f9565b6001600160a01b0387166000908152601560205260408120546114f1906114d69085612b17565b6007546004546006546001600160a01b039182169116611a47565b90506114fc84611abd565b81101561151b5760405162461bcd60e51b8152600401610841906124b3565b600b5481111561153d5760405162461bcd60e51b8152600401610841906122ed565b61155c89308461154b6111fb565b6001600160a01b0316929190611b01565b6001600160a01b0388166000908152601560205260409020546115955760016000600e01600082825461158f9190612b17565b90915550505b6001600160a01b038816600090815260156020526040812080548592906115bd908490612b17565b90915550506001600160a01b038816600090815260166020526040812080548492906115ea908490612b17565b90915550506001600160a01b03881660009081526017602052604081208054859290611617908490612b17565b9091555050600d8054849190600090611631908490612b17565b90915550506010805484919060009061164b908490612b17565b9091555050600f8054839190600090611665908490612b17565b90915550506004546040516001600160a01b038a8116927ff29b7b9c9bc4f1c24045a5a10b8bb59a7318d7a1e2e46af68bd5560dfce0e044926116b192909116908790879042906121a3565b60405180910390a2505050505050505050565b600f5460095460009182916116f7916116dc91612c85565b6007546004546006546001600160a01b039182169116611a95565b60075460045460065492935061171c928492916001600160a01b039081169116611a47565b91505090565b6013546040516000918291829182916001600160a01b039091169061174b903090602401612131565b60408051601f198184030181529181526020820180516001600160e01b03166308cbebd760e31b179052516117809190612115565b6000604051808303816000865af19150503d80600081146117bd576040519150601f19603f3d011682016040523d82523d6000602084013e6117c2565b606091505b509150915081156117ec57808060200190518101906117e19190611f57565b9350935050506117f6565b6000809350935050505b9091565b6001600160a01b038116600090815260156020908152604080832054601690925290912054811580159061182e5750600081115b61184a5760405162461bcd60e51b8152600401610841906122b6565b60016000600e0160008282546118609190612c85565b90915550506001600160a01b03831660009081526015602090815260408083208390556016825280832083905560179091528120819055600d80548492906118a9908490612c85565b9091555050601080548391906000906118c3908490612c85565b9091555050600f80548291906000906118dd908490612c85565b909155506118f0905083826108f26111fb565b6004546040516001600160a01b03858116927f211dda46c5b3693e6a4dae7489d6a6738cf8a0104ce5b5ddbb477496a796e3ba9261094992909116908690869042906121a3565b600554604051633657e85160e01b81526000916001600160a01b031690633657e85190611968908590600401612131565b60206040518083038186803b15801561198057600080fd5b505afa158015611994573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f59190611fc4565b6000611a0d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611b289092919063ffffffff16565b805190915015610a345780806020019051810190611a2b9190611fc4565b610a345760405162461bcd60e51b81526004016108419061275d565b6000611a5283611b3f565b611a5b84611bbd565b611a6484611b3f565b611a6e8789612c66565b611a789190612c66565b611a829190612b2f565b611a8c9190612b2f565b95945050505050565b6000611aa082611b3f565b84611aaa85611b3f565b611ab386611bbd565b611a6e9089612c66565b6007546004546006546000928392611ae4928692916001600160a01b039081169116611a47565b600a549091508110611af857600a54611afa565b805b9392505050565b611b22846323b872dd60e01b85858560405160240161126493929190612145565b50505050565b6060611b378484600085611c30565b949350505050565b6000816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611b7a57600080fd5b505afa158015611b8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb291906120b5565b6111f590600a612b95565b6000816001600160a01b031663c24fe16c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611bf857600080fd5b505afa158015611c0c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f5919061209d565b606082471015611c525760405162461bcd60e51b8152600401610841906123f3565b611c5b85611cf0565b611c775760405162461bcd60e51b81526004016108419061263c565b600080866001600160a01b03168587604051611c939190612115565b60006040518083038185875af1925050503d8060008114611cd0576040519150601f19603f3d011682016040523d82523d6000602084013e611cd5565b606091505b5091509150611ce5828286611cf6565b979650505050505050565b3b151590565b60608315611d05575081611afa565b825115611d155782518084602001fd5b8160405162461bcd60e51b81526004016108419190612275565b604051806101a00160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000151581526020016000151581526020016000815260200160008152602001600081525090565b604051806102c00160405280606081526020016060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581526020016000151581526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006001600160a01b031681525090565b828054611eae90612cc8565b90600052602060002090601f016020900481019282611ed05760008555611f16565b82601f10611ee957805160ff1916838001178555611f16565b82800160010185558215611f16579182015b82811115611f16578251825591602001919060010190611efb565b50611f22929150611f26565b5090565b5b80821115611f225760008155600101611f27565b600060208284031215611f4c578081fd5b8135611afa81612d2f565b60008060408385031215611f69578081fd5b8251611f7481612d2f565b6020939093015192949293505050565b600080600060608486031215611f98578081fd5b8335611fa381612d2f565b92506020840135611fb381612d2f565b929592945050506040919091013590565b600060208284031215611fd5578081fd5b81518015158114611afa578182fd5b60006020808385031215611ff6578182fd5b823567ffffffffffffffff8082111561200d578384fd5b818501915085601f830112612020578384fd5b81358181111561203257612032612d19565b604051601f8201601f191681018501838111828210171561205557612055612d19565b604052818152838201850188101561206b578586fd5b818585018683013790810190930193909352509392505050565b600060208284031215612096578081fd5b5035919050565b6000602082840312156120ae578081fd5b5051919050565b6000602082840312156120c6578081fd5b815160ff81168114611afa578182fd5b6001600160a01b03169052565b15159052565b60008151808452612101816020860160208601612c9c565b601f01601f19169290920160200192915050565b60008251612127818460208701612c9c565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b6001600160a01b03959095168552602085019390935260408401919091526060830152608082015260a00190565b60208082528251828201819052600091906040908185019080840286018301878501865b8381101561225c57888303603f190185528151805187855261223f888601826120e9565b91890151948901949094529487019492509086019060010161221b565b509098975050505050505050565b901515815260200190565b600060208252611afa60208301846120e9565b60006060825261229b60608301866120e9565b6001600160a01b039490941660208301525060400152919050565b6020808252601c908201527f4143664d616e616765723a204e6f20746f6b656e73206f776e65642e00000000604082015260600190565b60208082526027908201527f4143664d616e616765723a20496e766573746d656e7420616d6f756e7420746f60408201526637903434b3b41760c91b606082015260800190565b6020808252602e908201527f4143664d616e616765723a204f6e6c79206f776e65722063616e2063616c6c2060408201526d3a3434b990333ab731ba34b7b71760911b606082015260800190565b6020808252604b908201527f4143664d616e616765723a204f6e6c79207370656e6465722063616e2064656360408201527f69646520746f20626f6f6b2074686520696e766573746d656e74206f6e20736f60608201526a36b2b7b7329032b639b29760a91b608082015260a00190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b60208082526054908201527f4143664d616e616765723a2043616e206f6e6c792066696e616c697a6520636160408201527f6d706169676e20696620746865206d696e696d756d2066756e64696e6720676f60608201527330b6103430b9903132b2b7103932b0b1b432b21760611b608082015260a00190565b60208082526026908201527f4143664d616e616765723a20496e766573746d656e7420616d6f756e7420746f60408201526537903637bb9760d11b606082015260800190565b6020808252603e908201527f4143664d616e616765723a204e6f7420656e6f75676820746f6b656e73206c6560408201527f667420666f72207468697320696e766573746d656e7420616d6f756e742e0000606082015260800190565b6020808252603c908201527f4143664d616e616765723a206e6f7420656e6f75676820746f6b656e7320666f60408201527f722073616c6520746f2072656163682074686520736f66746361702e00000000606082015260800190565b60208082526023908201527f4143664d616e616765723a2057616c6c6574206e6f742077686974656c69737460408201526232b21760e91b606082015260800190565b60208082526026908201527f4143664d616e616765723a205468652063616d706169676e2069732066696e616040820152653634bd32b21760d11b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526037908201527f4143664d616e616765723a20496e766573746d656e7420616d6f756e7420686160408201527f7320746f2062652067726561746572207468616e20302e000000000000000000606082015260800190565b60208082526022908201527f43664d616e61676572536f66746361703a204e6f20746f6b656e73206f776e65604082015261321760f11b606082015260800190565b6020808252602b908201527f4143664d616e616765723a205468652063616d706169676e206861732062656560408201526a371031b0b731b2b632b21760a91b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252604a908201527f4143664d616e616765723a2043616e206f6e6c792063616e63656c20666f722060408201527f736f6d656f6e65206966207468652063616d706169676e20686173206265656e6060820152691031b0b731b2b632b21760b11b608082015260a00190565b6020808252602a908201527f4143664d616e616765723a205468652063616d706169676e206973206e6f74206040820152693334b730b634bd32b21760b11b606082015260800190565b60006020825282516101a08060208501526128806101c08501836120e9565b91506020850151601f198086850301604087015261289e84836120e9565b9350604087015191506128b460608701836120d6565b606087015191506128c860808701836120d6565b60808701519150808685030160a0870152506128e483826120e9565b92505060a08501516128f960c08601826120d6565b5060c085015161290c60e08601826120d6565b5060e08501516101008581019190915285015161012061292e818701836120e3565b8601519050610140612942868201836120e3565b86015161016086810191909152860151610180808701919091529095015193019290925250919050565b60006020825282516102c080602085015261298b6102e08501836120e9565b91506020850151601f19808685030160408701526129a984836120e9565b9350604087015191506129bf60608701836120d6565b606087015191506129d360808701836120d6565b608087015191506129e760a08701836120d6565b60a087015191506129fb60c08701836120d6565b60c08701519150612a0f60e08701836120d6565b60e0870151610100878101919091528701516101208088019190915287015161014080880191909152870151610160808801919091528701519150610180612a59818801846120e3565b87015191506101a0612a6d878201846120e3565b87015191506101c0612a81878201846120e3565b8701516101e087810191909152870151610200808801919091528701516102208088019190915287015161024080880191909152870151610260808801919091528701516102808088019190915287015186850382016102a080890191909152909250612aee85846120e9565b94508088015192505050612b04828601826120d6565b5090949350505050565b90815260200190565b60008219821115612b2a57612b2a612d03565b500190565b600082612b4a57634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611612b615750612b8c565b818704821115612b7357612b73612d03565b80861615612b8057918102915b9490941c938002612b52565b94509492505050565b6000611afa60001960ff851684600082612bb157506001611afa565b81612bbe57506000611afa565b8160018114612bd45760028114612bde57612c0b565b6001915050611afa565b60ff841115612bef57612bef612d03565b6001841b915084821115612c0557612c05612d03565b50611afa565b5060208310610133831016604e8410600b8410161715612c3e575081810a83811115612c3957612c39612d03565b611afa565b612c4b8484846001612b4f565b808604821115612c5d57612c5d612d03565b02949350505050565b6000816000190483118215151615612c8057612c80612d03565b500290565b600082821015612c9757612c97612d03565b500390565b60005b83811015612cb7578181015183820152602001612c9f565b83811115611b225750506000910152565b600281046001821680612cdc57607f821691505b60208210811415612cfd57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146109e557600080fdfea264697066735822122037de3e9bb4017cf34b7d44d6d35012b94a20a9d9f4cdc93daf07f6856cabdefa64736f6c63430008000033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
