{
  "_format": "hh-sol-artifact-1",
  "contractName": "BorrowerOperationsBase",
  "sourceName": "contracts/BorrowerOperationsBase.sol",
  "abi": [
    {
      "inputs": [],
      "name": "AddressZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__BalanceCheckFailed",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__CannotCloseVaultInRecoveryMode",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__CollateralIndexMismatch",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__EmptyAmounts",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__FeeTooHigh",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__ICRMustBeAboveCCR",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__ICRMustBeAboveMCR",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__ICRMustNotDecreaseInRecoveryMode",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__IncorrectInput",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__InsufficientVEUSDBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__InvalidMaxFeePercentage",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__InvalidVEUSDRepayment",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__MaxSlippageExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__NetDebtBelowMinimum",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__NoCollWithdrawalInRecoveryMode",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__NoZeroAdjustment",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__OnlyVaultManager",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__TCRMustBeAboveCCR",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__TooManyCollaterals",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__VaultMustBeInactive",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__VaultNotActive",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "BorrowerOperations__VaultStatusNotActive",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ControllerAlreadyInitialized",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_VEUSDFee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_caller",
          "type": "address"
        }
      ],
      "name": "VEUSDBorrowingFeePaid",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_VEUSDVariableFee",
          "type": "uint256"
        }
      ],
      "name": "VariableFeePaid",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "arrayIndex",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_caller",
          "type": "address"
        }
      ],
      "name": "VaultCreated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_borrower",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_debt",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "_tokens",
          "type": "address[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        },
        {
          "indexed": false,
          "internalType": "enum BorrowerOperationsBase.BorrowerOperation",
          "name": "operation",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_caller",
          "type": "address"
        }
      ],
      "name": "VaultUpdated",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_collsIn",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amountsIn",
          "type": "uint256[]"
        },
        {
          "internalType": "address[]",
          "name": "_collsOut",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amountsOut",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "_VEUSDChange",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "_isDebtIncrease",
          "type": "bool"
        },
        {
          "internalType": "address",
          "name": "_upperHint",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_lowerHint",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_maxFeePercentage",
          "type": "uint256"
        }
      ],
      "name": "adjustVault",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "_collsIn",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amountsIn",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256",
          "name": "_VEUSDChange",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_upperHint",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_lowerHint",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_maxFeePercentage",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_adjustedAddress",
          "type": "address"
        }
      ],
      "name": "adjustVaultFor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "closeVault",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getEntireSystemColl",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getEntireSystemDebt",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_vaultManagerAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_activePoolAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_defaultPoolAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_gasPoolAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_collSurplusPoolAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_sortedVaultsAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_veusdTokenAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_controllerAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_debtCapManager",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_VEUSDInterest",
          "type": "uint256"
        }
      ],
      "name": "mintVEUSDInterestFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_maxFeePercentage",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_VEUSDAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_upperHint",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_lowerHint",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "_colls",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        }
      ],
      "name": "openVault",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_maxFeePercentage",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_VEUSDAmount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_upperHint",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_lowerHint",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "_colls",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_amounts",
          "type": "uint256[]"
        },
        {
          "internalType": "address",
          "name": "_vaultOpenAddress",
          "type": "address"
        }
      ],
      "name": "openVaultFor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50614ff4806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a35760003560e01c80635686993011610076578063795d26c31161005b578063795d26c314610111578063887105d31461012b578063f5e95acb1461013357600080fd5b806356869930146100eb5780636921d501146100fe57600080fd5b8063076cca87146100a85780630e2f1df6146100bd57806318976fa2146100d05780633b00ae94146100d8575b600080fd5b6100bb6100b63660046143de565b610146565b005b6100bb6100cb3660046144f9565b610499565b6100bb61070c565b6100bb6100e63660046145af565b610748565b6100bb6100f9366004614651565b610773565b6100bb61010c36600461466a565b61084d565b61011961086f565b60405190815260200160405180910390f35b610119610977565b6100bb61014136600461470f565b610a03565b61014e610bcf565b604080516080810182526068546001600160a01b03908116825260015481166020830152606b5481169282019290925260005490911660608201528b896101a2898214801561019d57508d5183145b610c28565b60005b828110156101e3576101d38e82815181106101c2576101c26147cb565b602002602001015160001415610c28565b6101dc816147f7565b90506101a5565b5060005b81811015610224576102148b8b83818110610204576102046147cb565b9050602002013560001415610c28565b61021d816147f7565b90506101e7565b50505080606001516001600160a01b03166354c847dd8e8e8d8d6040518563ffffffff1660e01b815260040161025d9493929190614859565b60006040518083038186803b15801561027557600080fd5b505afa158015610289573d6000803e3d6000fd5b505050506102cb8d8d808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508f9250610c62915050565b61034c604051806101a00160405280606081526020016060815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000151581526020016000151581525090565b8c67ffffffffffffffff811115610365576103656142ca565b60405190808252806020026020018201604052801561038e578160200160208202803683370190505b5081600001819052508d8d8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050505060208083019190915260408083018e905280518c830281810184019092528c8152918d918d918291908501908490808284376000920191909152505050506060820152604080516020808b0282810182019093528a825290918b918b918291850190849080828437600092019190915250505050608082015260c081018790528515156101608201526001600160a01b038086166101008301528416610120820152610140810183905261047f818333610cde565b505061048b6001603655565b505050505050505050505050565b6104a1610bcf565b604080516080810182526068546001600160a01b03908116825260015481166020830152606b548116928201929092526000549091166060820152865188906104eb908214610c28565b60005b8181101561051b5761050b8982815181106101c2576101c26147cb565b610514816147f7565b90506104ee565b505080606001516001600160a01b031663e5054c968a8a60016040518463ffffffff1660e01b815260040161055293929190614880565b60006040518083038186803b15801561056a57600080fd5b505afa15801561057e573d6000803e3d6000fd5b505050506105c08989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250610c62915050565b610641604051806101a00160405280606081526020016060815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000151581526020016000151581525090565b8867ffffffffffffffff81111561065a5761065a6142ca565b604051908082528060200260200182016040528015610683578160200160208202803683370190505b508152604080516020808c0282810182019093528b825290918c918c91829185019084908082843760009201919091525050505060208201526040810188905260c081018790526001600160a01b03808716610100830152851661012082015261014081018490526106f6818385610cde565b50506107026001603655565b5050505050505050565b610714610bcf565b604080516000808252602082018181528284018281526060840190945261073c939091611893565b6107466001603655565b565b610750610bcf565b6107608787878787878733611e22565b61076a6001603655565b50505050505050565b6068546001600160a01b031633146107b7576040517f150d02fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b03166325b18cff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561080b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082f91906148a6565b606b54909150610849906001600160a01b03168284611fc6565b5050565b610855610bcf565b6108658888888888888888611e22565b6107026001603655565b600080600160009054906101000a90046001600160a01b03166001600160a01b03166381b7f1bf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e991906148c3565b90506000600260009054906101000a90046001600160a01b03166001600160a01b03166381b7f1bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610940573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096491906148c3565b905061097081836148dc565b9250505090565b600154604080517f651340c400000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163651340c49160048083019260209291908290030181865afa1580156109da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fe91906148c3565b905090565b603554610100900460ff1615808015610a235750603554600160ff909116105b80610a3d5750303b158015610a3d575060355460ff166001145b610ab45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6035805460ff191660011790558015610ad7576035805461ff0019166101001790555b610adf61203e565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03868116919091179092556001805482168c84161790556002805482168b84161790556068805482168d84161790556069805482168a8416179055606a80548216898416179055606c80548216888416179055606b80548216878416179055606d80549091169184169190911790558015610bc3576035805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b600260365403610c215760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610aab565b6002603655565b80610c5f576040517f5bf4904300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b805160005b81811015610cd857610cab848281518110610c8457610c846147cb565b6020026020010151848381518110610c9e57610c9e6147cb565b60200260200101516120b1565b838281518110610cbd57610cbd6147cb565b6020908102919091010152610cd1816147f7565b9050610c67565b50505050565b610db660405180610380016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b610dbe612303565b6103008501526102e08401526102c083015215156103608201819052610140850151610de99161241c565b610e00846040015185608001518660c001516124e5565b8251610e0e90600184612539565b8251610e1990612632565b610e308360600151856020015186604001516126a7565b61024085015250610220830152610200820152606080840151908501516080860151610e5d9291906126a7565b505061028083015261026082015261016084015115610f1757606d5460c0850151602086015161024084015160405163599ae27560e01b81526001600160a01b039094169363599ae27593610eb89390929091600401614958565b600060405180830381600087803b158015610ed257600080fd5b505af1158015610ee6573d6000803e3d6000fd5b505050508360c001518161020001511015610f05578360c00151610f0c565b8061020001515b6102a0820152610f24565b6102008101516102a08201525b60c084015181526101608401518015610f405750806103600151155b15610fb657610f5f838560c00151836102a00151876101400151612731565b6101a082018190526102a082015190610f8190670de0b6b3a76400009061498d565b610f8b91906149a4565b846101400151610f9b91906149c6565b6101408501526101a08101518151610fb391906148dc565b81525b8251610fc290836127d8565b60c0840152610100830181905260e083018290526060850151610fe69290916126a7565b50506060808401919091526040808401929092528401518151808301835260e0840151815261010084015160208281019190915283518085018552888201518152888501519181019190915292517f5799186700000000000000000000000000000000000000000000000000000000815273__$dd008e7fdb676c23adfd59cbc2bd3a4768$__9363fb47a036936001600160a01b0316928592635799186792611096928692909190600401614a5c565b600060405180830381865af41580156110b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110db9190810190614b4f565b60405180604001604052808960600151815260200189608001518152506040518463ffffffff1660e01b815260040161111693929190614a5c565b600060405180830381865af4158015611133573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261115b9190810190614bf6565b61014083015261012082018190525160e082015151101561118a5761118a836060015182610120015151612875565b80610260015181610200015182604001516111a591906148dc565b6111af91906149c6565b608082015261028081015161022082015160608301516111cf91906148dc565b6111d991906149c6565b60a082018190526060820151106103408201819052156112115780606001518160a0015161120791906149c6565b602082015261122b565b8060a00151816060015161122591906149c6565b60208201525b602084015151156112dc576112648360600151856020015186604001518760000151856102c00151866102000151876102600151612910565b6103208301526101c08201819052156112dc57611291816101c00151826102a0015186610140015161299b565b6112a083826101c001516129f6565b6101c081015160405190815233907f407e0eafcf061ff7a3b83f9c05260c37c26204626496f4c150b6202d77a58e359060200160405180910390a25b6112ee81604001518260c00151612ab9565b6101608201526101c081015160c082015161130991906148dc565b60c08201526080810151610160850151611349919061133857825160c084015161133391906149c6565b612ab9565b825160c084015161133391906148dc565b610180820152610360810151156113f95760808401515115611397576040517fac64e2f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836101600151156113f4576113b0816101800151612af2565b80610160015181610180015110156113f4576040517f9bc10be000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611439565b611407816101800151612ba0565b611439611434826102e00151836103000151846020015185600001518661034001518a6101600151612c4e565b612ca5565b6020840151511561145b5761145b836020015185602001518660400151612d53565b836101600151156114965761148b828460000151836101c00151846000015161148491906148dc565b6001612d9a565b6101e08201526114ee565b6101c0810151815111156114c95761148b828460000151836101c0015184600001516114c291906149c6565b6000612d9a565b6114e78284600001518360000151846101c0015161148491906149c6565b6101e08201525b611508828460000151836101200151846101400151612e3b565b8251604051632c77130760e21b81526001600160a01b0384811660048301529091169063b1dc4c1c90602401600060405180830381600087803b15801561154e57600080fd5b505af1158015611562573d6000803e3d6000fd5b5050606c5460a08401516101e08501516001600160a01b0390921693506383be79a1925085916115929190612ab9565b6101008801516101208901516103208701516102008801516040808a015190517fffffffff0000000000000000000000000000000000000000000000000000000060e08a901b1681526001600160a01b03978816600482015260248101969096529386166044860152949091166064840152608483015260a482019290925260c481019190915260e401600060405180830381600087803b15801561163657600080fd5b505af115801561164a573d6000803e3d6000fd5b50505050836101800151156116715761167183856060015186608001518760a00151612eb2565b836101600151158015611687575060c084015115155b8061169457508361018001515b156116e2576116bd81600001516116ae8360c00151612fd5565b6116b891906149c6565b613057565b6116cf8160c001518260000151613105565b6116e283604001518260000151846131bd565b8361018001511561170a5761170583602001518460400151848760c00151613200565b6117e4565b60008460e001518560c0015161172091906149c6565b90508461016001511561174b5761174684602001518560400151858486600001516132c1565b61175f565b61175f846020015185604001518584613200565b60208401516101c0830151604051632b7c7b1160e01b81526001600160a01b0390921691632b7c7b11916117999160040190815260200190565b600060405180830381600087803b1580156117b357600080fd5b505af11580156117c7573d6000803e3d6000fd5b505050506117e2846020015186606001518760800151613326565b505b816001600160a01b03167f2378133b944f78ec525dfdbb365af53d7cd776ba27eab8202e31491bf229ca6d826101e00151836101200151846101400151600233604051611835959493929190614c7c565b60405180910390a26101a0810151604080519182523360208301526001600160a01b038416917faf30136f135f84b150c5071fb9ca74994f992d976382cc4f8462b29215467aea910160405180910390a250505050565b6001603655565b60408051608080820183526068546001600160a01b0390811683526001548116602080850191909152606b5482168486015260008054909216606080860191909152855160e0810187528381529182018390529481018290528085018590529182019390935260a0810183905260c081019290925290815161191790600133612539565b61191f612303565b602085015283525015801560c0830152611965576040517f9a0030a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815161197090612632565b815161197c90336127d8565b604084015260808301819052606080840183905284015161199e9290916126a7565b505060a0830152508215611b62576000806119bd84604001513361336f565b90506000805b846060015151811015611b27576000856080015182815181106119e8576119e86147cb565b602002602001015190508a5185108015611a4957508a8581518110611a0f57611a0f6147cb565b60200260200101516001600160a01b031686606001518381518110611a3657611a366147cb565b60200260200101516001600160a01b0316145b15611ae457611aa5878c8781518110611a6457611a646147cb565b60200260200101518c8881518110611a7e57611a7e6147cb565b60200260200101518c8981518110611a9857611a986147cb565b60200260200101516133fd565b611aaf90846148dc565b9250898581518110611ac357611ac36147cb565b602002602001015181611ad691906149c6565b9050611ae1856147f7565b94505b8015611b1657611b16876020015187606001518481518110611b0857611b086147cb565b6020026020010151836135cd565b50611b20816147f7565b90506119c3565b50611b3281836148dc565b611b4086604001513361336f565b14611b5e576040516352c8e9c560e01b815260040160405180910390fd5b5050505b611bf4826040015160008054906101000a90046001600160a01b03166001600160a01b0316637d92c3bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdf91906148c3565b8360400151611bee91906149c6565b336131bd565b611c16611434826000015183602001518460a001518560400151600080612c4e565b81516040517fe8ccaab2000000000000000000000000000000000000000000000000000000008152336004820152600260248201526001600160a01b039091169063e8ccaab290604401600060405180830381600087803b158015611c7a57600080fd5b505af1158015611c8e573d6000803e3d6000fd5b50505050611d29826020015183604001513360008054906101000a90046001600160a01b03166001600160a01b0316637d92c3bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1591906148c3565b8560400151611d2491906149c6565b613200565b6020828101516040808501516069546000548351637d92c3bb60e01b81529351611daa9693946001600160a01b03938416949390921692637d92c3bb92600480820193918290030181865afa158015611d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2491906148c3565b82611dc657611dc6826020015182606001518360800151613326565b604080516000808252602082018181528284019384905233937f2378133b944f78ec525dfdbb365af53d7cd776ba27eab8202e31491bf229ca6d93611e12939290916001908790614c7c565b60405180910390a2505050505050565b604080516080810182526068546001600160a01b03908116825260015481166020830152606b5481169282019290925260005490911660608201528251611e6a901515610c28565b611eae858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505060608401518691506001613621565b6060810151611ebd9085612875565b611efb858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250879250610c62915050565b60006040518060c001604052808787905067ffffffffffffffff811115611f2457611f246142ca565b604051908082528060200260200182016040528015611f4d578160200160208202803683370190505b5081526020018b81526020018a815260200160008152602001896001600160a01b03168152602001886001600160a01b03168152509050610bc3818787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992508791508890506136df565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390528416906340c10f19906044015b600060405180830381600087803b15801561202a57600080fd5b505af115801561076a573d6000803e3d6000fd5b603554610100900460ff166120a95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610aab565b610746613df9565b600080546040517f229dfaa70000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169063229dfaa790602401602060405180830381865afa158015612115573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121399190614cd0565b156122de576000836001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561217e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a291906148a6565b90506121b96001600160a01b038216333086613e64565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526024820185905282169063095ea7b3906044016020604051808303816000875af1158015612221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122459190614cd0565b506001546040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b03918216602482015290851690636e553f65906044016020604051808303816000875af11580156122b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d691906148c3565b9150506122fd565b6001546122fa906001600160a01b038581169133911685613e64565b50805b92915050565b600080600080600160009054906101000a90046001600160a01b03166001600160a01b031663896a00896040518163ffffffff1660e01b8152600401600060405180830381865afa15801561235c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123849190810190614ced565b50909350915061239261086f565b905060008054906101000a90046001600160a01b03166001600160a01b0316635733d58f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240991906148c3565b6124138383612ab9565b10935090919293565b670de0b6b3a76400008211806124ae5750801580156124ae575060008054906101000a90046001600160a01b03166001600160a01b0316635e9e32126040518163ffffffff1660e01b8152600401602060405180830381865afa158015612487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ab91906148c3565b82105b15610849576040517f915b943a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801580156124f257508251155b80156124fd57508151155b15612534576040517fac146f1400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b6040517f0c5aed570000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301528315159190851690630c5aed5790602401602060405180830381865afa15801561259d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c19190614cd0565b151514612534578115612600576040517f79f3c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f434f9d1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0b0765570000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03821690630b07655790602401600060405180830381600087803b15801561268c57600080fd5b505af11580156126a0573d6000803e3d6000fd5b5050505050565b600080606080866001600160a01b031663ab0084cf87876040518363ffffffff1660e01b81526004016126db929190614d3d565b600060405180830381865afa1580156126f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127209190810190614d62565b935093509350935093509350935093565b83516040517fde162391000000000000000000000000000000000000000000000000000000008152600481018590526000916001600160a01b03169063de162391906024016020604051808303816000875af1158015612795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b991906148c3565b90506127c681848461299b565b6127d085826129f6565b949350505050565b6040517f3a1141eb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152606091829160009190861690633a1141eb90602401600060405180830381865afa158015612840573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128689190810190614dd9565b9250925092509250925092565b816001600160a01b031663fe8d6d6f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d791906148c3565b811115610849576040517febd2319a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080886001600160a01b0316635bdee1718989898989896040518763ffffffff1660e01b815260040161294996959493929190614e46565b60408051808303816000875af1158015612967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298b9190614e9e565b9150915097509795505050505050565b6000826129b0670de0b6b3a76400008661498d565b6129ba91906149a4565b905081811115610cd8576040517f9543c69800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600084606001516001600160a01b0316633b798fb26040518163ffffffff1660e01b8152600401606060405180830381865afa158015612a3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a619190614ec2565b919450925090506000670de0b6b3a7640000612a7d868661498d565b612a8791906149a4565b9050612a9886604001518483611fc6565b6040860151612ab19083612aac84896149c6565b611fc6565b505050505050565b60008115612ae957600082612ad685670de0b6b3a764000061498d565b612ae091906149a4565b91506122fd9050565b506000196122fd565b60008054906101000a90046001600160a01b03166001600160a01b0316635733d58f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6791906148c3565b811015610c5f576040517f43e87f1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a90046001600160a01b03166001600160a01b031663794e57246040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1591906148c3565b811015610c5f576040517f583a5a0800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082612c6457612c5f85886149c6565b612c6e565b612c6e85886148dc565b965081612c8457612c7f84876149c6565b612c8e565b612c8e84876148dc565b9550612c9a8787612ab9565b979650505050505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635733d58f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1a91906148c3565b811015610c5f576040517f2359341900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa7a24edd0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063a7a24edd906120109085908590600401614d3d565b6040517f64f23caa0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018490528215156044830152600091908516906364f23caa906064016020604051808303816000875af1158015612e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3291906148c3565b95945050505050565b6040517fc308d81c0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063c308d81c90612e8490879086908690600401614f05565b600060405180830381600087803b158015612e9e57600080fd5b505af1158015610702573d6000803e3d6000fd5b6000612ec285604001513361336f565b90506000805b8551811015612f9e57838181518110612ee357612ee36147cb565b6020026020010151600014612f4d57612f3c87878381518110612f0857612f086147cb565b6020026020010151878481518110612f2257612f226147cb565b6020026020010151878581518110611a9857611a986147cb565b612f4690836148dc565b9150612f8e565b612f8e8760200151878381518110612f6757612f676147cb565b6020026020010151878481518110612f8157612f816147cb565b60200260200101516135cd565b612f97816147f7565b9050612ec8565b50612fa981836148dc565b612fb787604001513361336f565b14612ab1576040516352c8e9c560e01b815260040160405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b0316637d92c3bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304d91906148c3565b6122fd90836149c6565b60008054906101000a90046001600160a01b03166001600160a01b031663969c24526040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130cc91906148c3565b811015610c5f576040517fb921c48a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a90046001600160a01b03166001600160a01b0316637d92c3bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317a91906148c3565b61318490836149c6565b811115610849576040517f14588fef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816131c8848361336f565b1015612534576040517fd8e1b9c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f2a7ba1f7000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b03851690632a7ba1f790602401600060405180830381600087803b15801561325b57600080fd5b505af115801561326f573d6000803e3d6000fd5b50506040517f9dc29fac0000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526024820185905286169250639dc29fac9150604401612e84565b604051632b7c7b1160e01b8152600481018290526001600160a01b03861690632b7c7b1190602401600060405180830381600087803b15801561330357600080fd5b505af1158015613317573d6000803e3d6000fd5b505050506126a0848484611fc6565b6040517f564a5c2e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063564a5c2e9061201090339086908690600401614f05565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600091908416906370a0823190602401602060405180830381865afa1580156133d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f691906148c3565b9392505050565b6000670de0b6b3a7640000821115613441576040517f1bf34f5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613451866060015186613eec565b60208701516040517f62f6105b0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301528881166024830152604482018890529293509116906362f6105b90606401600060405180830381600087803b1580156134c457600080fd5b505af11580156134d8573d6000803e3d6000fd5b5050505060006134ed87606001518787613f73565b90506000670de0b6b3a764000061350486826149c6565b61350e908461498d565b61351891906149a4565b60408981015190517fa7b8a5370000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038a811660248301529182166044820152606481018990526084810183905291925084169063a7b8a5379060a4016020604051808303816000875af115801561359d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c191906148c3565b98975050505050505050565b6040517fb68b02e20000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0383811660248301526044820183905284169063b68b02e290606401612010565b83518351613630908214610c28565b60005b81811015613660576136508582815181106101c2576101c26147cb565b613659816147f7565b9050613633565b506040517fe5054c960000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063e5054c96906136a89088908690600401614f27565b60006040518083038186803b1580156136c057600080fd5b505afa1580156136d4573d6000803e3d6000fd5b505050505050505050565b61374560405180610180016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081526020016000815260200160008152602001600081526020016000151581525090565b61374d612303565b61012085015261010084015260e08301521515610160820181905260208701516137769161241c565b825161378490600084612539565b60408601516020820152606083015161379e9086866126a7565b60c0850181905260a0850192909252506080830191909152606d54604088810151905163599ae27560e01b81526001600160a01b039092169263599ae275926137ec92918a91600401614958565b600060405180830381600087803b15801561380657600080fd5b505af115801561381a573d6000803e3d6000fd5b5050505080610160015161387b5761384083876040015183608001518960200151612731565b80825260808201519061385c90670de0b6b3a76400009061498d565b61386691906149a4565b866020015161387591906149c6565b60208701525b600061389d846060015187878a600001518660e0015187608001516000612910565b610140840152608083015160208901519192506138bc9183919061299b565b6138c684826129f6565b81516138d39082906148dc565b825260405181815233907f407e0eafcf061ff7a3b83f9c05260c37c26204626496f4c150b6202d77a58e359060200160405180910390a2508051602082015161391c91906148dc565b6020820181905261392c90613057565b6139398160200151614001565b60408201819052608082015161394e91612ab9565b6060820152610160810151156139705761396b8160600151612af2565b6139a1565b61397d8160600151612ba0565b6139a16114348261010001518361012001518460a001518560400151600180612c4e565b82516040517f325e370d0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600160248301529091169063325e370d90604401600060405180830381600087803b158015613a0757600080fd5b505af1158015613a1b573d6000803e3d6000fd5b50505050613a3482846000015183604001516001612d9a565b50613a458284600001518787612e3b565b8251604051632c77130760e21b81526001600160a01b0384811660048301529091169063b1dc4c1c90602401600060405180830381600087803b158015613a8b57600080fd5b505af1158015613a9f573d6000803e3d6000fd5b5050606c5460a084015160408501516001600160a01b039092169350633e5d794792508591613ace9190612ab9565b60808a015160a08b01516101408701516040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015260248101949094529184166044840152929092166064820152608481019190915260a401600060405180830381600087803b158015613b5857600080fd5b505af1158015613b6c573d6000803e3d6000fd5b505084516040517f62e768740000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830181905294507f019b61d9140f8784f4eed1e66569335630452af2d974ceb13d3e706c078672969350909116906362e76874906024016020604051808303816000875af1158015613bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1d91906148c3565b604080519182523360208301520160405180910390a2613c4283602001518686612d53565b613c6e836020015184604001518489606001518a60400151613c6491906149c6565b85602001516132c1565b6020838101516040808601516069546000548351637d92c3bb60e01b81529351613d699693946001600160a01b03938416949390921692637d92c3bb92600480820193918290030181865afa158015613ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cef91906148c3565b60008054906101000a90046001600160a01b03166001600160a01b0316637d92c3bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d6491906148c3565b6132c1565b816001600160a01b03167f2378133b944f78ec525dfdbb365af53d7cd776ba27eab8202e31491bf229ca6d82604001518787600033604051613daf959493929190614c7c565b60405180910390a28051604080519182523360208301526001600160a01b038416917faf30136f135f84b150c5071fb9ca74994f992d976382cc4f8462b29215467aea9101611e12565b603554610100900460ff1661188c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610aab565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610cd8908590614083565b6040517f3b6678650000000000000000000000000000000000000000000000000000000081526001600160a01b03828116600483015260009190841690633b66786590602401602060405180830381865afa158015613f4f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f691906148a6565b6040517fcacabd270000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390526000919085169063cacabd2790604401602060405180830381865afa158015613fdd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d091906148c3565b60008060009054906101000a90046001600160a01b03166001600160a01b0316637d92c3bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614055573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061407991906148c3565b6122fd90836148dc565b60006140d8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661416b9092919063ffffffff16565b90508051600014806140f95750808060200190518101906140f99190614cd0565b6125345760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aab565b60606127d0848460008585600080866001600160a01b031685876040516141929190614f6f565b60006040518083038185875af1925050503d80600081146141cf576040519150601f19603f3d011682016040523d82523d6000602084013e6141d4565b606091505b5091509150612c9a878383876060831561424f578251600003614248576001600160a01b0385163b6142485760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aab565b50816127d0565b6127d083838151156142645781518083602001fd5b8060405162461bcd60e51b8152600401610aab9190614f8b565b60008083601f84011261429057600080fd5b50813567ffffffffffffffff8111156142a857600080fd5b6020830191508360208260051b85010111156142c357600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614309576143096142ca565b604052919050565b600067ffffffffffffffff82111561432b5761432b6142ca565b5060051b60200190565b600082601f83011261434657600080fd5b8135602061435b61435683614311565b6142e0565b82815260059290921b8401810191818101908684111561437a57600080fd5b8286015b84811015614395578035835291830191830161437e565b509695505050505050565b8015158114610c5f57600080fd5b80356143b9816143a0565b919050565b6001600160a01b0381168114610c5f57600080fd5b80356143b9816143be565b6000806000806000806000806000806000806101208d8f03121561440157600080fd5b67ffffffffffffffff8d35111561441757600080fd5b6144248e8e358f0161427e565b909c509a5067ffffffffffffffff60208e0135111561444257600080fd5b6144528e60208f01358f01614335565b995067ffffffffffffffff60408e0135111561446d57600080fd5b61447d8e60408f01358f0161427e565b909950975067ffffffffffffffff60608e0135111561449b57600080fd5b6144ab8e60608f01358f0161427e565b909750955060808d013594506144c360a08e016143ae565b93506144d160c08e016143d3565b92506144df60e08e016143d3565b91506101008d013590509295989b509295989b509295989b565b60008060008060008060008060e0898b03121561451557600080fd5b883567ffffffffffffffff8082111561452d57600080fd5b6145398c838d0161427e565b909a50985060208b013591508082111561455257600080fd5b5061455f8b828c01614335565b965050604089013594506060890135614577816143be565b93506080890135614587816143be565b925060a0890135915060c089013561459e816143be565b809150509295985092959890939650565b600080600080600080600060c0888a0312156145ca57600080fd5b873596506020880135955060408801356145e3816143be565b945060608801356145f3816143be565b9350608088013567ffffffffffffffff8082111561461057600080fd5b61461c8b838c0161427e565b909550935060a08a013591508082111561463557600080fd5b506146428a828b01614335565b91505092959891949750929550565b60006020828403121561466357600080fd5b5035919050565b60008060008060008060008060e0898b03121561468657600080fd5b8835975060208901359650604089013561469f816143be565b955060608901356146af816143be565b9450608089013567ffffffffffffffff808211156146cc57600080fd5b6146d88c838d0161427e565b909650945060a08b01359150808211156146f157600080fd5b506146fe8b828c01614335565b92505060c089013561459e816143be565b60008060008060008060008060006101208a8c03121561472e57600080fd5b8935614739816143be565b985060208a0135614749816143be565b975060408a0135614759816143be565b965060608a0135614769816143be565b955060808a0135614779816143be565b945060a08a0135614789816143be565b935060c08a0135614799816143be565b925060e08a01356147a9816143be565b91506101008a01356147ba816143be565b809150509295985092959850929598565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614809576148096147e1565b5060010190565b8183526000602080850194508260005b8581101561484e578135614833816143be565b6001600160a01b031687529582019590820190600101614820565b509495945050505050565b60408152600061486d604083018688614810565b8281036020840152612c9a818587614810565b604081526000614894604083018587614810565b90508215156020830152949350505050565b6000602082840312156148b857600080fd5b81516133f6816143be565b6000602082840312156148d557600080fd5b5051919050565b808201808211156122fd576122fd6147e1565b600081518084526020808501945080840160005b8381101561484e5781516001600160a01b031687529582019590820190600101614903565b600081518084526020808501945080840160005b8381101561484e5781518752958201959082019060010161493c565b83815260606020820152600061497160608301856148ef565b82810360408401526149838185614928565b9695505050505050565b80820281158282048414176122fd576122fd6147e1565b6000826149c157634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156122fd576122fd6147e1565b805160408084528151908401819052600091602091908201906060860190845b81811015614a1e5783516001600160a01b0316835292840192918401916001016149f9565b50508483015186820387850152805180835290840192506000918401905b808310156143955783518252928401926001929092019190840190614a3c565b6001600160a01b0384168152606060208201526000614a7e60608301856149d9565b828103604084015261498381856149d9565b600082601f830112614aa157600080fd5b81516020614ab161435683614311565b82815260059290921b84018101918181019086841115614ad057600080fd5b8286015b84811015614395578051614ae7816143be565b8352918301918301614ad4565b600082601f830112614b0557600080fd5b81516020614b1561435683614311565b82815260059290921b84018101918181019086841115614b3457600080fd5b8286015b848110156143955780518352918301918301614b38565b600060208284031215614b6157600080fd5b815167ffffffffffffffff80821115614b7957600080fd5b9083019060408286031215614b8d57600080fd5b604051604081018181108382111715614ba857614ba86142ca565b604052825182811115614bba57600080fd5b614bc687828601614a90565b825250602083015182811115614bdb57600080fd5b614be787828601614af4565b60208301525095945050505050565b60008060408385031215614c0957600080fd5b825167ffffffffffffffff80821115614c2157600080fd5b614c2d86838701614a90565b93506020850151915080821115614c4357600080fd5b50614c5085828601614af4565b9150509250929050565b60038110614c7857634e487b7160e01b600052602160045260246000fd5b9052565b85815260a060208201526000614c9560a08301876148ef565b8281036040840152614ca78187614928565b915050614cb76060830185614c5a565b6001600160a01b03831660808301529695505050505050565b600060208284031215614ce257600080fd5b81516133f6816143a0565b600080600060608486031215614d0257600080fd5b8351925060208401519150604084015167ffffffffffffffff811115614d2757600080fd5b614d3386828701614af4565b9150509250925092565b604081526000614d5060408301856148ef565b8281036020840152612e328185614928565b60008060008060808587031215614d7857600080fd5b8451935060208501519250604085015167ffffffffffffffff80821115614d9e57600080fd5b614daa88838901614af4565b93506060870151915080821115614dc057600080fd5b50614dcd87828801614af4565b91505092959194509250565b600080600060608486031215614dee57600080fd5b835167ffffffffffffffff80821115614e0657600080fd5b614e1287838801614a90565b94506020860151915080821115614e2857600080fd5b50614e3586828701614af4565b925050604084015190509250925092565b60c081526000614e5960c08301896148ef565b8281036020840152614e6b8189614928565b90508281036040840152614e7f8188614928565b60608401969096525050608081019290925260a0909101529392505050565b60008060408385031215614eb157600080fd5b505080516020909101519092909150565b600080600060608486031215614ed757600080fd5b835192506020840151614ee9816143be565b6040850151909250614efa816143be565b809150509250925092565b6001600160a01b038416815260606020820152600061497160608301856148ef565b604081526000614f3a60408301856148ef565b905082151560208301529392505050565b60005b83811015614f66578181015183820152602001614f4e565b50506000910152565b60008251614f81818460208701614f4b565b9190910192915050565b6020815260008251806020840152614faa816040850160208701614f4b565b601f01601f1916919091016040019291505056fea26469706673582212203118e1a6b5504c4a806d5a3c737503fc47f03a873d7106936dc61d115ad5239264736f6c63430008130033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a35760003560e01c80635686993011610076578063795d26c31161005b578063795d26c314610111578063887105d31461012b578063f5e95acb1461013357600080fd5b806356869930146100eb5780636921d501146100fe57600080fd5b8063076cca87146100a85780630e2f1df6146100bd57806318976fa2146100d05780633b00ae94146100d8575b600080fd5b6100bb6100b63660046143de565b610146565b005b6100bb6100cb3660046144f9565b610499565b6100bb61070c565b6100bb6100e63660046145af565b610748565b6100bb6100f9366004614651565b610773565b6100bb61010c36600461466a565b61084d565b61011961086f565b60405190815260200160405180910390f35b610119610977565b6100bb61014136600461470f565b610a03565b61014e610bcf565b604080516080810182526068546001600160a01b03908116825260015481166020830152606b5481169282019290925260005490911660608201528b896101a2898214801561019d57508d5183145b610c28565b60005b828110156101e3576101d38e82815181106101c2576101c26147cb565b602002602001015160001415610c28565b6101dc816147f7565b90506101a5565b5060005b81811015610224576102148b8b83818110610204576102046147cb565b9050602002013560001415610c28565b61021d816147f7565b90506101e7565b50505080606001516001600160a01b03166354c847dd8e8e8d8d6040518563ffffffff1660e01b815260040161025d9493929190614859565b60006040518083038186803b15801561027557600080fd5b505afa158015610289573d6000803e3d6000fd5b505050506102cb8d8d808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508f9250610c62915050565b61034c604051806101a00160405280606081526020016060815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000151581526020016000151581525090565b8c67ffffffffffffffff811115610365576103656142ca565b60405190808252806020026020018201604052801561038e578160200160208202803683370190505b5081600001819052508d8d8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050505060208083019190915260408083018e905280518c830281810184019092528c8152918d918d918291908501908490808284376000920191909152505050506060820152604080516020808b0282810182019093528a825290918b918b918291850190849080828437600092019190915250505050608082015260c081018790528515156101608201526001600160a01b038086166101008301528416610120820152610140810183905261047f818333610cde565b505061048b6001603655565b505050505050505050505050565b6104a1610bcf565b604080516080810182526068546001600160a01b03908116825260015481166020830152606b548116928201929092526000549091166060820152865188906104eb908214610c28565b60005b8181101561051b5761050b8982815181106101c2576101c26147cb565b610514816147f7565b90506104ee565b505080606001516001600160a01b031663e5054c968a8a60016040518463ffffffff1660e01b815260040161055293929190614880565b60006040518083038186803b15801561056a57600080fd5b505afa15801561057e573d6000803e3d6000fd5b505050506105c08989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508b9250610c62915050565b610641604051806101a00160405280606081526020016060815260200160608152602001606081526020016060815260200160608152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000151581526020016000151581525090565b8867ffffffffffffffff81111561065a5761065a6142ca565b604051908082528060200260200182016040528015610683578160200160208202803683370190505b508152604080516020808c0282810182019093528b825290918c918c91829185019084908082843760009201919091525050505060208201526040810188905260c081018790526001600160a01b03808716610100830152851661012082015261014081018490526106f6818385610cde565b50506107026001603655565b5050505050505050565b610714610bcf565b604080516000808252602082018181528284018281526060840190945261073c939091611893565b6107466001603655565b565b610750610bcf565b6107608787878787878733611e22565b61076a6001603655565b50505050505050565b6068546001600160a01b031633146107b7576040517f150d02fb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b03166325b18cff6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561080b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082f91906148a6565b606b54909150610849906001600160a01b03168284611fc6565b5050565b610855610bcf565b6108658888888888888888611e22565b6107026001603655565b600080600160009054906101000a90046001600160a01b03166001600160a01b03166381b7f1bf6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e991906148c3565b90506000600260009054906101000a90046001600160a01b03166001600160a01b03166381b7f1bf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610940573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061096491906148c3565b905061097081836148dc565b9250505090565b600154604080517f651340c400000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163651340c49160048083019260209291908290030181865afa1580156109da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fe91906148c3565b905090565b603554610100900460ff1615808015610a235750603554600160ff909116105b80610a3d5750303b158015610a3d575060355460ff166001145b610ab45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b6035805460ff191660011790558015610ad7576035805461ff0019166101001790555b610adf61203e565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03868116919091179092556001805482168c84161790556002805482168b84161790556068805482168d84161790556069805482168a8416179055606a80548216898416179055606c80548216888416179055606b80548216878416179055606d80549091169184169190911790558015610bc3576035805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b600260365403610c215760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610aab565b6002603655565b80610c5f576040517f5bf4904300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b805160005b81811015610cd857610cab848281518110610c8457610c846147cb565b6020026020010151848381518110610c9e57610c9e6147cb565b60200260200101516120b1565b838281518110610cbd57610cbd6147cb565b6020908102919091010152610cd1816147f7565b9050610c67565b50505050565b610db660405180610380016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b610dbe612303565b6103008501526102e08401526102c083015215156103608201819052610140850151610de99161241c565b610e00846040015185608001518660c001516124e5565b8251610e0e90600184612539565b8251610e1990612632565b610e308360600151856020015186604001516126a7565b61024085015250610220830152610200820152606080840151908501516080860151610e5d9291906126a7565b505061028083015261026082015261016084015115610f1757606d5460c0850151602086015161024084015160405163599ae27560e01b81526001600160a01b039094169363599ae27593610eb89390929091600401614958565b600060405180830381600087803b158015610ed257600080fd5b505af1158015610ee6573d6000803e3d6000fd5b505050508360c001518161020001511015610f05578360c00151610f0c565b8061020001515b6102a0820152610f24565b6102008101516102a08201525b60c084015181526101608401518015610f405750806103600151155b15610fb657610f5f838560c00151836102a00151876101400151612731565b6101a082018190526102a082015190610f8190670de0b6b3a76400009061498d565b610f8b91906149a4565b846101400151610f9b91906149c6565b6101408501526101a08101518151610fb391906148dc565b81525b8251610fc290836127d8565b60c0840152610100830181905260e083018290526060850151610fe69290916126a7565b50506060808401919091526040808401929092528401518151808301835260e0840151815261010084015160208281019190915283518085018552888201518152888501519181019190915292517f5799186700000000000000000000000000000000000000000000000000000000815273__$dd008e7fdb676c23adfd59cbc2bd3a4768$__9363fb47a036936001600160a01b0316928592635799186792611096928692909190600401614a5c565b600060405180830381865af41580156110b3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110db9190810190614b4f565b60405180604001604052808960600151815260200189608001518152506040518463ffffffff1660e01b815260040161111693929190614a5c565b600060405180830381865af4158015611133573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261115b9190810190614bf6565b61014083015261012082018190525160e082015151101561118a5761118a836060015182610120015151612875565b80610260015181610200015182604001516111a591906148dc565b6111af91906149c6565b608082015261028081015161022082015160608301516111cf91906148dc565b6111d991906149c6565b60a082018190526060820151106103408201819052156112115780606001518160a0015161120791906149c6565b602082015261122b565b8060a00151816060015161122591906149c6565b60208201525b602084015151156112dc576112648360600151856020015186604001518760000151856102c00151866102000151876102600151612910565b6103208301526101c08201819052156112dc57611291816101c00151826102a0015186610140015161299b565b6112a083826101c001516129f6565b6101c081015160405190815233907f407e0eafcf061ff7a3b83f9c05260c37c26204626496f4c150b6202d77a58e359060200160405180910390a25b6112ee81604001518260c00151612ab9565b6101608201526101c081015160c082015161130991906148dc565b60c08201526080810151610160850151611349919061133857825160c084015161133391906149c6565b612ab9565b825160c084015161133391906148dc565b610180820152610360810151156113f95760808401515115611397576040517fac64e2f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b836101600151156113f4576113b0816101800151612af2565b80610160015181610180015110156113f4576040517f9bc10be000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611439565b611407816101800151612ba0565b611439611434826102e00151836103000151846020015185600001518661034001518a6101600151612c4e565b612ca5565b6020840151511561145b5761145b836020015185602001518660400151612d53565b836101600151156114965761148b828460000151836101c00151846000015161148491906148dc565b6001612d9a565b6101e08201526114ee565b6101c0810151815111156114c95761148b828460000151836101c0015184600001516114c291906149c6565b6000612d9a565b6114e78284600001518360000151846101c0015161148491906149c6565b6101e08201525b611508828460000151836101200151846101400151612e3b565b8251604051632c77130760e21b81526001600160a01b0384811660048301529091169063b1dc4c1c90602401600060405180830381600087803b15801561154e57600080fd5b505af1158015611562573d6000803e3d6000fd5b5050606c5460a08401516101e08501516001600160a01b0390921693506383be79a1925085916115929190612ab9565b6101008801516101208901516103208701516102008801516040808a015190517fffffffff0000000000000000000000000000000000000000000000000000000060e08a901b1681526001600160a01b03978816600482015260248101969096529386166044860152949091166064840152608483015260a482019290925260c481019190915260e401600060405180830381600087803b15801561163657600080fd5b505af115801561164a573d6000803e3d6000fd5b50505050836101800151156116715761167183856060015186608001518760a00151612eb2565b836101600151158015611687575060c084015115155b8061169457508361018001515b156116e2576116bd81600001516116ae8360c00151612fd5565b6116b891906149c6565b613057565b6116cf8160c001518260000151613105565b6116e283604001518260000151846131bd565b8361018001511561170a5761170583602001518460400151848760c00151613200565b6117e4565b60008460e001518560c0015161172091906149c6565b90508461016001511561174b5761174684602001518560400151858486600001516132c1565b61175f565b61175f846020015185604001518584613200565b60208401516101c0830151604051632b7c7b1160e01b81526001600160a01b0390921691632b7c7b11916117999160040190815260200190565b600060405180830381600087803b1580156117b357600080fd5b505af11580156117c7573d6000803e3d6000fd5b505050506117e2846020015186606001518760800151613326565b505b816001600160a01b03167f2378133b944f78ec525dfdbb365af53d7cd776ba27eab8202e31491bf229ca6d826101e00151836101200151846101400151600233604051611835959493929190614c7c565b60405180910390a26101a0810151604080519182523360208301526001600160a01b038416917faf30136f135f84b150c5071fb9ca74994f992d976382cc4f8462b29215467aea910160405180910390a250505050565b6001603655565b60408051608080820183526068546001600160a01b0390811683526001548116602080850191909152606b5482168486015260008054909216606080860191909152855160e0810187528381529182018390529481018290528085018590529182019390935260a0810183905260c081019290925290815161191790600133612539565b61191f612303565b602085015283525015801560c0830152611965576040517f9a0030a100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815161197090612632565b815161197c90336127d8565b604084015260808301819052606080840183905284015161199e9290916126a7565b505060a0830152508215611b62576000806119bd84604001513361336f565b90506000805b846060015151811015611b27576000856080015182815181106119e8576119e86147cb565b602002602001015190508a5185108015611a4957508a8581518110611a0f57611a0f6147cb565b60200260200101516001600160a01b031686606001518381518110611a3657611a366147cb565b60200260200101516001600160a01b0316145b15611ae457611aa5878c8781518110611a6457611a646147cb565b60200260200101518c8881518110611a7e57611a7e6147cb565b60200260200101518c8981518110611a9857611a986147cb565b60200260200101516133fd565b611aaf90846148dc565b9250898581518110611ac357611ac36147cb565b602002602001015181611ad691906149c6565b9050611ae1856147f7565b94505b8015611b1657611b16876020015187606001518481518110611b0857611b086147cb565b6020026020010151836135cd565b50611b20816147f7565b90506119c3565b50611b3281836148dc565b611b4086604001513361336f565b14611b5e576040516352c8e9c560e01b815260040160405180910390fd5b5050505b611bf4826040015160008054906101000a90046001600160a01b03166001600160a01b0316637d92c3bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdf91906148c3565b8360400151611bee91906149c6565b336131bd565b611c16611434826000015183602001518460a001518560400151600080612c4e565b81516040517fe8ccaab2000000000000000000000000000000000000000000000000000000008152336004820152600260248201526001600160a01b039091169063e8ccaab290604401600060405180830381600087803b158015611c7a57600080fd5b505af1158015611c8e573d6000803e3d6000fd5b50505050611d29826020015183604001513360008054906101000a90046001600160a01b03166001600160a01b0316637d92c3bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1591906148c3565b8560400151611d2491906149c6565b613200565b6020828101516040808501516069546000548351637d92c3bb60e01b81529351611daa9693946001600160a01b03938416949390921692637d92c3bb92600480820193918290030181865afa158015611d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2491906148c3565b82611dc657611dc6826020015182606001518360800151613326565b604080516000808252602082018181528284019384905233937f2378133b944f78ec525dfdbb365af53d7cd776ba27eab8202e31491bf229ca6d93611e12939290916001908790614c7c565b60405180910390a2505050505050565b604080516080810182526068546001600160a01b03908116825260015481166020830152606b5481169282019290925260005490911660608201528251611e6a901515610c28565b611eae858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505060608401518691506001613621565b6060810151611ebd9085612875565b611efb858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250879250610c62915050565b60006040518060c001604052808787905067ffffffffffffffff811115611f2457611f246142ca565b604051908082528060200260200182016040528015611f4d578160200160208202803683370190505b5081526020018b81526020018a815260200160008152602001896001600160a01b03168152602001886001600160a01b03168152509050610bc3818787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992508791508890506136df565b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390528416906340c10f19906044015b600060405180830381600087803b15801561202a57600080fd5b505af115801561076a573d6000803e3d6000fd5b603554610100900460ff166120a95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610aab565b610746613df9565b600080546040517f229dfaa70000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301529091169063229dfaa790602401602060405180830381865afa158015612115573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121399190614cd0565b156122de576000836001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561217e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a291906148a6565b90506121b96001600160a01b038216333086613e64565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526024820185905282169063095ea7b3906044016020604051808303816000875af1158015612221573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122459190614cd0565b506001546040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b03918216602482015290851690636e553f65906044016020604051808303816000875af11580156122b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d691906148c3565b9150506122fd565b6001546122fa906001600160a01b038581169133911685613e64565b50805b92915050565b600080600080600160009054906101000a90046001600160a01b03166001600160a01b031663896a00896040518163ffffffff1660e01b8152600401600060405180830381865afa15801561235c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123849190810190614ced565b50909350915061239261086f565b905060008054906101000a90046001600160a01b03166001600160a01b0316635733d58f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240991906148c3565b6124138383612ab9565b10935090919293565b670de0b6b3a76400008211806124ae5750801580156124ae575060008054906101000a90046001600160a01b03166001600160a01b0316635e9e32126040518163ffffffff1660e01b8152600401602060405180830381865afa158015612487573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ab91906148c3565b82105b15610849576040517f915b943a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801580156124f257508251155b80156124fd57508151155b15612534576040517fac146f1400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b6040517f0c5aed570000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301528315159190851690630c5aed5790602401602060405180830381865afa15801561259d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c19190614cd0565b151514612534578115612600576040517f79f3c20500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f434f9d1e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f0b0765570000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b03821690630b07655790602401600060405180830381600087803b15801561268c57600080fd5b505af11580156126a0573d6000803e3d6000fd5b5050505050565b600080606080866001600160a01b031663ab0084cf87876040518363ffffffff1660e01b81526004016126db929190614d3d565b600060405180830381865afa1580156126f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127209190810190614d62565b935093509350935093509350935093565b83516040517fde162391000000000000000000000000000000000000000000000000000000008152600481018590526000916001600160a01b03169063de162391906024016020604051808303816000875af1158015612795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b991906148c3565b90506127c681848461299b565b6127d085826129f6565b949350505050565b6040517f3a1141eb0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152606091829160009190861690633a1141eb90602401600060405180830381865afa158015612840573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128689190810190614dd9565b9250925092509250925092565b816001600160a01b031663fe8d6d6f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d791906148c3565b811115610849576040517febd2319a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080886001600160a01b0316635bdee1718989898989896040518763ffffffff1660e01b815260040161294996959493929190614e46565b60408051808303816000875af1158015612967573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298b9190614e9e565b9150915097509795505050505050565b6000826129b0670de0b6b3a76400008661498d565b6129ba91906149a4565b905081811115610cd8576040517f9543c69800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600084606001516001600160a01b0316633b798fb26040518163ffffffff1660e01b8152600401606060405180830381865afa158015612a3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a619190614ec2565b919450925090506000670de0b6b3a7640000612a7d868661498d565b612a8791906149a4565b9050612a9886604001518483611fc6565b6040860151612ab19083612aac84896149c6565b611fc6565b505050505050565b60008115612ae957600082612ad685670de0b6b3a764000061498d565b612ae091906149a4565b91506122fd9050565b506000196122fd565b60008054906101000a90046001600160a01b03166001600160a01b0316635733d58f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b6791906148c3565b811015610c5f576040517f43e87f1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a90046001600160a01b03166001600160a01b031663794e57246040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1591906148c3565b811015610c5f576040517f583a5a0800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082612c6457612c5f85886149c6565b612c6e565b612c6e85886148dc565b965081612c8457612c7f84876149c6565b612c8e565b612c8e84876148dc565b9550612c9a8787612ab9565b979650505050505050565b60008054906101000a90046001600160a01b03166001600160a01b0316635733d58f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1a91906148c3565b811015610c5f576040517f2359341900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fa7a24edd0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063a7a24edd906120109085908590600401614d3d565b6040517f64f23caa0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018490528215156044830152600091908516906364f23caa906064016020604051808303816000875af1158015612e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3291906148c3565b95945050505050565b6040517fc308d81c0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063c308d81c90612e8490879086908690600401614f05565b600060405180830381600087803b158015612e9e57600080fd5b505af1158015610702573d6000803e3d6000fd5b6000612ec285604001513361336f565b90506000805b8551811015612f9e57838181518110612ee357612ee36147cb565b6020026020010151600014612f4d57612f3c87878381518110612f0857612f086147cb565b6020026020010151878481518110612f2257612f226147cb565b6020026020010151878581518110611a9857611a986147cb565b612f4690836148dc565b9150612f8e565b612f8e8760200151878381518110612f6757612f676147cb565b6020026020010151878481518110612f8157612f816147cb565b60200260200101516135cd565b612f97816147f7565b9050612ec8565b50612fa981836148dc565b612fb787604001513361336f565b14612ab1576040516352c8e9c560e01b815260040160405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b0316637d92c3bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061304d91906148c3565b6122fd90836149c6565b60008054906101000a90046001600160a01b03166001600160a01b031663969c24526040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130cc91906148c3565b811015610c5f576040517fb921c48a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a90046001600160a01b03166001600160a01b0316637d92c3bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061317a91906148c3565b61318490836149c6565b811115610849576040517f14588fef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816131c8848361336f565b1015612534576040517fd8e1b9c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f2a7ba1f7000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b03851690632a7ba1f790602401600060405180830381600087803b15801561325b57600080fd5b505af115801561326f573d6000803e3d6000fd5b50506040517f9dc29fac0000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526024820185905286169250639dc29fac9150604401612e84565b604051632b7c7b1160e01b8152600481018290526001600160a01b03861690632b7c7b1190602401600060405180830381600087803b15801561330357600080fd5b505af1158015613317573d6000803e3d6000fd5b505050506126a0848484611fc6565b6040517f564a5c2e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063564a5c2e9061201090339086908690600401614f05565b6040517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600091908416906370a0823190602401602060405180830381865afa1580156133d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f691906148c3565b9392505050565b6000670de0b6b3a7640000821115613441576040517f1bf34f5300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000613451866060015186613eec565b60208701516040517f62f6105b0000000000000000000000000000000000000000000000000000000081526001600160a01b0380841660048301528881166024830152604482018890529293509116906362f6105b90606401600060405180830381600087803b1580156134c457600080fd5b505af11580156134d8573d6000803e3d6000fd5b5050505060006134ed87606001518787613f73565b90506000670de0b6b3a764000061350486826149c6565b61350e908461498d565b61351891906149a4565b60408981015190517fa7b8a5370000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b038a811660248301529182166044820152606481018990526084810183905291925084169063a7b8a5379060a4016020604051808303816000875af115801561359d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135c191906148c3565b98975050505050505050565b6040517fb68b02e20000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0383811660248301526044820183905284169063b68b02e290606401612010565b83518351613630908214610c28565b60005b81811015613660576136508582815181106101c2576101c26147cb565b613659816147f7565b9050613633565b506040517fe5054c960000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063e5054c96906136a89088908690600401614f27565b60006040518083038186803b1580156136c057600080fd5b505afa1580156136d4573d6000803e3d6000fd5b505050505050505050565b61374560405180610180016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081526020016000815260200160008152602001600081526020016000151581525090565b61374d612303565b61012085015261010084015260e08301521515610160820181905260208701516137769161241c565b825161378490600084612539565b60408601516020820152606083015161379e9086866126a7565b60c0850181905260a0850192909252506080830191909152606d54604088810151905163599ae27560e01b81526001600160a01b039092169263599ae275926137ec92918a91600401614958565b600060405180830381600087803b15801561380657600080fd5b505af115801561381a573d6000803e3d6000fd5b5050505080610160015161387b5761384083876040015183608001518960200151612731565b80825260808201519061385c90670de0b6b3a76400009061498d565b61386691906149a4565b866020015161387591906149c6565b60208701525b600061389d846060015187878a600001518660e0015187608001516000612910565b610140840152608083015160208901519192506138bc9183919061299b565b6138c684826129f6565b81516138d39082906148dc565b825260405181815233907f407e0eafcf061ff7a3b83f9c05260c37c26204626496f4c150b6202d77a58e359060200160405180910390a2508051602082015161391c91906148dc565b6020820181905261392c90613057565b6139398160200151614001565b60408201819052608082015161394e91612ab9565b6060820152610160810151156139705761396b8160600151612af2565b6139a1565b61397d8160600151612ba0565b6139a16114348261010001518361012001518460a001518560400151600180612c4e565b82516040517f325e370d0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600160248301529091169063325e370d90604401600060405180830381600087803b158015613a0757600080fd5b505af1158015613a1b573d6000803e3d6000fd5b50505050613a3482846000015183604001516001612d9a565b50613a458284600001518787612e3b565b8251604051632c77130760e21b81526001600160a01b0384811660048301529091169063b1dc4c1c90602401600060405180830381600087803b158015613a8b57600080fd5b505af1158015613a9f573d6000803e3d6000fd5b5050606c5460a084015160408501516001600160a01b039092169350633e5d794792508591613ace9190612ab9565b60808a015160a08b01516101408701516040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b1681526001600160a01b03958616600482015260248101949094529184166044840152929092166064820152608481019190915260a401600060405180830381600087803b158015613b5857600080fd5b505af1158015613b6c573d6000803e3d6000fd5b505084516040517f62e768740000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830181905294507f019b61d9140f8784f4eed1e66569335630452af2d974ceb13d3e706c078672969350909116906362e76874906024016020604051808303816000875af1158015613bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1d91906148c3565b604080519182523360208301520160405180910390a2613c4283602001518686612d53565b613c6e836020015184604001518489606001518a60400151613c6491906149c6565b85602001516132c1565b6020838101516040808601516069546000548351637d92c3bb60e01b81529351613d699693946001600160a01b03938416949390921692637d92c3bb92600480820193918290030181865afa158015613ccb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cef91906148c3565b60008054906101000a90046001600160a01b03166001600160a01b0316637d92c3bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d6491906148c3565b6132c1565b816001600160a01b03167f2378133b944f78ec525dfdbb365af53d7cd776ba27eab8202e31491bf229ca6d82604001518787600033604051613daf959493929190614c7c565b60405180910390a28051604080519182523360208301526001600160a01b038416917faf30136f135f84b150c5071fb9ca74994f992d976382cc4f8462b29215467aea9101611e12565b603554610100900460ff1661188c5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610aab565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610cd8908590614083565b6040517f3b6678650000000000000000000000000000000000000000000000000000000081526001600160a01b03828116600483015260009190841690633b66786590602401602060405180830381865afa158015613f4f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f691906148a6565b6040517fcacabd270000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390526000919085169063cacabd2790604401602060405180830381865afa158015613fdd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d091906148c3565b60008060009054906101000a90046001600160a01b03166001600160a01b0316637d92c3bb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614055573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061407991906148c3565b6122fd90836148dc565b60006140d8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661416b9092919063ffffffff16565b90508051600014806140f95750808060200190518101906140f99190614cd0565b6125345760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aab565b60606127d0848460008585600080866001600160a01b031685876040516141929190614f6f565b60006040518083038185875af1925050503d80600081146141cf576040519150601f19603f3d011682016040523d82523d6000602084013e6141d4565b606091505b5091509150612c9a878383876060831561424f578251600003614248576001600160a01b0385163b6142485760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aab565b50816127d0565b6127d083838151156142645781518083602001fd5b8060405162461bcd60e51b8152600401610aab9190614f8b565b60008083601f84011261429057600080fd5b50813567ffffffffffffffff8111156142a857600080fd5b6020830191508360208260051b85010111156142c357600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614309576143096142ca565b604052919050565b600067ffffffffffffffff82111561432b5761432b6142ca565b5060051b60200190565b600082601f83011261434657600080fd5b8135602061435b61435683614311565b6142e0565b82815260059290921b8401810191818101908684111561437a57600080fd5b8286015b84811015614395578035835291830191830161437e565b509695505050505050565b8015158114610c5f57600080fd5b80356143b9816143a0565b919050565b6001600160a01b0381168114610c5f57600080fd5b80356143b9816143be565b6000806000806000806000806000806000806101208d8f03121561440157600080fd5b67ffffffffffffffff8d35111561441757600080fd5b6144248e8e358f0161427e565b909c509a5067ffffffffffffffff60208e0135111561444257600080fd5b6144528e60208f01358f01614335565b995067ffffffffffffffff60408e0135111561446d57600080fd5b61447d8e60408f01358f0161427e565b909950975067ffffffffffffffff60608e0135111561449b57600080fd5b6144ab8e60608f01358f0161427e565b909750955060808d013594506144c360a08e016143ae565b93506144d160c08e016143d3565b92506144df60e08e016143d3565b91506101008d013590509295989b509295989b509295989b565b60008060008060008060008060e0898b03121561451557600080fd5b883567ffffffffffffffff8082111561452d57600080fd5b6145398c838d0161427e565b909a50985060208b013591508082111561455257600080fd5b5061455f8b828c01614335565b965050604089013594506060890135614577816143be565b93506080890135614587816143be565b925060a0890135915060c089013561459e816143be565b809150509295985092959890939650565b600080600080600080600060c0888a0312156145ca57600080fd5b873596506020880135955060408801356145e3816143be565b945060608801356145f3816143be565b9350608088013567ffffffffffffffff8082111561461057600080fd5b61461c8b838c0161427e565b909550935060a08a013591508082111561463557600080fd5b506146428a828b01614335565b91505092959891949750929550565b60006020828403121561466357600080fd5b5035919050565b60008060008060008060008060e0898b03121561468657600080fd5b8835975060208901359650604089013561469f816143be565b955060608901356146af816143be565b9450608089013567ffffffffffffffff808211156146cc57600080fd5b6146d88c838d0161427e565b909650945060a08b01359150808211156146f157600080fd5b506146fe8b828c01614335565b92505060c089013561459e816143be565b60008060008060008060008060006101208a8c03121561472e57600080fd5b8935614739816143be565b985060208a0135614749816143be565b975060408a0135614759816143be565b965060608a0135614769816143be565b955060808a0135614779816143be565b945060a08a0135614789816143be565b935060c08a0135614799816143be565b925060e08a01356147a9816143be565b91506101008a01356147ba816143be565b809150509295985092959850929598565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614809576148096147e1565b5060010190565b8183526000602080850194508260005b8581101561484e578135614833816143be565b6001600160a01b031687529582019590820190600101614820565b509495945050505050565b60408152600061486d604083018688614810565b8281036020840152612c9a818587614810565b604081526000614894604083018587614810565b90508215156020830152949350505050565b6000602082840312156148b857600080fd5b81516133f6816143be565b6000602082840312156148d557600080fd5b5051919050565b808201808211156122fd576122fd6147e1565b600081518084526020808501945080840160005b8381101561484e5781516001600160a01b031687529582019590820190600101614903565b600081518084526020808501945080840160005b8381101561484e5781518752958201959082019060010161493c565b83815260606020820152600061497160608301856148ef565b82810360408401526149838185614928565b9695505050505050565b80820281158282048414176122fd576122fd6147e1565b6000826149c157634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156122fd576122fd6147e1565b805160408084528151908401819052600091602091908201906060860190845b81811015614a1e5783516001600160a01b0316835292840192918401916001016149f9565b50508483015186820387850152805180835290840192506000918401905b808310156143955783518252928401926001929092019190840190614a3c565b6001600160a01b0384168152606060208201526000614a7e60608301856149d9565b828103604084015261498381856149d9565b600082601f830112614aa157600080fd5b81516020614ab161435683614311565b82815260059290921b84018101918181019086841115614ad057600080fd5b8286015b84811015614395578051614ae7816143be565b8352918301918301614ad4565b600082601f830112614b0557600080fd5b81516020614b1561435683614311565b82815260059290921b84018101918181019086841115614b3457600080fd5b8286015b848110156143955780518352918301918301614b38565b600060208284031215614b6157600080fd5b815167ffffffffffffffff80821115614b7957600080fd5b9083019060408286031215614b8d57600080fd5b604051604081018181108382111715614ba857614ba86142ca565b604052825182811115614bba57600080fd5b614bc687828601614a90565b825250602083015182811115614bdb57600080fd5b614be787828601614af4565b60208301525095945050505050565b60008060408385031215614c0957600080fd5b825167ffffffffffffffff80821115614c2157600080fd5b614c2d86838701614a90565b93506020850151915080821115614c4357600080fd5b50614c5085828601614af4565b9150509250929050565b60038110614c7857634e487b7160e01b600052602160045260246000fd5b9052565b85815260a060208201526000614c9560a08301876148ef565b8281036040840152614ca78187614928565b915050614cb76060830185614c5a565b6001600160a01b03831660808301529695505050505050565b600060208284031215614ce257600080fd5b81516133f6816143a0565b600080600060608486031215614d0257600080fd5b8351925060208401519150604084015167ffffffffffffffff811115614d2757600080fd5b614d3386828701614af4565b9150509250925092565b604081526000614d5060408301856148ef565b8281036020840152612e328185614928565b60008060008060808587031215614d7857600080fd5b8451935060208501519250604085015167ffffffffffffffff80821115614d9e57600080fd5b614daa88838901614af4565b93506060870151915080821115614dc057600080fd5b50614dcd87828801614af4565b91505092959194509250565b600080600060608486031215614dee57600080fd5b835167ffffffffffffffff80821115614e0657600080fd5b614e1287838801614a90565b94506020860151915080821115614e2857600080fd5b50614e3586828701614af4565b925050604084015190509250925092565b60c081526000614e5960c08301896148ef565b8281036020840152614e6b8189614928565b90508281036040840152614e7f8188614928565b60608401969096525050608081019290925260a0909101529392505050565b60008060408385031215614eb157600080fd5b505080516020909101519092909150565b600080600060608486031215614ed757600080fd5b835192506020840151614ee9816143be565b6040850151909250614efa816143be565b809150509250925092565b6001600160a01b038416815260606020820152600061497160608301856148ef565b604081526000614f3a60408301856148ef565b905082151560208301529392505050565b60005b83811015614f66578181015183820152602001614f4e565b50506000910152565b60008251614f81818460208701614f4b565b9190910192915050565b6020815260008251806020840152614faa816040850160208701614f4b565b601f01601f1916919091016040019291505056fea26469706673582212203118e1a6b5504c4a806d5a3c737503fc47f03a873d7106936dc61d115ad5239264736f6c63430008130033",
  "linkReferences": {
    "contracts/Dependencies_v0_8/SumCollateralsLib.sol": {
      "SumCollateralsLib": [
        {
          "length": 20,
          "start": 4217
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/Dependencies_v0_8/SumCollateralsLib.sol": {
      "SumCollateralsLib": [
        {
          "length": 20,
          "start": 4185
        }
      ]
    }
  }
}
