{
  "_format": "hh-sol-artifact-1",
  "contractName": "SomaSwapRouter",
  "sourceName": "contracts/soma/SomaSwap/periphery/SomaSwapRouter.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_factory",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_WETH",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "WETH",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountADesired",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountBDesired",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountAMin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountBMin",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "addLiquidity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountB",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amountTokenDesired",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountTokenMin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountETHMin",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "addLiquidityETH",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountToken",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountETH",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveOut",
          "type": "uint256"
        }
      ],
      "name": "getAmountIn",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveOut",
          "type": "uint256"
        }
      ],
      "name": "getAmountOut",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        }
      ],
      "name": "getAmountsIn",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        }
      ],
      "name": "getAmountsOut",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "reserveB",
          "type": "uint256"
        }
      ],
      "name": "quote",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountB",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountAMin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountBMin",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "removeLiquidity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountB",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountTokenMin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountETHMin",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "removeLiquidityETH",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountToken",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountETH",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountTokenMin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountETHMin",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "removeLiquidityETHSupportingFeeOnTransferTokens",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountETH",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountTokenMin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountETHMin",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "approveMax",
          "type": "bool"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "removeLiquidityETHWithPermit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountToken",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountETH",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountTokenMin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountETHMin",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "approveMax",
          "type": "bool"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "removeLiquidityETHWithPermitSupportingFeeOnTransferTokens",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountETH",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenA",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenB",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "liquidity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountAMin",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountBMin",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "approveMax",
          "type": "bool"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "removeLiquidityWithPermit",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "amountA",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountB",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapETHForExactTokens",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountOutMin",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapExactETHForTokens",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountOutMin",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapExactETHForTokensSupportingFeeOnTransferTokens",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountOutMin",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapExactTokensForETH",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountOutMin",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapExactTokensForETHSupportingFeeOnTransferTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountOutMin",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapExactTokensForTokens",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountIn",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountOutMin",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapExactTokensForTokensSupportingFeeOnTransferTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountInMax",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapTokensForExactETH",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amountOut",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amountInMax",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "path",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "swapTokensForExactTokens",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x60c06040523480156200001157600080fd5b506040516200447e3803806200447e833981016040819052620000349162000069565b6001600160a01b039182166080521660a052620000a1565b80516001600160a01b03811681146200006457600080fd5b919050565b600080604083850312156200007d57600080fd5b62000088836200004c565b915062000098602084016200004c565b90509250929050565b60805160a0516142526200022c6000396000818161017a015281816103cf01528181610584015281816105d301528181610691015281816108b401528181610bed01528181610d28015281816110780152818161115b0152818161120601528181611299015281816113b7015281816114450152818161168d01528181611745015281816117d601528181611853015281816118c701528181611c9f01528181611e9001528181611ee601528181611f1a01528181611faf015281816120e8015281816121fa015261228801526000818161048e0152818161070d015281816107df0152818161099a015281816109d301528181610aca01528181610c6901528181610d0601528181610e3d0152818161131401528181611477015281816115c2015281816118f901528181611b1801528181611c4d01528181611c7d01528181611da601528181611ec401528181612163015281816122ba01528181612c1001528181612c6301528181612ed30152818161303b0152818161338f015261345a01526142526000f3fe60806040526004361061016a5760003560e01c806385f8c259116100d1578063baa2abde1161008a578063ded9382a11610064578063ded9382a146104d0578063e8e33700146104f0578063f305d7191461052b578063fb3bdb411461053e57600080fd5b8063baa2abde1461045c578063c45a01551461047c578063d06ca61f146104b057600080fd5b806385f8c2591461037d5780638803dbee1461039d578063ad5c4648146103bd578063ad615dec14610409578063af2979eb14610429578063b6f9de951461044957600080fd5b806338ed17391161012357806338ed1739146102ca5780634a25d94a146102ea5780635b0d59841461030a5780635c11d7951461032a578063791ac9471461034a5780637ff36ab51461036a57600080fd5b806302751cec146101ae578063054d50d4146101e857806306fdde031461021657806318cbafe51461025d5780631f00ca741461028a5780632195995c146102aa57600080fd5b366101a957336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a7576101a76137dd565b005b600080fd5b3480156101ba57600080fd5b506101ce6101c936600461381b565b610551565b604080519283526020830191909152015b60405180910390f35b3480156101f457600080fd5b50610208610203366004613879565b61064d565b6040519081526020016101df565b34801561022257600080fd5b506102506040518060400160405280600e81526020016d29b7b6b0a9bbb0b82937baba32b960911b81525081565b6040516101df91906138f5565b34801561026957600080fd5b5061027d61027836600461394d565b610664565b6040516101df91906139c0565b34801561029657600080fd5b5061027d6102a5366004613a1a565b610993565b3480156102b657600080fd5b506101ce6102c5366004613b0a565b6109c9565b3480156102d657600080fd5b5061027d6102e536600461394d565b610aa2565b3480156102f657600080fd5b5061027d61030536600461394d565b610bc0565b34801561031657600080fd5b50610208610325366004613bb4565b610cfe565b34801561033657600080fd5b506101a761034536600461394d565b610deb565b34801561035657600080fd5b506101a761036536600461394d565b61104d565b61027d610378366004613c4a565b611274565b34801561038957600080fd5b50610208610398366004613879565b61158d565b3480156103a957600080fd5b5061027d6103b836600461394d565b61159a565b3480156103c957600080fd5b506103f17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101df565b34801561041557600080fd5b50610208610424366004613879565b611657565b34801561043557600080fd5b5061020861044436600461381b565b611664565b6101a7610457366004613c4a565b6117b3565b34801561046857600080fd5b506101ce610477366004613cb1565b611aed565b34801561048857600080fd5b506103f17f000000000000000000000000000000000000000000000000000000000000000081565b3480156104bc57600080fd5b5061027d6104cb366004613a1a565b611c46565b3480156104dc57600080fd5b506101ce6104eb366004613bb4565b611c73565b3480156104fc57600080fd5b5061051061050b366004613d23565b611d66565b604080519384526020840192909252908201526060016101df565b61051061053936600461381b565b611e64565b61027d61054c366004613c4a565b6120c3565b600080824281101561057e5760405162461bcd60e51b815260040161057590613d9f565b60405180910390fd5b6105ad897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a611aed565b90935091506105bd898685612412565b604051632e1a7d4d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561061f57600080fd5b505af1158015610633573d6000803e3d6000fd5b505050506106418583612543565b50965096945050505050565b600061065a848484612622565b90505b9392505050565b606081428110156106875760405162461bcd60e51b815260040161057590613d9f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866106be600182613dec565b8181106106cd576106cd613dff565b90506020020160208101906106e29190613e15565b6001600160a01b0316146107085760405162461bcd60e51b815260040161057590613e32565b6107667f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506126ff92505050565b91508682600184516107789190613dec565b8151811061078857610788613dff565b602002602001015110156107ae5760405162461bcd60e51b815260040161057590613e69565b610873868660008181106107c4576107c4613dff565b90506020020160208101906107d99190613e15565b336108537f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061081157610811613dff565b90506020020160208101906108269190613e15565b8b8b600181811061083957610839613dff565b905060200201602081019061084e9190613e15565b612888565b8560008151811061086657610866613dff565b60200260200101516129ef565b6108b282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612b2d915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d83600185516108f09190613dec565b8151811061090057610900613dff565b60200260200101516040518263ffffffff1660e01b815260040161092691815260200190565b600060405180830381600087803b15801561094057600080fd5b505af1158015610954573d6000803e3d6000fd5b5050505061098884836001855161096b9190613dec565b8151811061097b5761097b613dff565b6020026020010151612543565b509695505050505050565b60606109c07f00000000000000000000000000000000000000000000000000000000000000008484612cdd565b90505b92915050565b60008060006109f97f00000000000000000000000000000000000000000000000000000000000000008f8f612888565b9050600087610a08578c610a0c565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610a47903390309086908f908e908e908e90600401613eb3565b600060405180830381600087803b158015610a6157600080fd5b505af1158015610a75573d6000803e3d6000fd5b50505050610a888f8f8f8f8f8f8f611aed565b809450819550505050509b509b9950505050505050505050565b60608142811015610ac55760405162461bcd60e51b815260040161057590613d9f565b610b237f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506126ff92505050565b9150868260018451610b359190613dec565b81518110610b4557610b45613dff565b60200260200101511015610b6b5760405162461bcd60e51b815260040161057590613e69565b610b81868660008181106107c4576107c4613dff565b61098882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612b2d915050565b60608142811015610be35760405162461bcd60e51b815260040161057590613d9f565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686610c1a600182613dec565b818110610c2957610c29613dff565b9050602002016020810190610c3e9190613e15565b6001600160a01b031614610c645760405162461bcd60e51b815260040161057590613e32565b610cc27f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cdd92505050565b91508682600081518110610cd857610cd8613dff565b602002602001015111156107ae5760405162461bcd60e51b815260040161057590613ef4565b600080610d4c7f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000612888565b9050600086610d5b578b610d5f565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610d9a903390309086908e908d908d908d90600401613eb3565b600060405180830381600087803b158015610db457600080fd5b505af1158015610dc8573d6000803e3d6000fd5b50505050610dda8d8d8d8d8d8d611664565b9d9c50505050505050505050505050565b8042811015610e0c5760405162461bcd60e51b815260040161057590613d9f565b610e9d85856000818110610e2257610e22613dff565b9050602002016020810190610e379190613e15565b33610e977f000000000000000000000000000000000000000000000000000000000000000089896000818110610e6f57610e6f613dff565b9050602002016020810190610e849190613e15565b8a8a600181811061083957610839613dff565b8a6129ef565b60008585610eac600182613dec565b818110610ebb57610ebb613dff565b9050602002016020810190610ed09190613e15565b6040516370a0823160e01b81526001600160a01b03868116600483015291909116906370a0823190602401602060405180830381865afa158015610f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3c9190613f3a565b9050610f7c868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612e5e915050565b86611025828888610f8e600182613dec565b818110610f9d57610f9d613dff565b9050602002016020810190610fb29190613e15565b6040516370a0823160e01b81526001600160a01b03898116600483015291909116906370a08231906024015b602060405180830381865afa158015610ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101f9190613f3a565b90613091565b10156110435760405162461bcd60e51b815260040161057590613e69565b5050505050505050565b804281101561106e5760405162461bcd60e51b815260040161057590613d9f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856110a5600182613dec565b8181106110b4576110b4613dff565b90506020020160208101906110c99190613e15565b6001600160a01b0316146110ef5760405162461bcd60e51b815260040161057590613e32565b61110585856000818110610e2257610e22613dff565b611143858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612e5e915050565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156111aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ce9190613f3a565b9050868110156111f05760405162461bcd60e51b815260040161057590613e69565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b505050506110438482612543565b606081428110156112975760405162461bcd60e51b815260040161057590613d9f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106112d4576112d4613dff565b90506020020160208101906112e99190613e15565b6001600160a01b03161461130f5760405162461bcd60e51b815260040161057590613e32565b61136d7f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506126ff92505050565b915086826001845161137f9190613dec565b8151811061138f5761138f613dff565b602002602001015110156113b55760405162461bcd60e51b815260040161057590613e69565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106113f7576113f7613dff565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561142a57600080fd5b505af115801561143e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6114a97f000000000000000000000000000000000000000000000000000000000000000089896000818110610e6f57610e6f613dff565b846000815181106114bc576114bc613dff565b60200260200101516040518363ffffffff1660e01b81526004016114f59291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015611514573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115389190613f53565b611544576115446137dd565b61158382878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612b2d915050565b5095945050505050565b600061065a84848461309d565b606081428110156115bd5760405162461bcd60e51b815260040161057590613d9f565b61161b7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cdd92505050565b9150868260008151811061163157611631613dff565b60200260200101511115610b6b5760405162461bcd60e51b815260040161057590613ef4565b600061065a84848461316b565b600081428110156116875760405162461bcd60e51b815260040161057590613d9f565b6116b6887f00000000000000000000000000000000000000000000000000000000000000008989893089611aed565b6040516370a0823160e01b815230600482015290935061172f9150899086906001600160a01b038316906370a0823190602401602060405180830381865afa158015611706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172a9190613f3a565b612412565b604051632e1a7d4d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561179157600080fd5b505af11580156117a5573d6000803e3d6000fd5b505050506109888483612543565b80428110156117d45760405162461bcd60e51b815260040161057590613d9f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061181157611811613dff565b90506020020160208101906118269190613e15565b6001600160a01b03161461184c5760405162461bcd60e51b815260040161057590613e32565b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61192b7f000000000000000000000000000000000000000000000000000000000000000089896000818110610e6f57610e6f613dff565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199c9190613f53565b6119a8576119a86137dd565b600086866119b7600182613dec565b8181106119c6576119c6613dff565b90506020020160208101906119db9190613e15565b6040516370a0823160e01b81526001600160a01b03878116600483015291909116906370a0823190602401602060405180830381865afa158015611a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a479190613f3a565b9050611a87878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612e5e915050565b87611025828989611a99600182613dec565b818110611aa857611aa8613dff565b9050602002016020810190611abd9190613e15565b6040516370a0823160e01b81526001600160a01b038a8116600483015291909116906370a0823190602401610fde565b6000808242811015611b115760405162461bcd60e51b815260040161057590613d9f565b6000611b3e7f00000000000000000000000000000000000000000000000000000000000000008c8c612888565b9050611b4a818a613209565b60405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb449060240160408051808303816000875af1158015611b96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bba9190613f70565b915091506000611bca8e8e61326c565b509050806001600160a01b03168e6001600160a01b031614611bed578183611bf0565b82825b90975095508a871015611c155760405162461bcd60e51b815260040161057590613f94565b89861015611c355760405162461bcd60e51b815260040161057590613fd9565b505050505097509795505050505050565b60606109c07f000000000000000000000000000000000000000000000000000000000000000084846126ff565b6000806000611cc37f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000612888565b9050600087611cd2578c611cd6565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90611d11903390309086908f908e908e908e90600401613eb3565b600060405180830381600087803b158015611d2b57600080fd5b505af1158015611d3f573d6000803e3d6000fd5b50505050611d518e8e8e8e8e8e610551565b909f909e509c50505050505050505050505050565b60008060008342811015611d8c5760405162461bcd60e51b815260040161057590613d9f565b611d9a8c8c8c8c8c8c613361565b90945092506000611dcc7f00000000000000000000000000000000000000000000000000000000000000008e8e612888565b9050611dda8d3383886129ef565b611de68c3383876129ef565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303816000875af1158015611e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e529190613f3a565b92505050985098509895505050505050565b60008060008342811015611e8a5760405162461bcd60e51b815260040161057590613d9f565b611eb88a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613361565b90945092506000611f0a7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000612888565b9050611f188b3383886129ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f7357600080fd5b505af1158015611f87573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038581166004830152602482018990527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af1158015611ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120209190613f53565b61202c5761202c6137dd565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303816000875af1158015612074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120989190613f3a565b9250833411156120b5576120b5336120b08634613dec565b612543565b505096509650969350505050565b606081428110156120e65760405162461bcd60e51b815260040161057590613d9f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061212357612123613dff565b90506020020160208101906121389190613e15565b6001600160a01b03161461215e5760405162461bcd60e51b815260040161057590613e32565b6121bc7f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cdd92505050565b915034826000815181106121d2576121d2613dff565b602002602001015111156121f85760405162461bcd60e51b815260040161057590613ef4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061223a5761223a613dff565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226d57600080fd5b505af1158015612281573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122ec7f000000000000000000000000000000000000000000000000000000000000000089896000818110610e6f57610e6f613dff565b846000815181106122ff576122ff613dff565b60200260200101516040518363ffffffff1660e01b81526004016123389291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015612357573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237b9190613f53565b612387576123876137dd565b6123c682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612b2d915050565b816000815181106123d9576123d9613dff565b60200260200101513411156115835761158333836000815181106123ff576123ff613dff565b6020026020010151346120b09190613dec565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161246e919061401e565b6000604051808303816000865af19150503d80600081146124ab576040519150601f19603f3d011682016040523d82523d6000602084013e6124b0565b606091505b50915091508180156124da5750805115806124da5750808060200190518101906124da9190613f53565b61253c5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610575565b5050505050565b604080516000808252602082019092526001600160a01b03841690839060405161256d919061401e565b60006040518083038185875af1925050503d80600081146125aa576040519150601f19603f3d011682016040523d82523d6000602084013e6125af565b606091505b505090508061261d5760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608401610575565b505050565b60008084116126865760405162461bcd60e51b815260206004820152602a60248201527f536f6d61537761704c6962726172793a20494e53554646494349454e545f494e60448201526914155517d05353d5539560b21b6064820152608401610575565b6000831180156126965750600082115b6126b25760405162461bcd60e51b81526004016105759061403a565b60006126c0856103e5613537565b905060006126ce8285613537565b905060006126e8836126e2886103e8613537565b90613543565b90506126f48183614081565b979650505050505050565b60606002825110156127535760405162461bcd60e51b815260206004820152601d60248201527f536f6d61537761704c6962726172793a20494e56414c49445f504154480000006044820152606401610575565b815167ffffffffffffffff81111561276d5761276d613a04565b604051908082528060200260200182016040528015612796578160200160208202803683370190505b50905082816000815181106127ad576127ad613dff565b60200260200101818152505060005b600183516127ca9190613dec565b8110156128805760008061281d878685815181106127ea576127ea613dff565b60200260200101518786600161280091906140a3565b8151811061281057612810613dff565b602002602001015161354f565b9150915061284584848151811061283657612836613dff565b60200260200101518383612622565b846128518560016140a3565b8151811061286157612861613dff565b602002602001018181525050505080612879906140b6565b90506127bc565b509392505050565b6000806000612897858561326c565b915091506129e5866001600160a01b0316632dd310006040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290091906140cf565b876001600160a01b031663257671f56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561293e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129629190613f3a565b60408051606087811b6bffffffffffffffffffffffff1990811660208085019190915288831b82166034850152845160288186030181526048850186528051908201206001600160f81b031960688601529690921b166069830152607d820194909452609d808201939093528151808203909301835260bd019052805191012090565b9695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691612a53919061401e565b6000604051808303816000865af19150503d8060008114612a90576040519150601f19603f3d011682016040523d82523d6000602084013e612a95565b606091505b5091509150818015612abf575080511580612abf575080806020019051810190612abf9190613f53565b612b255760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b6064820152608401610575565b505050505050565b60005b60018351612b3e9190613dec565b811015612cd757600080848381518110612b5a57612b5a613dff565b602002602001015185846001612b7091906140a3565b81518110612b8057612b80613dff565b6020026020010151915091506000612b98838361326c565b509050600087612ba98660016140a3565b81518110612bb957612bb9613dff565b60200260200101519050600080836001600160a01b0316866001600160a01b031614612be757826000612beb565b6000835b91509150600060028a51612bff9190613dec565b8810612c0b5788612c59565b612c597f0000000000000000000000000000000000000000000000000000000000000000878c612c3c8c60026140a3565b81518110612c4c57612c4c613dff565b6020026020010151612888565b9050612cbf612c897f00000000000000000000000000000000000000000000000000000000000000008989612888565b84848460005b6040519080825280601f01601f191660200182016040528015612cb9576020820181803683370190505b50613619565b5050505050505080612cd0906140b6565b9050612b30565b50505050565b6060600282511015612d315760405162461bcd60e51b815260206004820152601d60248201527f536f6d61537761704c6962726172793a20494e56414c49445f504154480000006044820152606401610575565b815167ffffffffffffffff811115612d4b57612d4b613a04565b604051908082528060200260200182016040528015612d74578160200160208202803683370190505b509050828160018351612d879190613dec565b81518110612d9757612d97613dff565b602002602001018181525050600060018351612db39190613dec565b90505b801561288057600080612df98786612dcf600187613dec565b81518110612ddf57612ddf613dff565b602002602001015187868151811061281057612810613dff565b91509150612e21848481518110612e1257612e12613dff565b6020026020010151838361309d565b84612e2d600186613dec565b81518110612e3d57612e3d613dff565b60200260200101818152505050508080612e56906140ec565b915050612db6565b60005b60018351612e6f9190613dec565b81101561261d57600080848381518110612e8b57612e8b613dff565b602002602001015185846001612ea191906140a3565b81518110612eb157612eb1613dff565b6020026020010151915091506000612ec9838361326c565b5090506000612ef97f00000000000000000000000000000000000000000000000000000000000000008585612888565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f63919061411a565b506001600160701b031691506001600160701b03169150600080876001600160a01b03168a6001600160a01b031614612f9d578284612fa0565b83835b6040516370a0823160e01b81526001600160a01b038a81166004830152929450909250612fdb918491908d16906370a0823190602401610fde565b9550612fe8868383612622565b945050505050600080856001600160a01b0316886001600160a01b03161461301257826000613016565b6000835b91509150600060028c5161302a9190613dec565b8a10613036578a613067565b6130677f0000000000000000000000000000000000000000000000000000000000000000898e612c3c8e60026140a3565b9050613077868484846000612c8f565b5050505050505050508061308a906140b6565b9050612e61565b60006109c08284613dec565b60008084116131025760405162461bcd60e51b815260206004820152602b60248201527f536f6d61537761704c6962726172793a20494e53554646494349454e545f4f5560448201526a1514155517d05353d5539560aa1b6064820152608401610575565b6000831180156131125750600082115b61312e5760405162461bcd60e51b81526004016105759061403a565b60006131466103e86131408688613537565b90613537565b9050600061315a6103e56131408689613091565b90506129e560016126e28385614081565b60008084116131c85760405162461bcd60e51b8152602060048201526024808201527f536f6d61537761704c6962726172793a20494e53554646494349454e545f414d60448201526313d5539560e21b6064820152608401610575565b6000831180156131d85750600082115b6131f45760405162461bcd60e51b81526004016105759061403a565b826131ff8584613537565b61065a9190614081565b61261d60405180606001604052806025815260200161422160259139604080513360208201526001600160a01b038616918101919091526060810184905260800160408051601f198184030181529190526001600160a01b03851691903061366a565b600080826001600160a01b0316846001600160a01b0316036132dc5760405162461bcd60e51b8152602060048201526024808201527f536f6d61537761704c6962726172793a204944454e544943414c5f41444452456044820152635353455360e01b6064820152608401610575565b826001600160a01b0316846001600160a01b0316106132fc5782846132ff565b83835b90925090506001600160a01b03821661335a5760405162461bcd60e51b815260206004820152601d60248201527f536f6d61537761704c6962726172793a205a45524f5f414444524553530000006044820152606401610575565b9250929050565b60405163e6a4390560e01b81526001600160a01b0387811660048301528681166024830152600091829182917f00000000000000000000000000000000000000000000000000000000000000009091169063e6a4390590604401602060405180830381865afa1580156133d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fc91906140cf565b6001600160a01b0316036134525760405162461bcd60e51b815260206004820152601a60248201527f536f6d6153776170506169723a20494e56414c49445f504149520000000000006044820152606401610575565b6000806134807f00000000000000000000000000000000000000000000000000000000000000008b8b61354f565b91509150816000148015613492575080155b156134a25787935086925061352a565b60006134af89848461316b565b90508781116134e357858110156134d85760405162461bcd60e51b815260040161057590613fd9565b889450925082613528565b60006134f089848661316b565b905089811115613502576135026137dd565b878110156135225760405162461bcd60e51b815260040161057590613f94565b94508793505b505b5050965096945050505050565b60006109c0828461416a565b60006109c082846140a3565b600080600061355e858561326c565b50905060008061356f888888612888565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156135ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d0919061411a565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b03161461360757808261360a565b81815b90999098509650505050505050565b612b256040518060600160405280602381526020016141fe602391398585858560405160200161364c9493929190614181565b60408051601f198184030181529190526001600160a01b0388169190335b60606000848051906020012090506129e586828686604051602001613691939291906141ae565b60408051601f19818403018152828201909152601e82527f416464726573733a206c6f772d6c6576656c2063616c6c206661696c656400006020830152906060906109c090849084908461065a8484600085856001600160a01b0385163b61373b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610575565b600080866001600160a01b03168587604051613757919061401e565b60006040518083038185875af1925050503d8060008114613794576040519150601f19603f3d011682016040523d82523d6000602084013e613799565b606091505b50915091506126f4828286606083156137b357508161065d565b8251156137c35782518084602001fd5b8160405162461bcd60e51b815260040161057591906138f5565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b038116811461380857600080fd5b50565b8035613816816137f3565b919050565b60008060008060008060c0878903121561383457600080fd5b863561383f816137f3565b95506020870135945060408701359350606087013592506080870135613864816137f3565b8092505060a087013590509295509295509295565b60008060006060848603121561388e57600080fd5b505081359360208301359350604090920135919050565b60005b838110156138c05781810151838201526020016138a8565b50506000910152565b600081518084526138e18160208601602086016138a5565b601f01601f19169290920160200192915050565b6020815260006109c060208301846138c9565b60008083601f84011261391a57600080fd5b50813567ffffffffffffffff81111561393257600080fd5b6020830191508360208260051b850101111561335a57600080fd5b60008060008060008060a0878903121561396657600080fd5b8635955060208701359450604087013567ffffffffffffffff81111561398b57600080fd5b61399789828a01613908565b90955093505060608701356139ab816137f3565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156139f8578351835292840192918401916001016139dc565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215613a2d57600080fd5b8235915060208084013567ffffffffffffffff80821115613a4d57600080fd5b818601915086601f830112613a6157600080fd5b813581811115613a7357613a73613a04565b8060051b604051601f19603f83011681018181108582111715613a9857613a98613a04565b604052918252848201925083810185019189831115613ab657600080fd5b938501935b82851015613adb57613acc8561380b565b84529385019392850192613abb565b8096505050505050509250929050565b801515811461380857600080fd5b803560ff8116811461381657600080fd5b60008060008060008060008060008060006101608c8e031215613b2c57600080fd5b8b35613b37816137f3565b9a5060208c0135613b47816137f3565b995060408c0135985060608c0135975060808c0135965060a08c0135613b6c816137f3565b955060c08c0135945060e08c0135613b8381613aeb565b9350613b926101008d01613af9565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d031215613bd457600080fd5b8a35613bdf816137f3565b995060208b0135985060408b0135975060608b0135965060808b0135613c04816137f3565b955060a08b0135945060c08b0135613c1b81613aeb565b9350613c2960e08c01613af9565b92506101008b013591506101208b013590509295989b9194979a5092959850565b600080600080600060808688031215613c6257600080fd5b85359450602086013567ffffffffffffffff811115613c8057600080fd5b613c8c88828901613908565b9095509350506040860135613ca0816137f3565b949793965091946060013592915050565b600080600080600080600060e0888a031215613ccc57600080fd5b8735613cd7816137f3565b96506020880135613ce7816137f3565b955060408801359450606088013593506080880135925060a0880135613d0c816137f3565b8092505060c0880135905092959891949750929550565b600080600080600080600080610100898b031215613d4057600080fd5b8835613d4b816137f3565b97506020890135613d5b816137f3565b965060408901359550606089013594506080890135935060a0890135925060c0890135613d87816137f3565b8092505060e089013590509295985092959890939650565b60208082526017908201527f536f6d6153776170526f757465723a2045585049524544000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b818103818111156109c3576109c3613dd6565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613e2757600080fd5b813561065d816137f3565b6020808252601c908201527f536f6d6153776170526f757465723a20494e56414c49445f5041544800000000604082015260600190565b6020808252602a908201527f536f6d6153776170526f757465723a20494e53554646494349454e545f4f555460408201526914155517d05353d5539560b21b606082015260800190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b60208082526026908201527f536f6d6153776170526f757465723a204558434553534956455f494e5055545f604082015265105353d5539560d21b606082015260800190565b600060208284031215613f4c57600080fd5b5051919050565b600060208284031215613f6557600080fd5b815161065d81613aeb565b60008060408385031215613f8357600080fd5b505080516020909101519092909150565b60208082526025908201527f536f6d6153776170526f757465723a20494e53554646494349454e545f415f416040820152641353d5539560da1b606082015260800190565b60208082526025908201527f536f6d6153776170526f757465723a20494e53554646494349454e545f425f416040820152641353d5539560da1b606082015260800190565b600082516140308184602087016138a5565b9190910192915050565b60208082526027908201527f536f6d61537761704c6962726172793a20494e53554646494349454e545f4c496040820152665155494449545960c81b606082015260800190565b60008261409e57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156109c3576109c3613dd6565b6000600182016140c8576140c8613dd6565b5060010190565b6000602082840312156140e157600080fd5b815161065d816137f3565b6000816140fb576140fb613dd6565b506000190190565b80516001600160701b038116811461381657600080fd5b60008060006060848603121561412f57600080fd5b61413884614103565b925061414660208501614103565b9150604084015163ffffffff8116811461415f57600080fd5b809150509250925092565b80820281158282048414176109c3576109c3613dd6565b84815283602082015260018060a01b03831660408201526080606082015260006129e560808301846138c9565b6001600160e01b03198416815282516000906141d18160048501602088016138a5565b60609390931b6bffffffffffffffffffffffff191660049290930191820192909252601801939250505056fe737761702875696e743235362c75696e743235362c616464726573732c6279746573297472616e7366657246726f6d28616464726573732c616464726573732c75696e7432353629a164736f6c6343000812000a",
  "deployedBytecode": "0x60806040526004361061016a5760003560e01c806385f8c259116100d1578063baa2abde1161008a578063ded9382a11610064578063ded9382a146104d0578063e8e33700146104f0578063f305d7191461052b578063fb3bdb411461053e57600080fd5b8063baa2abde1461045c578063c45a01551461047c578063d06ca61f146104b057600080fd5b806385f8c2591461037d5780638803dbee1461039d578063ad5c4648146103bd578063ad615dec14610409578063af2979eb14610429578063b6f9de951461044957600080fd5b806338ed17391161012357806338ed1739146102ca5780634a25d94a146102ea5780635b0d59841461030a5780635c11d7951461032a578063791ac9471461034a5780637ff36ab51461036a57600080fd5b806302751cec146101ae578063054d50d4146101e857806306fdde031461021657806318cbafe51461025d5780631f00ca741461028a5780632195995c146102aa57600080fd5b366101a957336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a7576101a76137dd565b005b600080fd5b3480156101ba57600080fd5b506101ce6101c936600461381b565b610551565b604080519283526020830191909152015b60405180910390f35b3480156101f457600080fd5b50610208610203366004613879565b61064d565b6040519081526020016101df565b34801561022257600080fd5b506102506040518060400160405280600e81526020016d29b7b6b0a9bbb0b82937baba32b960911b81525081565b6040516101df91906138f5565b34801561026957600080fd5b5061027d61027836600461394d565b610664565b6040516101df91906139c0565b34801561029657600080fd5b5061027d6102a5366004613a1a565b610993565b3480156102b657600080fd5b506101ce6102c5366004613b0a565b6109c9565b3480156102d657600080fd5b5061027d6102e536600461394d565b610aa2565b3480156102f657600080fd5b5061027d61030536600461394d565b610bc0565b34801561031657600080fd5b50610208610325366004613bb4565b610cfe565b34801561033657600080fd5b506101a761034536600461394d565b610deb565b34801561035657600080fd5b506101a761036536600461394d565b61104d565b61027d610378366004613c4a565b611274565b34801561038957600080fd5b50610208610398366004613879565b61158d565b3480156103a957600080fd5b5061027d6103b836600461394d565b61159a565b3480156103c957600080fd5b506103f17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016101df565b34801561041557600080fd5b50610208610424366004613879565b611657565b34801561043557600080fd5b5061020861044436600461381b565b611664565b6101a7610457366004613c4a565b6117b3565b34801561046857600080fd5b506101ce610477366004613cb1565b611aed565b34801561048857600080fd5b506103f17f000000000000000000000000000000000000000000000000000000000000000081565b3480156104bc57600080fd5b5061027d6104cb366004613a1a565b611c46565b3480156104dc57600080fd5b506101ce6104eb366004613bb4565b611c73565b3480156104fc57600080fd5b5061051061050b366004613d23565b611d66565b604080519384526020840192909252908201526060016101df565b61051061053936600461381b565b611e64565b61027d61054c366004613c4a565b6120c3565b600080824281101561057e5760405162461bcd60e51b815260040161057590613d9f565b60405180910390fd5b6105ad897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a611aed565b90935091506105bd898685612412565b604051632e1a7d4d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561061f57600080fd5b505af1158015610633573d6000803e3d6000fd5b505050506106418583612543565b50965096945050505050565b600061065a848484612622565b90505b9392505050565b606081428110156106875760405162461bcd60e51b815260040161057590613d9f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866106be600182613dec565b8181106106cd576106cd613dff565b90506020020160208101906106e29190613e15565b6001600160a01b0316146107085760405162461bcd60e51b815260040161057590613e32565b6107667f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506126ff92505050565b91508682600184516107789190613dec565b8151811061078857610788613dff565b602002602001015110156107ae5760405162461bcd60e51b815260040161057590613e69565b610873868660008181106107c4576107c4613dff565b90506020020160208101906107d99190613e15565b336108537f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061081157610811613dff565b90506020020160208101906108269190613e15565b8b8b600181811061083957610839613dff565b905060200201602081019061084e9190613e15565b612888565b8560008151811061086657610866613dff565b60200260200101516129ef565b6108b282878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612b2d915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d83600185516108f09190613dec565b8151811061090057610900613dff565b60200260200101516040518263ffffffff1660e01b815260040161092691815260200190565b600060405180830381600087803b15801561094057600080fd5b505af1158015610954573d6000803e3d6000fd5b5050505061098884836001855161096b9190613dec565b8151811061097b5761097b613dff565b6020026020010151612543565b509695505050505050565b60606109c07f00000000000000000000000000000000000000000000000000000000000000008484612cdd565b90505b92915050565b60008060006109f97f00000000000000000000000000000000000000000000000000000000000000008f8f612888565b9050600087610a08578c610a0c565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610a47903390309086908f908e908e908e90600401613eb3565b600060405180830381600087803b158015610a6157600080fd5b505af1158015610a75573d6000803e3d6000fd5b50505050610a888f8f8f8f8f8f8f611aed565b809450819550505050509b509b9950505050505050505050565b60608142811015610ac55760405162461bcd60e51b815260040161057590613d9f565b610b237f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506126ff92505050565b9150868260018451610b359190613dec565b81518110610b4557610b45613dff565b60200260200101511015610b6b5760405162461bcd60e51b815260040161057590613e69565b610b81868660008181106107c4576107c4613dff565b61098882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612b2d915050565b60608142811015610be35760405162461bcd60e51b815260040161057590613d9f565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686610c1a600182613dec565b818110610c2957610c29613dff565b9050602002016020810190610c3e9190613e15565b6001600160a01b031614610c645760405162461bcd60e51b815260040161057590613e32565b610cc27f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cdd92505050565b91508682600081518110610cd857610cd8613dff565b602002602001015111156107ae5760405162461bcd60e51b815260040161057590613ef4565b600080610d4c7f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000612888565b9050600086610d5b578b610d5f565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90610d9a903390309086908e908d908d908d90600401613eb3565b600060405180830381600087803b158015610db457600080fd5b505af1158015610dc8573d6000803e3d6000fd5b50505050610dda8d8d8d8d8d8d611664565b9d9c50505050505050505050505050565b8042811015610e0c5760405162461bcd60e51b815260040161057590613d9f565b610e9d85856000818110610e2257610e22613dff565b9050602002016020810190610e379190613e15565b33610e977f000000000000000000000000000000000000000000000000000000000000000089896000818110610e6f57610e6f613dff565b9050602002016020810190610e849190613e15565b8a8a600181811061083957610839613dff565b8a6129ef565b60008585610eac600182613dec565b818110610ebb57610ebb613dff565b9050602002016020810190610ed09190613e15565b6040516370a0823160e01b81526001600160a01b03868116600483015291909116906370a0823190602401602060405180830381865afa158015610f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3c9190613f3a565b9050610f7c868680806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250889250612e5e915050565b86611025828888610f8e600182613dec565b818110610f9d57610f9d613dff565b9050602002016020810190610fb29190613e15565b6040516370a0823160e01b81526001600160a01b03898116600483015291909116906370a08231906024015b602060405180830381865afa158015610ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101f9190613f3a565b90613091565b10156110435760405162461bcd60e51b815260040161057590613e69565b5050505050505050565b804281101561106e5760405162461bcd60e51b815260040161057590613d9f565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856110a5600182613dec565b8181106110b4576110b4613dff565b90506020020160208101906110c99190613e15565b6001600160a01b0316146110ef5760405162461bcd60e51b815260040161057590613e32565b61110585856000818110610e2257610e22613dff565b611143858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250612e5e915050565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156111aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ce9190613f3a565b9050868110156111f05760405162461bcd60e51b815260040161057590613e69565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561125257600080fd5b505af1158015611266573d6000803e3d6000fd5b505050506110438482612543565b606081428110156112975760405162461bcd60e51b815260040161057590613d9f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106112d4576112d4613dff565b90506020020160208101906112e99190613e15565b6001600160a01b03161461130f5760405162461bcd60e51b815260040161057590613e32565b61136d7f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506126ff92505050565b915086826001845161137f9190613dec565b8151811061138f5761138f613dff565b602002602001015110156113b55760405162461bcd60e51b815260040161057590613e69565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106113f7576113f7613dff565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561142a57600080fd5b505af115801561143e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6114a97f000000000000000000000000000000000000000000000000000000000000000089896000818110610e6f57610e6f613dff565b846000815181106114bc576114bc613dff565b60200260200101516040518363ffffffff1660e01b81526004016114f59291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015611514573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115389190613f53565b611544576115446137dd565b61158382878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612b2d915050565b5095945050505050565b600061065a84848461309d565b606081428110156115bd5760405162461bcd60e51b815260040161057590613d9f565b61161b7f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cdd92505050565b9150868260008151811061163157611631613dff565b60200260200101511115610b6b5760405162461bcd60e51b815260040161057590613ef4565b600061065a84848461316b565b600081428110156116875760405162461bcd60e51b815260040161057590613d9f565b6116b6887f00000000000000000000000000000000000000000000000000000000000000008989893089611aed565b6040516370a0823160e01b815230600482015290935061172f9150899086906001600160a01b038316906370a0823190602401602060405180830381865afa158015611706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172a9190613f3a565b612412565b604051632e1a7d4d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561179157600080fd5b505af11580156117a5573d6000803e3d6000fd5b505050506109888483612543565b80428110156117d45760405162461bcd60e51b815260040161057590613d9f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061181157611811613dff565b90506020020160208101906118269190613e15565b6001600160a01b03161461184c5760405162461bcd60e51b815260040161057590613e32565b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156118ac57600080fd5b505af11580156118c0573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61192b7f000000000000000000000000000000000000000000000000000000000000000089896000818110610e6f57610e6f613dff565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199c9190613f53565b6119a8576119a86137dd565b600086866119b7600182613dec565b8181106119c6576119c6613dff565b90506020020160208101906119db9190613e15565b6040516370a0823160e01b81526001600160a01b03878116600483015291909116906370a0823190602401602060405180830381865afa158015611a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a479190613f3a565b9050611a87878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612e5e915050565b87611025828989611a99600182613dec565b818110611aa857611aa8613dff565b9050602002016020810190611abd9190613e15565b6040516370a0823160e01b81526001600160a01b038a8116600483015291909116906370a0823190602401610fde565b6000808242811015611b115760405162461bcd60e51b815260040161057590613d9f565b6000611b3e7f00000000000000000000000000000000000000000000000000000000000000008c8c612888565b9050611b4a818a613209565b60405163226bf2d160e21b81526001600160a01b03878116600483015260009182918416906389afcb449060240160408051808303816000875af1158015611b96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bba9190613f70565b915091506000611bca8e8e61326c565b509050806001600160a01b03168e6001600160a01b031614611bed578183611bf0565b82825b90975095508a871015611c155760405162461bcd60e51b815260040161057590613f94565b89861015611c355760405162461bcd60e51b815260040161057590613fd9565b505050505097509795505050505050565b60606109c07f000000000000000000000000000000000000000000000000000000000000000084846126ff565b6000806000611cc37f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000612888565b9050600087611cd2578c611cd6565b6000195b60405163d505accf60e01b81529091506001600160a01b0383169063d505accf90611d11903390309086908f908e908e908e90600401613eb3565b600060405180830381600087803b158015611d2b57600080fd5b505af1158015611d3f573d6000803e3d6000fd5b50505050611d518e8e8e8e8e8e610551565b909f909e509c50505050505050505050505050565b60008060008342811015611d8c5760405162461bcd60e51b815260040161057590613d9f565b611d9a8c8c8c8c8c8c613361565b90945092506000611dcc7f00000000000000000000000000000000000000000000000000000000000000008e8e612888565b9050611dda8d3383886129ef565b611de68c3383876129ef565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303816000875af1158015611e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e529190613f3a565b92505050985098509895505050505050565b60008060008342811015611e8a5760405162461bcd60e51b815260040161057590613d9f565b611eb88a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613361565b90945092506000611f0a7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000612888565b9050611f188b3383886129ef565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611f7357600080fd5b505af1158015611f87573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038581166004830152602482018990527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303816000875af1158015611ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120209190613f53565b61202c5761202c6137dd565b6040516335313c2160e11b81526001600160a01b038881166004830152821690636a627842906024016020604051808303816000875af1158015612074573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120989190613f3a565b9250833411156120b5576120b5336120b08634613dec565b612543565b505096509650969350505050565b606081428110156120e65760405162461bcd60e51b815260040161057590613d9f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061212357612123613dff565b90506020020160208101906121389190613e15565b6001600160a01b03161461215e5760405162461bcd60e51b815260040161057590613e32565b6121bc7f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612cdd92505050565b915034826000815181106121d2576121d2613dff565b602002602001015111156121f85760405162461bcd60e51b815260040161057590613ef4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061223a5761223a613dff565b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226d57600080fd5b505af1158015612281573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122ec7f000000000000000000000000000000000000000000000000000000000000000089896000818110610e6f57610e6f613dff565b846000815181106122ff576122ff613dff565b60200260200101516040518363ffffffff1660e01b81526004016123389291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af1158015612357573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237b9190613f53565b612387576123876137dd565b6123c682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250612b2d915050565b816000815181106123d9576123d9613dff565b60200260200101513411156115835761158333836000815181106123ff576123ff613dff565b6020026020010151346120b09190613dec565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161246e919061401e565b6000604051808303816000865af19150503d80600081146124ab576040519150601f19603f3d011682016040523d82523d6000602084013e6124b0565b606091505b50915091508180156124da5750805115806124da5750808060200190518101906124da9190613f53565b61253c5760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201526c185b9cd9995c8819985a5b1959609a1b6064820152608401610575565b5050505050565b604080516000808252602082019092526001600160a01b03841690839060405161256d919061401e565b60006040518083038185875af1925050503d80600081146125aa576040519150601f19603f3d011682016040523d82523d6000602084013e6125af565b606091505b505090508061261d5760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527308115512081d1c985b9cd9995c8819985a5b195960621b6064820152608401610575565b505050565b60008084116126865760405162461bcd60e51b815260206004820152602a60248201527f536f6d61537761704c6962726172793a20494e53554646494349454e545f494e60448201526914155517d05353d5539560b21b6064820152608401610575565b6000831180156126965750600082115b6126b25760405162461bcd60e51b81526004016105759061403a565b60006126c0856103e5613537565b905060006126ce8285613537565b905060006126e8836126e2886103e8613537565b90613543565b90506126f48183614081565b979650505050505050565b60606002825110156127535760405162461bcd60e51b815260206004820152601d60248201527f536f6d61537761704c6962726172793a20494e56414c49445f504154480000006044820152606401610575565b815167ffffffffffffffff81111561276d5761276d613a04565b604051908082528060200260200182016040528015612796578160200160208202803683370190505b50905082816000815181106127ad576127ad613dff565b60200260200101818152505060005b600183516127ca9190613dec565b8110156128805760008061281d878685815181106127ea576127ea613dff565b60200260200101518786600161280091906140a3565b8151811061281057612810613dff565b602002602001015161354f565b9150915061284584848151811061283657612836613dff565b60200260200101518383612622565b846128518560016140a3565b8151811061286157612861613dff565b602002602001018181525050505080612879906140b6565b90506127bc565b509392505050565b6000806000612897858561326c565b915091506129e5866001600160a01b0316632dd310006040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290091906140cf565b876001600160a01b031663257671f56040518163ffffffff1660e01b8152600401602060405180830381865afa15801561293e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129629190613f3a565b60408051606087811b6bffffffffffffffffffffffff1990811660208085019190915288831b82166034850152845160288186030181526048850186528051908201206001600160f81b031960688601529690921b166069830152607d820194909452609d808201939093528151808203909301835260bd019052805191012090565b9695505050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691612a53919061401e565b6000604051808303816000865af19150503d8060008114612a90576040519150601f19603f3d011682016040523d82523d6000602084013e612a95565b606091505b5091509150818015612abf575080511580612abf575080806020019051810190612abf9190613f53565b612b255760405162461bcd60e51b815260206004820152603160248201527f5472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472604482015270185b9cd9995c919c9bdb4819985a5b1959607a1b6064820152608401610575565b505050505050565b60005b60018351612b3e9190613dec565b811015612cd757600080848381518110612b5a57612b5a613dff565b602002602001015185846001612b7091906140a3565b81518110612b8057612b80613dff565b6020026020010151915091506000612b98838361326c565b509050600087612ba98660016140a3565b81518110612bb957612bb9613dff565b60200260200101519050600080836001600160a01b0316866001600160a01b031614612be757826000612beb565b6000835b91509150600060028a51612bff9190613dec565b8810612c0b5788612c59565b612c597f0000000000000000000000000000000000000000000000000000000000000000878c612c3c8c60026140a3565b81518110612c4c57612c4c613dff565b6020026020010151612888565b9050612cbf612c897f00000000000000000000000000000000000000000000000000000000000000008989612888565b84848460005b6040519080825280601f01601f191660200182016040528015612cb9576020820181803683370190505b50613619565b5050505050505080612cd0906140b6565b9050612b30565b50505050565b6060600282511015612d315760405162461bcd60e51b815260206004820152601d60248201527f536f6d61537761704c6962726172793a20494e56414c49445f504154480000006044820152606401610575565b815167ffffffffffffffff811115612d4b57612d4b613a04565b604051908082528060200260200182016040528015612d74578160200160208202803683370190505b509050828160018351612d879190613dec565b81518110612d9757612d97613dff565b602002602001018181525050600060018351612db39190613dec565b90505b801561288057600080612df98786612dcf600187613dec565b81518110612ddf57612ddf613dff565b602002602001015187868151811061281057612810613dff565b91509150612e21848481518110612e1257612e12613dff565b6020026020010151838361309d565b84612e2d600186613dec565b81518110612e3d57612e3d613dff565b60200260200101818152505050508080612e56906140ec565b915050612db6565b60005b60018351612e6f9190613dec565b81101561261d57600080848381518110612e8b57612e8b613dff565b602002602001015185846001612ea191906140a3565b81518110612eb157612eb1613dff565b6020026020010151915091506000612ec9838361326c565b5090506000612ef97f00000000000000000000000000000000000000000000000000000000000000008585612888565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612f3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f63919061411a565b506001600160701b031691506001600160701b03169150600080876001600160a01b03168a6001600160a01b031614612f9d578284612fa0565b83835b6040516370a0823160e01b81526001600160a01b038a81166004830152929450909250612fdb918491908d16906370a0823190602401610fde565b9550612fe8868383612622565b945050505050600080856001600160a01b0316886001600160a01b03161461301257826000613016565b6000835b91509150600060028c5161302a9190613dec565b8a10613036578a613067565b6130677f0000000000000000000000000000000000000000000000000000000000000000898e612c3c8e60026140a3565b9050613077868484846000612c8f565b5050505050505050508061308a906140b6565b9050612e61565b60006109c08284613dec565b60008084116131025760405162461bcd60e51b815260206004820152602b60248201527f536f6d61537761704c6962726172793a20494e53554646494349454e545f4f5560448201526a1514155517d05353d5539560aa1b6064820152608401610575565b6000831180156131125750600082115b61312e5760405162461bcd60e51b81526004016105759061403a565b60006131466103e86131408688613537565b90613537565b9050600061315a6103e56131408689613091565b90506129e560016126e28385614081565b60008084116131c85760405162461bcd60e51b8152602060048201526024808201527f536f6d61537761704c6962726172793a20494e53554646494349454e545f414d60448201526313d5539560e21b6064820152608401610575565b6000831180156131d85750600082115b6131f45760405162461bcd60e51b81526004016105759061403a565b826131ff8584613537565b61065a9190614081565b61261d60405180606001604052806025815260200161422160259139604080513360208201526001600160a01b038616918101919091526060810184905260800160408051601f198184030181529190526001600160a01b03851691903061366a565b600080826001600160a01b0316846001600160a01b0316036132dc5760405162461bcd60e51b8152602060048201526024808201527f536f6d61537761704c6962726172793a204944454e544943414c5f41444452456044820152635353455360e01b6064820152608401610575565b826001600160a01b0316846001600160a01b0316106132fc5782846132ff565b83835b90925090506001600160a01b03821661335a5760405162461bcd60e51b815260206004820152601d60248201527f536f6d61537761704c6962726172793a205a45524f5f414444524553530000006044820152606401610575565b9250929050565b60405163e6a4390560e01b81526001600160a01b0387811660048301528681166024830152600091829182917f00000000000000000000000000000000000000000000000000000000000000009091169063e6a4390590604401602060405180830381865afa1580156133d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fc91906140cf565b6001600160a01b0316036134525760405162461bcd60e51b815260206004820152601a60248201527f536f6d6153776170506169723a20494e56414c49445f504149520000000000006044820152606401610575565b6000806134807f00000000000000000000000000000000000000000000000000000000000000008b8b61354f565b91509150816000148015613492575080155b156134a25787935086925061352a565b60006134af89848461316b565b90508781116134e357858110156134d85760405162461bcd60e51b815260040161057590613fd9565b889450925082613528565b60006134f089848661316b565b905089811115613502576135026137dd565b878110156135225760405162461bcd60e51b815260040161057590613f94565b94508793505b505b5050965096945050505050565b60006109c0828461416a565b60006109c082846140a3565b600080600061355e858561326c565b50905060008061356f888888612888565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156135ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135d0919061411a565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b03161461360757808261360a565b81815b90999098509650505050505050565b612b256040518060600160405280602381526020016141fe602391398585858560405160200161364c9493929190614181565b60408051601f198184030181529190526001600160a01b0388169190335b60606000848051906020012090506129e586828686604051602001613691939291906141ae565b60408051601f19818403018152828201909152601e82527f416464726573733a206c6f772d6c6576656c2063616c6c206661696c656400006020830152906060906109c090849084908461065a8484600085856001600160a01b0385163b61373b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610575565b600080866001600160a01b03168587604051613757919061401e565b60006040518083038185875af1925050503d8060008114613794576040519150601f19603f3d011682016040523d82523d6000602084013e613799565b606091505b50915091506126f4828286606083156137b357508161065d565b8251156137c35782518084602001fd5b8160405162461bcd60e51b815260040161057591906138f5565b634e487b7160e01b600052600160045260246000fd5b6001600160a01b038116811461380857600080fd5b50565b8035613816816137f3565b919050565b60008060008060008060c0878903121561383457600080fd5b863561383f816137f3565b95506020870135945060408701359350606087013592506080870135613864816137f3565b8092505060a087013590509295509295509295565b60008060006060848603121561388e57600080fd5b505081359360208301359350604090920135919050565b60005b838110156138c05781810151838201526020016138a8565b50506000910152565b600081518084526138e18160208601602086016138a5565b601f01601f19169290920160200192915050565b6020815260006109c060208301846138c9565b60008083601f84011261391a57600080fd5b50813567ffffffffffffffff81111561393257600080fd5b6020830191508360208260051b850101111561335a57600080fd5b60008060008060008060a0878903121561396657600080fd5b8635955060208701359450604087013567ffffffffffffffff81111561398b57600080fd5b61399789828a01613908565b90955093505060608701356139ab816137f3565b80925050608087013590509295509295509295565b6020808252825182820181905260009190848201906040850190845b818110156139f8578351835292840192918401916001016139dc565b50909695505050505050565b634e487b7160e01b600052604160045260246000fd5b60008060408385031215613a2d57600080fd5b8235915060208084013567ffffffffffffffff80821115613a4d57600080fd5b818601915086601f830112613a6157600080fd5b813581811115613a7357613a73613a04565b8060051b604051601f19603f83011681018181108582111715613a9857613a98613a04565b604052918252848201925083810185019189831115613ab657600080fd5b938501935b82851015613adb57613acc8561380b565b84529385019392850192613abb565b8096505050505050509250929050565b801515811461380857600080fd5b803560ff8116811461381657600080fd5b60008060008060008060008060008060006101608c8e031215613b2c57600080fd5b8b35613b37816137f3565b9a5060208c0135613b47816137f3565b995060408c0135985060608c0135975060808c0135965060a08c0135613b6c816137f3565b955060c08c0135945060e08c0135613b8381613aeb565b9350613b926101008d01613af9565b92506101208c013591506101408c013590509295989b509295989b9093969950565b6000806000806000806000806000806101408b8d031215613bd457600080fd5b8a35613bdf816137f3565b995060208b0135985060408b0135975060608b0135965060808b0135613c04816137f3565b955060a08b0135945060c08b0135613c1b81613aeb565b9350613c2960e08c01613af9565b92506101008b013591506101208b013590509295989b9194979a5092959850565b600080600080600060808688031215613c6257600080fd5b85359450602086013567ffffffffffffffff811115613c8057600080fd5b613c8c88828901613908565b9095509350506040860135613ca0816137f3565b949793965091946060013592915050565b600080600080600080600060e0888a031215613ccc57600080fd5b8735613cd7816137f3565b96506020880135613ce7816137f3565b955060408801359450606088013593506080880135925060a0880135613d0c816137f3565b8092505060c0880135905092959891949750929550565b600080600080600080600080610100898b031215613d4057600080fd5b8835613d4b816137f3565b97506020890135613d5b816137f3565b965060408901359550606089013594506080890135935060a0890135925060c0890135613d87816137f3565b8092505060e089013590509295985092959890939650565b60208082526017908201527f536f6d6153776170526f757465723a2045585049524544000000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b818103818111156109c3576109c3613dd6565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613e2757600080fd5b813561065d816137f3565b6020808252601c908201527f536f6d6153776170526f757465723a20494e56414c49445f5041544800000000604082015260600190565b6020808252602a908201527f536f6d6153776170526f757465723a20494e53554646494349454e545f4f555460408201526914155517d05353d5539560b21b606082015260800190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b60208082526026908201527f536f6d6153776170526f757465723a204558434553534956455f494e5055545f604082015265105353d5539560d21b606082015260800190565b600060208284031215613f4c57600080fd5b5051919050565b600060208284031215613f6557600080fd5b815161065d81613aeb565b60008060408385031215613f8357600080fd5b505080516020909101519092909150565b60208082526025908201527f536f6d6153776170526f757465723a20494e53554646494349454e545f415f416040820152641353d5539560da1b606082015260800190565b60208082526025908201527f536f6d6153776170526f757465723a20494e53554646494349454e545f425f416040820152641353d5539560da1b606082015260800190565b600082516140308184602087016138a5565b9190910192915050565b60208082526027908201527f536f6d61537761704c6962726172793a20494e53554646494349454e545f4c496040820152665155494449545960c81b606082015260800190565b60008261409e57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156109c3576109c3613dd6565b6000600182016140c8576140c8613dd6565b5060010190565b6000602082840312156140e157600080fd5b815161065d816137f3565b6000816140fb576140fb613dd6565b506000190190565b80516001600160701b038116811461381657600080fd5b60008060006060848603121561412f57600080fd5b61413884614103565b925061414660208501614103565b9150604084015163ffffffff8116811461415f57600080fd5b809150509250925092565b80820281158282048414176109c3576109c3613dd6565b84815283602082015260018060a01b03831660408201526080606082015260006129e560808301846138c9565b6001600160e01b03198416815282516000906141d18160048501602088016138a5565b60609390931b6bffffffffffffffffffffffff191660049290930191820192909252601801939250505056fe737761702875696e743235362c75696e743235362c616464726573732c6279746573297472616e7366657246726f6d28616464726573732c616464726573732c75696e7432353629a164736f6c6343000812000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
