{
  "_format": "hh-sol-artifact-1",
  "contractName": "SlippageIssuanceModule",
  "sourceName": "contracts/protocol/modules/v1/SlippageIssuanceModule.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IController",
          "name": "_controller",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newFeeRecipient",
          "type": "address"
        }
      ],
      "name": "FeeRecipientUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newIssueFee",
          "type": "uint256"
        }
      ],
      "name": "IssueFeeUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_newRedeemFee",
          "type": "uint256"
        }
      ],
      "name": "RedeemFeeUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_issuer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_hookContract",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_quantity",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_managerFee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_protocolFee",
          "type": "uint256"
        }
      ],
      "name": "SetTokenIssued",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_redeemer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_quantity",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_managerFee",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_protocolFee",
          "type": "uint256"
        }
      ],
      "name": "SetTokenRedeemed",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_quantity",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "_isIssue",
          "type": "bool"
        }
      ],
      "name": "calculateTotalFees",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "totalQuantity",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "managerFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "protocolFee",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "controller",
      "outputs": [
        {
          "internalType": "contract IController",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "getModuleIssuanceHooks",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_quantity",
          "type": "uint256"
        }
      ],
      "name": "getRequiredComponentIssuanceUnits",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_quantity",
          "type": "uint256"
        }
      ],
      "name": "getRequiredComponentIssuanceUnitsOffChain",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_quantity",
          "type": "uint256"
        }
      ],
      "name": "getRequiredComponentRedemptionUnits",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_quantity",
          "type": "uint256"
        }
      ],
      "name": "getRequiredComponentRedemptionUnitsOffChain",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_maxManagerFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_managerIssueFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_managerRedeemFee",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_feeRecipient",
          "type": "address"
        },
        {
          "internalType": "contract IManagerIssuanceHook",
          "name": "_managerIssuanceHook",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_hook",
          "type": "address"
        }
      ],
      "name": "isModuleIssuanceHook",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "",
          "type": "address"
        }
      ],
      "name": "issuanceSettings",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "maxManagerFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "managerIssueFee",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "managerRedeemFee",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "feeRecipient",
          "type": "address"
        },
        {
          "internalType": "contract IManagerIssuanceHook",
          "name": "managerIssuanceHook",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "issue",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_setQuantity",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "_checkedComponents",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_maxTokenAmountsIn",
          "type": "uint256[]"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "issueWithSlippage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "redeem",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_setQuantity",
          "type": "uint256"
        },
        {
          "internalType": "address[]",
          "name": "_checkedComponents",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "_minTokenAmountsOut",
          "type": "uint256[]"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "redeemWithSlippage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "registerToIssuanceModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "removeModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        }
      ],
      "name": "unregisterFromIssuanceModule",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_newFeeRecipient",
          "type": "address"
        }
      ],
      "name": "updateFeeRecipient",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_newIssueFee",
          "type": "uint256"
        }
      ],
      "name": "updateIssueFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ISetToken",
          "name": "_setToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_newRedeemFee",
          "type": "uint256"
        }
      ],
      "name": "updateRedeemFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b50604051620043de380380620043de83398101604081905262000034916200005e565b600080546001600160a01b0319166001600160a01b0392909216919091179055600180556200008e565b60006020828403121562000070578081fd5b81516001600160a01b038116811462000087578182fd5b9392505050565b614340806200009e6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063750ab7a8116100ad578063cb38b22311610071578063cb38b22314610286578063cd3c753914610299578063d9b1b6e0146102bd578063e0799620146102d0578063f77c4791146102e35761012c565b8063750ab7a8146102235780637cbe104014610236578063847ef08d146102495780638dda403714610251578063bf9fe138146102735761012c565b8063607ad89f116100f4578063607ad89f146101b757806363082446146101ca5780636b8e53b6146101ea5780636d78f47a146101fd5780636dd86aa9146102105761012c565b806308bc0e1114610131578063131e26b91461015a57806357aa792e1461017c5780635c833bfd1461018f5780635d98c373146101a4575b600080fd5b61014461013f3660046134a6565b6102f8565b60405161015191906138a2565b60405180910390f35b61016d6101683660046134fa565b610372565b604051610151939291906138b5565b61016d61018a3660046134fa565b6103a3565b6101a261019d366004613525565b6103ea565b005b6101a26101b23660046134c2565b61040b565b61016d6101c53660046134fa565b6104eb565b6101dd6101d83660046134c2565b6104fd565b60405161015191906138ec565b61016d6101f83660046134fa565b610531565b6101a261020b366004613525565b610554565b6101a261021e3660046134fa565b61056c565b6101a2610231366004613566565b610638565b6101a2610244366004613566565b6107aa565b6101a2610930565b61026461025f366004613654565b6109b3565b60405161015193929190614231565b6101a261028136600461368a565b610b89565b6101a26102943660046134fa565b610d0c565b6102ac6102a73660046134a6565b610dd7565b604051610151959493929190614247565b6101a26102cb3660046134a6565b610e13565b6101a26102de3660046134a6565b610ecb565b6102eb610f81565b60405161015191906137e1565b6001600160a01b03811660009081526002602090815260409182902060050180548351818402810184019094528084526060939283018282801561036557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610347575b505050505090505b919050565b60608060606000610385868660016109b3565b5050905061039586826001610f90565b935093509350509250925092565b60608080600160006103b68787846109b3565b505090506060806103c889848661110d565b915091506103d98984868585611490565b965096509650505050509250925092565b60405162461bcd60e51b815260040161040290613f0e565b60405180910390fd5b816104158161166c565b6001600160a01b03821661043b5760405162461bcd60e51b815260040161040290613e90565b6001600160a01b038084166000908152600260205260409020600301548382169116141561047b5760405162461bcd60e51b815260040161040290613e59565b6001600160a01b038381166000818152600260205260409081902060030180546001600160a01b0319169386169390931790925590517faaebcf1bfa00580e41d966056b48521fa9f202645c86d4ddf28113e617c1b1d3906104de9085906137e1565b60405180910390a2505050565b606080806000806103b68787836109b3565b6001600160a01b038083166000908152600260209081526040808320938516835260069093019052205460ff165b92915050565b60608060606000610544868660006109b3565b5050905061039586826000610f90565b60405162461bcd60e51b81526004016104029061418a565b816105768161166c565b6001600160a01b0383166000908152600260205260409020548211156105ae5760405162461bcd60e51b81526004016104029061398e565b6001600160a01b038316600090815260026020819052604090912001548214156105ea5760405162461bcd60e51b815260040161040290613a3a565b6001600160a01b03831660008181526002602081905260409182902001849055517f676eda176d6aa20e9aa09b9ee131487c90646cd2b951176f75bd6fccdc026177906104de908590614228565b6002600154141561065b5760405162461bcd60e51b815260040161040290614153565b60026001558461066a81611692565b6106758585856116ba565b60008080806106858a8a836109b3565b9250925092506106958a8461172e565b604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac906106c39033908d906004016137f5565b600060405180830381600087803b1580156106dd57600080fd5b505af11580156106f1573d6000803e3d6000fd5b5050505060608060606107058d8789610f90565b9250925092506107188b8b85858b61182f565b6107258d8789868561192e565b6107338d878b8a87876119cc565b61073e8d8686611a73565b886001600160a01b0316336001600160a01b03168e6001600160a01b03167f54f4ed50e49638053e1655b45ee7ece434edd150e6771ac0aaedb8355be13a338f898960405161078f93929190614231565b60405180910390a45050600180555050505050505050505050565b600260015414156107cd5760405162461bcd60e51b815260040161040290614153565b6002600155846107dc81611692565b6107e78585856116ba565b60006107f587873386611bde565b90506001600080806108088b8b866109b3565b9250925092506108188b84611c7f565b60608060606108288e8789610f90565b92509250925061083b8c8c85858b61182f565b6108498e878c8a87876119cc565b6108568e8789868561192e565b6108618e8686611a73565b50506040516340c10f1960e01b81526001600160a01b038d1691506340c10f1990610892908a908e906004016137f5565b600060405180830381600087803b1580156108ac57600080fd5b505af11580156108c0573d6000803e3d6000fd5b50505050866001600160a01b0316336001600160a01b03168c6001600160a01b03167f1abc43bc3dd8b6c8bb9bcf1a14a84f83981bf5335700ef07758efefcb03a8c75888e8787604051610917949392919061387c565b60405180910390a4505060018055505050505050505050565b33600090815260026020526040902060050154156109605760405162461bcd60e51b815260040161040290614110565b3360009081526002602081905260408220828155600181018390559081018290556003810180546001600160a01b03199081169091556004820180549091169055906109af6005830182613109565b5050565b60008060006109c0613127565b6001600160a01b03808816600090815260026020818152604092839020835160c0810185528154815260018201548184015292810154838501526003810154851660608401526004810154909416608083015260058401805484518184028101840190955280855292949360a08601939092830182828015610a6b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a4d575b5050509190925250506000805460405163792aa04f60e01b815293945090926001600160a01b03909116915063792aa04f90610aad90309085906004016137f5565b60206040518083038186803b158015610ac557600080fd5b505afa158015610ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afd919061370f565b9050600086610b10578260400151610b16565b82602001515b90506000610b2a828a63ffffffff611d8016565b9050610b3c818463ffffffff611d8016565b9450610b4e818663ffffffff611db116565b955087610b6a57610b65898263ffffffff611db116565b610b7a565b610b7a898263ffffffff611df316565b96505050505093509350939050565b8533610b958282611e18565b87610b9f81611e3e565b87871115610bbf5760405162461bcd60e51b815260040161040290613de0565b87861115610bdf5760405162461bcd60e51b8152600401610402906141c1565b6040805160c08101825289815260208082018a90528183018990526001600160a01b0388811660608401528716608083015282516000808252918101909352909160a08301915090526001600160a01b03808b1660009081526002602081815260409283902085518155858201516001820155928501519183019190915560608401516003830180549185166001600160a01b031992831617905560808501516004840180549190951691161790925560a083015180519192610caa9260058501929091019061316f565b50905050886001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ce957600080fd5b505af1158015610cfd573d6000803e3d6000fd5b50505050505050505050505050565b81610d168161166c565b6001600160a01b038316600090815260026020526040902054821115610d4e5760405162461bcd60e51b815260040161040290613b50565b6001600160a01b038316600090815260026020526040902060010154821415610d895760405162461bcd60e51b815260040161040290613d6a565b6001600160a01b03831660008181526002602052604090819020600101849055517fd1de57b1db6a29967f337d6f744b7811624dabf2be924c65708336a81678d077906104de908590614228565b60026020819052600091825260409091208054600182015492820154600383015460049093015491939290916001600160a01b03918216911685565b80610e1d81611eff565b81610e2781611692565b6001600160a01b038316600090815260026020908152604080832033845260060190915290205460ff1615610e6e5760405162461bcd60e51b815260040161040290613f45565b50506001600160a01b03166000908152600260209081526040808320600581018054600181810183559186528486200180546001600160a01b0319163390811790915585526006909101909252909120805460ff19169091179055565b80610ed581611eff565b81610edf81611692565b6001600160a01b038316600090815260026020908152604080832033845260060190915290205460ff16610f255760405162461bcd60e51b815260040161040290613ab2565b6001600160a01b0383166000908152600260205260409020610f50906005013363ffffffff61204116565b50506001600160a01b031660009081526002602090815260408083203384526006019091529020805460ff19169055565b6000546001600160a01b031681565b606080606080606080610fa28961216d565b825192955090935091506060816001600160401b0381118015610fc457600080fd5b50604051908082528060200260200182016040528015610fee578160200160208202803683370190505b5090506060826001600160401b038111801561100957600080fd5b50604051908082528060200260200182016040528015611033578160200160208202803683370190505b50905060005b86518110156110f9578a6110725761106d8c87838151811061105757fe5b6020026020010151611d8090919063ffffffff16565b611098565b6110988c87838151811061108257fe5b60200260200101516124f790919063ffffffff16565b8382815181106110a457fe5b6020026020010181815250508a6110ca576110c58c86838151811061108257fe5b6110da565b6110da8c86838151811061105757fe5b8282815181106110e657fe5b6020908102919091010152600101611039565b50949b909a50939850929650505050505050565b6060806000856001600160a01b03166399d50d5d6040518163ffffffff1660e01b815260040160006040518083038186803b15801561114b57600080fd5b505afa15801561115f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111879190810190613304565b5190506060816001600160401b03811180156111a257600080fd5b506040519080825280602002602001820160405280156111cc578160200160208202803683370190505b5090506060826001600160401b03811180156111e757600080fd5b50604051908082528060200260200182016040528015611211578160200160208202803683370190505b506001600160a01b0389166000908152600260209081526040918290206005018054835181840281018401909452808452939450606093909183018282801561128357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611265575b50939450600093505050505b8151811015611481576060808961133c578383815181106112ac57fe5b60200260200101516001600160a01b031663d23cd5648d8d6040518363ffffffff1660e01b81526004016112e19291906137f5565b600060405180830381600087803b1580156112fb57600080fd5b505af115801561130f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611337919081019061339f565b6113d3565b83838151811061134857fe5b60200260200101516001600160a01b031663fc62d9fe8d8d6040518363ffffffff1660e01b815260040161137d9291906137f5565b600060405180830381600087803b15801561139757600080fd5b505af11580156113ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113d3919081019061339f565b909250905060005b878110156114765761141c8382815181106113f257fe5b602002602001015188838151811061140657fe5b602002602001015161254e90919063ffffffff16565b87828151811061142857fe5b60200260200101818152505061145782828151811061144357fe5b602002602001015187838151811061140657fe5b86828151811061146357fe5b60209081029190910101526001016113db565b50505060010161128f565b50919890975095505050505050565b6060806060806060806114a28b61216d565b925092509250606083516001600160401b03811180156114c157600080fd5b506040519080825280602002602001820160405280156114eb578160200160208202803683370190505b509050606084516001600160401b038111801561150757600080fd5b50604051908082528060200260200182016040528015611531578160200160208202803683370190505b50905060005b85518110156116575760006115896115848d848151811061155457fe5b602002602001015161157889868151811061156b57fe5b6020026020010151612594565b9063ffffffff61254e16565b6125bd565b90508c6115a5576115a0818f63ffffffff611d8016565b6115b5565b6115b5818f63ffffffff6124f716565b8483815181106115c157fe5b60200260200101818152505060006116046115848d85815181106115e157fe5b60200260200101516115f889878151811061156b57fe5b9063ffffffff6125df16565b90508d6116235761161e8f826124f790919063ffffffff16565b611636565b6116368f82611d8090919063ffffffff16565b84848151811061164257fe5b60209081029190910101525050600101611537565b50939c909b5092995091975050505050505050565b6116768133612625565b6116925760405162461bcd60e51b81526004016104029061404b565b61169b816126b3565b6116b75760405162461bcd60e51b815260040161040290613a6a565b50565b600083116116da5760405162461bcd60e51b815260040161040290613b87565b8151815181146116fc5760405162461bcd60e51b8152600401610402906139c5565b80156117285761170b836127b7565b156117285760405162461bcd60e51b815260040161040290613bff565b50505050565b6001600160a01b03821660009081526002602090815260409182902060050180548351818402810184019094528084526060939283018282801561179b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161177d575b50939450600093505050505b8151811015611728578181815181106117bc57fe5b60200260200101516001600160a01b0316633fe6106b85856040518363ffffffff1660e01b81526004016117f19291906137f5565b600060405180830381600087803b15801561180b57600080fd5b505af115801561181f573d6000803e3d6000fd5b5050600190920191506117a79050565b60005b85518110156119265760008061186488848151811061184d57fe5b60200260200101518761286690919063ffffffff16565b91509150806118855760405162461bcd60e51b815260040161040290613c36565b83156118d65784828151811061189757fe5b60200260200101518784815181106118ab57fe5b602002602001015110156118d15760405162461bcd60e51b815260040161040290613c78565b61191c565b8482815181106118e257fe5b60200260200101518784815181106118f657fe5b6020026020010151111561191c5760405162461bcd60e51b8152600401610402906139f4565b5050600101611832565b505050505050565b60005b825181101561192657600083828151811061194857fe5b60200260200101519050600083838151811061196057fe5b6020026020010151905060008111156119c25785156119a857611988888884600160006128cc565b6119a36001600160a01b03891683338463ffffffff612a8616565b6119c2565b6119b482338a84612bc8565b6119c28888846000806128cc565b5050600101611931565b60005b8251811015611a6a5760008382815181106119e657fe5b6020026020010151905060008383815181106119fe57fe5b602002602001015190506000811115611a60578515611a3657611a2382338b84612bc8565b611a318989846001806128cc565b611a60565b611a45898984600060016128cc565b611a606001600160a01b038a1683898463ffffffff612a8616565b50506001016119cf565b50505050505050565b8115611bd9576001600160a01b03808416600081815260026020526040908190206003015490516340c10f1960e01b815291926340c10f1992611abe929091169086906004016137f5565b600060405180830381600087803b158015611ad857600080fd5b505af1158015611aec573d6000803e3d6000fd5b505050506000811115611bd957826001600160a01b03166340c10f196000809054906101000a90046001600160a01b03166001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015611b5557600080fd5b505afa158015611b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8d91906132e8565b836040518363ffffffff1660e01b8152600401611bab9291906137f5565b600060405180830381600087803b158015611bc557600080fd5b505af1158015611a6a573d6000803e3d6000fd5b505050565b6001600160a01b038085166000908152600260205260408120600401549091168015611c715760405163a045808360e01b81526001600160a01b0382169063a045808390611c369089908990899089906004016138f7565b600060405180830381600087803b158015611c5057600080fd5b505af1158015611c64573d6000803e3d6000fd5b5050505080915050611c77565b60009150505b949350505050565b6001600160a01b038216600090815260026020908152604091829020600501805483518184028101840190945280845260609392830182828015611cec57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611cce575b50939450600093505050505b815181101561172857818181518110611d0d57fe5b60200260200101516001600160a01b031663c153dd0785856040518363ffffffff1660e01b8152600401611d429291906137f5565b600060405180830381600087803b158015611d5c57600080fd5b505af1158015611d70573d6000803e3d6000fd5b505060019092019150611cf89050565b6000611daa670de0b6b3a7640000611d9e858563ffffffff612bd416565b9063ffffffff612c0e16565b9392505050565b6000611daa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c50565b600082820183811015611daa5760405162461bcd60e51b815260040161040290613ae2565b611e228282612625565b6109af5760405162461bcd60e51b81526004016104029061404b565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec90611e6e9084906004016137e1565b60206040518083038186803b158015611e8657600080fd5b505afa158015611e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe91906133ff565b611eda5760405162461bcd60e51b815260040161040290614008565b611ee381612c7c565b6116b75760405162461bcd60e51b815260040161040290613b19565b6002604051631ade272960e11b81526001600160a01b038316906335bc4e5290611f2d9033906004016137e1565b60206040518083038186803b158015611f4557600080fd5b505afa158015611f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7d91906136f0565b6002811115611f8857fe5b14611fa55760405162461bcd60e51b815260040161040290613cf2565b6000546040516342f6e38960e01b81526001600160a01b03909116906342f6e38990611fd59033906004016137e1565b60206040518083038186803b158015611fed57600080fd5b505afa158015612001573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202591906133ff565b6116b75760405162461bcd60e51b815260040161040290613fc4565b6000806120a78480548060200260200160405190810160405280929190818152602001828054801561209c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161207e575b505050505084612866565b91509150806120c85760405162461bcd60e51b81526004016104029061395f565b83546000190182811461213a578481815481106120e157fe5b9060005260206000200160009054906101000a90046001600160a01b031685848154811061210b57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8480548061214457fe5b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b606080606080846001600160a01b03166399d50d5d6040518163ffffffff1660e01b815260040160006040518083038186803b1580156121ac57600080fd5b505afa1580156121c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121e89190810190613304565b80519091506060816001600160401b038111801561220557600080fd5b5060405190808252806020026020018201604052801561222f578160200160208202803683370190505b5090506060826001600160401b038111801561224a57600080fd5b50604051908082528060200260200182016040528015612274578160200160208202803683370190505b50905060005b84518110156124e757600085828151811061229157fe5b6020026020010151905060008a6001600160a01b03166366cb8d2f836040518263ffffffff1660e01b81526004016122c991906137e1565b60206040518083038186803b1580156122e157600080fd5b505afa1580156122f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612319919061370f565b60405163a7bdad0360e01b81529091506000906060906001600160a01b038e169063a7bdad039061234e9087906004016137e1565b60006040518083038186803b15801561236657600080fd5b505afa15801561237a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123a29190810190613304565b80519091501561248b5760005b81518110156124895760008e6001600160a01b03166322ebeba4878585815181106123d657fe5b60200260200101516040518363ffffffff1660e01b81526004016123fb92919061380e565b60206040518083038186803b15801561241357600080fd5b505afa158015612427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244b919061370f565b9050600081131561246d57612466858263ffffffff61254e16565b9450612480565b61247d848263ffffffff61254e16565b93505b506001016123af565b505b612494836125bd565b8786815181106124a057fe5b60209081029190910101526124c06115848360001963ffffffff612cab16565b8686815181106124cc57fe5b602090810291909101015250506001909201915061227a9050565b5092979096509194509092505050565b6000821580612504575081155b156125115750600061052b565b611daa6001612542670de0b6b3a7640000611d9e83612536898963ffffffff612bd416565b9063ffffffff611db116565b9063ffffffff611df316565b60008282018183128015906125635750838112155b80612578575060008312801561257857508381125b611daa5760405162461bcd60e51b815260040161040290613bbe565b6000600160ff1b82106125b95760405162461bcd60e51b815260040161040290613f7c565b5090565b6000808212156125b95760405162461bcd60e51b815260040161040290613cbd565b60008183038183128015906125f45750838113155b80612609575060008312801561260957508381135b611daa5760405162461bcd60e51b815260040161040290614082565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b15801561266a57600080fd5b505afa15801561267e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a291906132e8565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906126e49085906004016137e1565b60206040518083038186803b1580156126fc57600080fd5b505afa158015612710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273491906133ff565b801561052b57506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c906127679030906004016137e1565b60206040518083038186803b15801561277f57600080fd5b505afa158015612793573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b91906133ff565b6000808251116127d95760405162461bcd60e51b815260040161040290614204565b60005b600183510381101561285d5760008382815181106127f657fe5b6020026020010151905060008260010190505b84518110156128535784818151811061281e57fe5b60200260200101516001600160a01b0316826001600160a01b0316141561284b576001935050505061036d565b600101612809565b50506001016127dc565b50600092915050565b81516000908190815b818110156128b957846001600160a01b031686828151811061288d57fe5b60200260200101516001600160a01b031614156128b1579250600191506128c59050565b60010161286f565b50600019600092509250505b9250929050565b60405163a7bdad0360e01b81526060906001600160a01b0387169063a7bdad03906128fb9087906004016137e1565b60006040518083038186803b15801561291357600080fd5b505afa158015612927573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261294f9190810190613304565b805190915083156129ee5760005b818110156129e85782818151811061297157fe5b60200260200101516001600160a01b0316630fb96b21898989886040518563ffffffff1660e01b81526004016129aa9493929190613922565b600060405180830381600087803b1580156129c457600080fd5b505af11580156129d8573d6000803e3d6000fd5b50506001909201915061295d9050565b50611a6a565b60005b81811015612a7c57828181518110612a0557fe5b60200260200101516001600160a01b031663c137f4d7898989886040518563ffffffff1660e01b8152600401612a3e9493929190613922565b600060405180830381600087803b158015612a5857600080fd5b505af1158015612a6c573d6000803e3d6000fd5b5050600190920191506129f19050565b5050505050505050565b8015611728576040516370a0823160e01b81526000906001600160a01b038516906370a0823190612abb9088906004016137e1565b60206040518083038186803b158015612ad357600080fd5b505afa158015612ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0b919061370f565b9050612b1985858585612d16565b6040516370a0823160e01b81526000906001600160a01b038616906370a0823190612b489089906004016137e1565b60206040518083038186803b158015612b6057600080fd5b505afa158015612b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b98919061370f565b9050612baa828463ffffffff611db116565b81146119265760405162461bcd60e51b815260040161040290613e22565b61172884848484612de3565b600082612be35750600061052b565b82820282848281612bf057fe5b0414611daa5760405162461bcd60e51b815260040161040290613d29565b6000611daa83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f07565b60008184841115612c745760405162461bcd60e51b8152600401610402919061394c565b505050900390565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f7906127679030906004016137e1565b600082612cba5750600061052b565b82600019148015612cce5750600160ff1b82145b15612ceb5760405162461bcd60e51b815260040161040290613d99565b82820282848281612cf857fe5b0514611daa5760405162461bcd60e51b815260040161040290613d99565b80156117285760608282604051602401612d319291906137f5565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f033290612d8d908790600090869060040161384c565b600060405180830381600087803b158015612da757600080fd5b505af1158015612dbb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611926919081019061341b565b8015611728576040516370a0823160e01b81526000906001600160a01b038616906370a0823190612e189086906004016137e1565b60206040518083038186803b158015612e3057600080fd5b505afa158015612e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e68919061370f565b9050612e7685858585612f3e565b6040516370a0823160e01b81526000906001600160a01b038716906370a0823190612ea59087906004016137e1565b60206040518083038186803b158015612ebd57600080fd5b505afa158015612ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef5919061370f565b9050612baa828463ffffffff611df316565b60008183612f285760405162461bcd60e51b8152600401610402919061394c565b506000838581612f3457fe5b0495945050505050565b611728846323b872dd60e01b858585604051602401612f5f93929190613828565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526060612fe6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166130209092919063ffffffff16565b805190915015611bd9578080602001905181019061300491906133ff565b611bd95760405162461bcd60e51b8152600401610402906140c6565b6060611c77848460008585613034856130ca565b6130505760405162461bcd60e51b815260040161040290613ed7565b60006060866001600160a01b0316858760405161306d91906137c5565b60006040518083038185875af1925050503d80600081146130aa576040519150601f19603f3d011682016040523d82523d6000602084013e6130af565b606091505b50915091506130bf8282866130d0565b979650505050505050565b3b151590565b606083156130df575081611daa565b8251156130ef5782518084602001fd5b8160405162461bcd60e51b8152600401610402919061394c565b50805460008255906000526020600020908101906116b791906131d0565b6040518060c0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001606081525090565b8280548282559060005260206000209081019282156131c4579160200282015b828111156131c457825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061318f565b506125b99291506131ed565b6131ea91905b808211156125b957600081556001016131d6565b90565b6131ea91905b808211156125b95780546001600160a01b03191681556001016131f3565b803561052b816142e7565b600082601f83011261322c578081fd5b815161323f61323a8261429c565b614276565b81815291506020808301908481018184028601820187101561326057600080fd5b60005b8481101561327f57815184529282019290820190600101613263565b505050505092915050565b600082601f83011261329a578081fd5b81356132a861323a8261429c565b8181529150602080830190848101818402860182018710156132c957600080fd5b60005b8481101561327f578135845292820192908201906001016132cc565b6000602082840312156132f9578081fd5b8151611daa816142e7565b60006020808385031215613316578182fd5b82516001600160401b0381111561332b578283fd5b80840185601f82011261333c578384fd5b8051915061334c61323a8361429c565b8281528381019082850185850284018601891015613368578687fd5b8693505b8484101561339357805161337f816142e7565b83526001939093019291850191850161336c565b50979650505050505050565b600080604083850312156133b1578081fd5b82516001600160401b03808211156133c7578283fd5b6133d38683870161321c565b935060208501519150808211156133e8578283fd5b506133f58582860161321c565b9150509250929050565b600060208284031215613410578081fd5b8151611daa816142fc565b60006020828403121561342c578081fd5b81516001600160401b0380821115613442578283fd5b81840185601f820112613453578384fd5b8051925081831115613463578384fd5b613476601f8401601f1916602001614276565b915082825285602084830101111561348c578384fd5b61349d8360208401602084016142bb565b50949350505050565b6000602082840312156134b7578081fd5b8135611daa816142e7565b600080604083850312156134d4578182fd5b82356134df816142e7565b915060208301356134ef816142e7565b809150509250929050565b6000806040838503121561350c578182fd5b8235613517816142e7565b946020939093013593505050565b600080600060608486031215613539578081fd5b8335613544816142e7565b925060208401359150604084013561355b816142e7565b809150509250925092565b600080600080600060a0868803121561357d578283fd5b8535613588816142e7565b9450602086810135945060408701356001600160401b03808211156135ab578586fd5b8189018a601f8201126135bc578687fd5b803592506135cc61323a8461429c565b83815284810190828601868602840187018e10156135e857898afd5b8993505b85841015613612576135fe8e82613211565b8352600193909301929186019186016135ec565b5097505050606089013592508083111561362a578384fd5b50506136388882890161328a565b9250506136488760808801613211565b90509295509295909350565b600080600060608486031215613668578081fd5b8335613673816142e7565b925060208401359150604084013561355b816142fc565b60008060008060008060c087890312156136a2578384fd5b86356136ad816142e7565b955060208701359450604087013593506060870135925060808701356136d2816142e7565b915060a08701356136e2816142e7565b809150509295509295509295565b600060208284031215613701578081fd5b815160038110611daa578182fd5b600060208284031215613720578081fd5b5051919050565b6000815180845260208085019450808401835b8381101561375f5781516001600160a01b03168752958201959082019060010161373a565b509495945050505050565b6000815180845260208085019450808401835b8381101561375f5781518752958201959082019060010161377d565b600081518084526137b18160208601602086016142bb565b601f01601f19169290920160200192915050565b600082516137d78184602087016142bb565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060018060a01b0385168252836020830152606060408301526138736060830184613799565b95945050505050565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b600060208252611daa6020830184613727565b6000606082526138c86060830186613727565b82810360208401526138da818661376a565b83810360408501526130bf818661376a565b901515815260200190565b6001600160a01b03948516815260208101939093529083166040830152909116606082015260800190565b6001600160a01b039485168152602081019390935292166040820152901515606082015260800190565b600060208252611daa6020830184613799565b60208082526015908201527420b2323932b9b9903737ba1034b71030b93930bc9760591b604082015260600190565b6020808252601f908201527f52656465656d206665652063616e277420657863656564206d6178696d756d00604082015260600190565b602080825260159082015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b604082015260600190565b60208082526026908201527f546f6f2066657720746f6b656e732072657475726e656420666f72207265646560408201526536b83a34b7b760d11b606082015260800190565b60208082526016908201527514d85b59481c995919595b48199959481c185cdcd95960521b604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b60208082526016908201527526b7b23ab632903737ba103932b3b4b9ba32b932b21760511b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b6020808252601e908201527f4973737565206665652063616e277420657863656564206d6178696d756d0000604082015260600190565b6020808252601d908201527f536574546f6b656e207175616e74697479206d757374206265203e2030000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601a908201527f43616e6e6f74206475706c696361746520616464726573736573000000000000604082015260600190565b60208082526022908201527f4c696d69742070617373656420666f7220696e76616c696420636f6d706f6e656040820152611b9d60f21b606082015260800190565b60208082526025908201527f546f6f206d616e7920746f6b656e7320726571756972656420666f722069737360408201526475616e636560d81b606082015260800190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526018908201527f4f6e6c7920746865206d6f64756c652063616e2063616c6c0000000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526015908201527414d85b59481a5cdcdd5948199959481c185cdcd959605a1b604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526022908201527f4973737565206665652063616e277420657863656564206d6178696d756d2066604082015261656560f01b606082015260800190565b6020808252601d908201527f496e76616c696420706f7374207472616e736665722062616c616e6365000000604082015260600190565b60208082526019908201527f53616d652066656520726563697069656e742070617373656400000000000000604082015260600190565b60208082526027908201527f46656520526563697069656e74206d757374206265206e6f6e2d7a65726f206160408201526632323932b9b99760c91b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252601f908201527f43616c6c2072656465656d57697468536c69707061676520696e737465616400604082015260600190565b6020808252601a908201527f4d6f64756c6520616c726561647920726567697374657265642e000000000000604082015260600190565b60208082526028908201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604082015267371034b73a191a9b60c11b606082015260800190565b60208082526024908201527f4d6f64756c65206d75737420626520656e61626c6564206f6e20636f6e74726f604082015263363632b960e11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526023908201527f52656769737465726564206d6f64756c6573206d7573742062652072656d6f7660408201526232b21760e91b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601e908201527f43616c6c20697373756557697468536c69707061676520696e73746561640000604082015260600190565b60208082526023908201527f52656465656d206665652063616e277420657863656564206d6178696d756d2060408201526266656560e81b606082015260800190565b6020808252600a90820152694120697320656d70747960b01b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526001600160a01b03908116606084015216608082015260a00190565b6040518181016001600160401b038111828210171561429457600080fd5b604052919050565b60006001600160401b038211156142b1578081fd5b5060209081020190565b60005b838110156142d65781810151838201526020016142be565b838111156117285750506000910152565b6001600160a01b03811681146116b757600080fd5b80151581146116b757600080fdfea264697066735822122025f7e5d4c5ae9cae73f11bdcb1e8608700702b5830161be46b6da833cc39448964736f6c634300060a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063750ab7a8116100ad578063cb38b22311610071578063cb38b22314610286578063cd3c753914610299578063d9b1b6e0146102bd578063e0799620146102d0578063f77c4791146102e35761012c565b8063750ab7a8146102235780637cbe104014610236578063847ef08d146102495780638dda403714610251578063bf9fe138146102735761012c565b8063607ad89f116100f4578063607ad89f146101b757806363082446146101ca5780636b8e53b6146101ea5780636d78f47a146101fd5780636dd86aa9146102105761012c565b806308bc0e1114610131578063131e26b91461015a57806357aa792e1461017c5780635c833bfd1461018f5780635d98c373146101a4575b600080fd5b61014461013f3660046134a6565b6102f8565b60405161015191906138a2565b60405180910390f35b61016d6101683660046134fa565b610372565b604051610151939291906138b5565b61016d61018a3660046134fa565b6103a3565b6101a261019d366004613525565b6103ea565b005b6101a26101b23660046134c2565b61040b565b61016d6101c53660046134fa565b6104eb565b6101dd6101d83660046134c2565b6104fd565b60405161015191906138ec565b61016d6101f83660046134fa565b610531565b6101a261020b366004613525565b610554565b6101a261021e3660046134fa565b61056c565b6101a2610231366004613566565b610638565b6101a2610244366004613566565b6107aa565b6101a2610930565b61026461025f366004613654565b6109b3565b60405161015193929190614231565b6101a261028136600461368a565b610b89565b6101a26102943660046134fa565b610d0c565b6102ac6102a73660046134a6565b610dd7565b604051610151959493929190614247565b6101a26102cb3660046134a6565b610e13565b6101a26102de3660046134a6565b610ecb565b6102eb610f81565b60405161015191906137e1565b6001600160a01b03811660009081526002602090815260409182902060050180548351818402810184019094528084526060939283018282801561036557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610347575b505050505090505b919050565b60608060606000610385868660016109b3565b5050905061039586826001610f90565b935093509350509250925092565b60608080600160006103b68787846109b3565b505090506060806103c889848661110d565b915091506103d98984868585611490565b965096509650505050509250925092565b60405162461bcd60e51b815260040161040290613f0e565b60405180910390fd5b816104158161166c565b6001600160a01b03821661043b5760405162461bcd60e51b815260040161040290613e90565b6001600160a01b038084166000908152600260205260409020600301548382169116141561047b5760405162461bcd60e51b815260040161040290613e59565b6001600160a01b038381166000818152600260205260409081902060030180546001600160a01b0319169386169390931790925590517faaebcf1bfa00580e41d966056b48521fa9f202645c86d4ddf28113e617c1b1d3906104de9085906137e1565b60405180910390a2505050565b606080806000806103b68787836109b3565b6001600160a01b038083166000908152600260209081526040808320938516835260069093019052205460ff165b92915050565b60608060606000610544868660006109b3565b5050905061039586826000610f90565b60405162461bcd60e51b81526004016104029061418a565b816105768161166c565b6001600160a01b0383166000908152600260205260409020548211156105ae5760405162461bcd60e51b81526004016104029061398e565b6001600160a01b038316600090815260026020819052604090912001548214156105ea5760405162461bcd60e51b815260040161040290613a3a565b6001600160a01b03831660008181526002602081905260409182902001849055517f676eda176d6aa20e9aa09b9ee131487c90646cd2b951176f75bd6fccdc026177906104de908590614228565b6002600154141561065b5760405162461bcd60e51b815260040161040290614153565b60026001558461066a81611692565b6106758585856116ba565b60008080806106858a8a836109b3565b9250925092506106958a8461172e565b604051632770a7eb60e21b81526001600160a01b038b1690639dc29fac906106c39033908d906004016137f5565b600060405180830381600087803b1580156106dd57600080fd5b505af11580156106f1573d6000803e3d6000fd5b5050505060608060606107058d8789610f90565b9250925092506107188b8b85858b61182f565b6107258d8789868561192e565b6107338d878b8a87876119cc565b61073e8d8686611a73565b886001600160a01b0316336001600160a01b03168e6001600160a01b03167f54f4ed50e49638053e1655b45ee7ece434edd150e6771ac0aaedb8355be13a338f898960405161078f93929190614231565b60405180910390a45050600180555050505050505050505050565b600260015414156107cd5760405162461bcd60e51b815260040161040290614153565b6002600155846107dc81611692565b6107e78585856116ba565b60006107f587873386611bde565b90506001600080806108088b8b866109b3565b9250925092506108188b84611c7f565b60608060606108288e8789610f90565b92509250925061083b8c8c85858b61182f565b6108498e878c8a87876119cc565b6108568e8789868561192e565b6108618e8686611a73565b50506040516340c10f1960e01b81526001600160a01b038d1691506340c10f1990610892908a908e906004016137f5565b600060405180830381600087803b1580156108ac57600080fd5b505af11580156108c0573d6000803e3d6000fd5b50505050866001600160a01b0316336001600160a01b03168c6001600160a01b03167f1abc43bc3dd8b6c8bb9bcf1a14a84f83981bf5335700ef07758efefcb03a8c75888e8787604051610917949392919061387c565b60405180910390a4505060018055505050505050505050565b33600090815260026020526040902060050154156109605760405162461bcd60e51b815260040161040290614110565b3360009081526002602081905260408220828155600181018390559081018290556003810180546001600160a01b03199081169091556004820180549091169055906109af6005830182613109565b5050565b60008060006109c0613127565b6001600160a01b03808816600090815260026020818152604092839020835160c0810185528154815260018201548184015292810154838501526003810154851660608401526004810154909416608083015260058401805484518184028101840190955280855292949360a08601939092830182828015610a6b57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610a4d575b5050509190925250506000805460405163792aa04f60e01b815293945090926001600160a01b03909116915063792aa04f90610aad90309085906004016137f5565b60206040518083038186803b158015610ac557600080fd5b505afa158015610ad9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afd919061370f565b9050600086610b10578260400151610b16565b82602001515b90506000610b2a828a63ffffffff611d8016565b9050610b3c818463ffffffff611d8016565b9450610b4e818663ffffffff611db116565b955087610b6a57610b65898263ffffffff611db116565b610b7a565b610b7a898263ffffffff611df316565b96505050505093509350939050565b8533610b958282611e18565b87610b9f81611e3e565b87871115610bbf5760405162461bcd60e51b815260040161040290613de0565b87861115610bdf5760405162461bcd60e51b8152600401610402906141c1565b6040805160c08101825289815260208082018a90528183018990526001600160a01b0388811660608401528716608083015282516000808252918101909352909160a08301915090526001600160a01b03808b1660009081526002602081815260409283902085518155858201516001820155928501519183019190915560608401516003830180549185166001600160a01b031992831617905560808501516004840180549190951691161790925560a083015180519192610caa9260058501929091019061316f565b50905050886001600160a01b0316630ffe0f1e6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ce957600080fd5b505af1158015610cfd573d6000803e3d6000fd5b50505050505050505050505050565b81610d168161166c565b6001600160a01b038316600090815260026020526040902054821115610d4e5760405162461bcd60e51b815260040161040290613b50565b6001600160a01b038316600090815260026020526040902060010154821415610d895760405162461bcd60e51b815260040161040290613d6a565b6001600160a01b03831660008181526002602052604090819020600101849055517fd1de57b1db6a29967f337d6f744b7811624dabf2be924c65708336a81678d077906104de908590614228565b60026020819052600091825260409091208054600182015492820154600383015460049093015491939290916001600160a01b03918216911685565b80610e1d81611eff565b81610e2781611692565b6001600160a01b038316600090815260026020908152604080832033845260060190915290205460ff1615610e6e5760405162461bcd60e51b815260040161040290613f45565b50506001600160a01b03166000908152600260209081526040808320600581018054600181810183559186528486200180546001600160a01b0319163390811790915585526006909101909252909120805460ff19169091179055565b80610ed581611eff565b81610edf81611692565b6001600160a01b038316600090815260026020908152604080832033845260060190915290205460ff16610f255760405162461bcd60e51b815260040161040290613ab2565b6001600160a01b0383166000908152600260205260409020610f50906005013363ffffffff61204116565b50506001600160a01b031660009081526002602090815260408083203384526006019091529020805460ff19169055565b6000546001600160a01b031681565b606080606080606080610fa28961216d565b825192955090935091506060816001600160401b0381118015610fc457600080fd5b50604051908082528060200260200182016040528015610fee578160200160208202803683370190505b5090506060826001600160401b038111801561100957600080fd5b50604051908082528060200260200182016040528015611033578160200160208202803683370190505b50905060005b86518110156110f9578a6110725761106d8c87838151811061105757fe5b6020026020010151611d8090919063ffffffff16565b611098565b6110988c87838151811061108257fe5b60200260200101516124f790919063ffffffff16565b8382815181106110a457fe5b6020026020010181815250508a6110ca576110c58c86838151811061108257fe5b6110da565b6110da8c86838151811061105757fe5b8282815181106110e657fe5b6020908102919091010152600101611039565b50949b909a50939850929650505050505050565b6060806000856001600160a01b03166399d50d5d6040518163ffffffff1660e01b815260040160006040518083038186803b15801561114b57600080fd5b505afa15801561115f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111879190810190613304565b5190506060816001600160401b03811180156111a257600080fd5b506040519080825280602002602001820160405280156111cc578160200160208202803683370190505b5090506060826001600160401b03811180156111e757600080fd5b50604051908082528060200260200182016040528015611211578160200160208202803683370190505b506001600160a01b0389166000908152600260209081526040918290206005018054835181840281018401909452808452939450606093909183018282801561128357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611265575b50939450600093505050505b8151811015611481576060808961133c578383815181106112ac57fe5b60200260200101516001600160a01b031663d23cd5648d8d6040518363ffffffff1660e01b81526004016112e19291906137f5565b600060405180830381600087803b1580156112fb57600080fd5b505af115801561130f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611337919081019061339f565b6113d3565b83838151811061134857fe5b60200260200101516001600160a01b031663fc62d9fe8d8d6040518363ffffffff1660e01b815260040161137d9291906137f5565b600060405180830381600087803b15801561139757600080fd5b505af11580156113ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113d3919081019061339f565b909250905060005b878110156114765761141c8382815181106113f257fe5b602002602001015188838151811061140657fe5b602002602001015161254e90919063ffffffff16565b87828151811061142857fe5b60200260200101818152505061145782828151811061144357fe5b602002602001015187838151811061140657fe5b86828151811061146357fe5b60209081029190910101526001016113db565b50505060010161128f565b50919890975095505050505050565b6060806060806060806114a28b61216d565b925092509250606083516001600160401b03811180156114c157600080fd5b506040519080825280602002602001820160405280156114eb578160200160208202803683370190505b509050606084516001600160401b038111801561150757600080fd5b50604051908082528060200260200182016040528015611531578160200160208202803683370190505b50905060005b85518110156116575760006115896115848d848151811061155457fe5b602002602001015161157889868151811061156b57fe5b6020026020010151612594565b9063ffffffff61254e16565b6125bd565b90508c6115a5576115a0818f63ffffffff611d8016565b6115b5565b6115b5818f63ffffffff6124f716565b8483815181106115c157fe5b60200260200101818152505060006116046115848d85815181106115e157fe5b60200260200101516115f889878151811061156b57fe5b9063ffffffff6125df16565b90508d6116235761161e8f826124f790919063ffffffff16565b611636565b6116368f82611d8090919063ffffffff16565b84848151811061164257fe5b60209081029190910101525050600101611537565b50939c909b5092995091975050505050505050565b6116768133612625565b6116925760405162461bcd60e51b81526004016104029061404b565b61169b816126b3565b6116b75760405162461bcd60e51b815260040161040290613a6a565b50565b600083116116da5760405162461bcd60e51b815260040161040290613b87565b8151815181146116fc5760405162461bcd60e51b8152600401610402906139c5565b80156117285761170b836127b7565b156117285760405162461bcd60e51b815260040161040290613bff565b50505050565b6001600160a01b03821660009081526002602090815260409182902060050180548351818402810184019094528084526060939283018282801561179b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161177d575b50939450600093505050505b8151811015611728578181815181106117bc57fe5b60200260200101516001600160a01b0316633fe6106b85856040518363ffffffff1660e01b81526004016117f19291906137f5565b600060405180830381600087803b15801561180b57600080fd5b505af115801561181f573d6000803e3d6000fd5b5050600190920191506117a79050565b60005b85518110156119265760008061186488848151811061184d57fe5b60200260200101518761286690919063ffffffff16565b91509150806118855760405162461bcd60e51b815260040161040290613c36565b83156118d65784828151811061189757fe5b60200260200101518784815181106118ab57fe5b602002602001015110156118d15760405162461bcd60e51b815260040161040290613c78565b61191c565b8482815181106118e257fe5b60200260200101518784815181106118f657fe5b6020026020010151111561191c5760405162461bcd60e51b8152600401610402906139f4565b5050600101611832565b505050505050565b60005b825181101561192657600083828151811061194857fe5b60200260200101519050600083838151811061196057fe5b6020026020010151905060008111156119c25785156119a857611988888884600160006128cc565b6119a36001600160a01b03891683338463ffffffff612a8616565b6119c2565b6119b482338a84612bc8565b6119c28888846000806128cc565b5050600101611931565b60005b8251811015611a6a5760008382815181106119e657fe5b6020026020010151905060008383815181106119fe57fe5b602002602001015190506000811115611a60578515611a3657611a2382338b84612bc8565b611a318989846001806128cc565b611a60565b611a45898984600060016128cc565b611a606001600160a01b038a1683898463ffffffff612a8616565b50506001016119cf565b50505050505050565b8115611bd9576001600160a01b03808416600081815260026020526040908190206003015490516340c10f1960e01b815291926340c10f1992611abe929091169086906004016137f5565b600060405180830381600087803b158015611ad857600080fd5b505af1158015611aec573d6000803e3d6000fd5b505050506000811115611bd957826001600160a01b03166340c10f196000809054906101000a90046001600160a01b03166001600160a01b031663469048406040518163ffffffff1660e01b815260040160206040518083038186803b158015611b5557600080fd5b505afa158015611b69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8d91906132e8565b836040518363ffffffff1660e01b8152600401611bab9291906137f5565b600060405180830381600087803b158015611bc557600080fd5b505af1158015611a6a573d6000803e3d6000fd5b505050565b6001600160a01b038085166000908152600260205260408120600401549091168015611c715760405163a045808360e01b81526001600160a01b0382169063a045808390611c369089908990899089906004016138f7565b600060405180830381600087803b158015611c5057600080fd5b505af1158015611c64573d6000803e3d6000fd5b5050505080915050611c77565b60009150505b949350505050565b6001600160a01b038216600090815260026020908152604091829020600501805483518184028101840190945280845260609392830182828015611cec57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611cce575b50939450600093505050505b815181101561172857818181518110611d0d57fe5b60200260200101516001600160a01b031663c153dd0785856040518363ffffffff1660e01b8152600401611d429291906137f5565b600060405180830381600087803b158015611d5c57600080fd5b505af1158015611d70573d6000803e3d6000fd5b505060019092019150611cf89050565b6000611daa670de0b6b3a7640000611d9e858563ffffffff612bd416565b9063ffffffff612c0e16565b9392505050565b6000611daa83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612c50565b600082820183811015611daa5760405162461bcd60e51b815260040161040290613ae2565b611e228282612625565b6109af5760405162461bcd60e51b81526004016104029061404b565b600054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec90611e6e9084906004016137e1565b60206040518083038186803b158015611e8657600080fd5b505afa158015611e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe91906133ff565b611eda5760405162461bcd60e51b815260040161040290614008565b611ee381612c7c565b6116b75760405162461bcd60e51b815260040161040290613b19565b6002604051631ade272960e11b81526001600160a01b038316906335bc4e5290611f2d9033906004016137e1565b60206040518083038186803b158015611f4557600080fd5b505afa158015611f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7d91906136f0565b6002811115611f8857fe5b14611fa55760405162461bcd60e51b815260040161040290613cf2565b6000546040516342f6e38960e01b81526001600160a01b03909116906342f6e38990611fd59033906004016137e1565b60206040518083038186803b158015611fed57600080fd5b505afa158015612001573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202591906133ff565b6116b75760405162461bcd60e51b815260040161040290613fc4565b6000806120a78480548060200260200160405190810160405280929190818152602001828054801561209c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161207e575b505050505084612866565b91509150806120c85760405162461bcd60e51b81526004016104029061395f565b83546000190182811461213a578481815481106120e157fe5b9060005260206000200160009054906101000a90046001600160a01b031685848154811061210b57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8480548061214457fe5b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b606080606080846001600160a01b03166399d50d5d6040518163ffffffff1660e01b815260040160006040518083038186803b1580156121ac57600080fd5b505afa1580156121c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526121e89190810190613304565b80519091506060816001600160401b038111801561220557600080fd5b5060405190808252806020026020018201604052801561222f578160200160208202803683370190505b5090506060826001600160401b038111801561224a57600080fd5b50604051908082528060200260200182016040528015612274578160200160208202803683370190505b50905060005b84518110156124e757600085828151811061229157fe5b6020026020010151905060008a6001600160a01b03166366cb8d2f836040518263ffffffff1660e01b81526004016122c991906137e1565b60206040518083038186803b1580156122e157600080fd5b505afa1580156122f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612319919061370f565b60405163a7bdad0360e01b81529091506000906060906001600160a01b038e169063a7bdad039061234e9087906004016137e1565b60006040518083038186803b15801561236657600080fd5b505afa15801561237a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123a29190810190613304565b80519091501561248b5760005b81518110156124895760008e6001600160a01b03166322ebeba4878585815181106123d657fe5b60200260200101516040518363ffffffff1660e01b81526004016123fb92919061380e565b60206040518083038186803b15801561241357600080fd5b505afa158015612427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244b919061370f565b9050600081131561246d57612466858263ffffffff61254e16565b9450612480565b61247d848263ffffffff61254e16565b93505b506001016123af565b505b612494836125bd565b8786815181106124a057fe5b60209081029190910101526124c06115848360001963ffffffff612cab16565b8686815181106124cc57fe5b602090810291909101015250506001909201915061227a9050565b5092979096509194509092505050565b6000821580612504575081155b156125115750600061052b565b611daa6001612542670de0b6b3a7640000611d9e83612536898963ffffffff612bd416565b9063ffffffff611db116565b9063ffffffff611df316565b60008282018183128015906125635750838112155b80612578575060008312801561257857508381125b611daa5760405162461bcd60e51b815260040161040290613bbe565b6000600160ff1b82106125b95760405162461bcd60e51b815260040161040290613f7c565b5090565b6000808212156125b95760405162461bcd60e51b815260040161040290613cbd565b60008183038183128015906125f45750838113155b80612609575060008312801561260957508381135b611daa5760405162461bcd60e51b815260040161040290614082565b6000816001600160a01b0316836001600160a01b031663481c6a756040518163ffffffff1660e01b815260040160206040518083038186803b15801561266a57600080fd5b505afa15801561267e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a291906132e8565b6001600160a01b0316149392505050565b60008054604051631d3af8fb60e21b81526001600160a01b03909116906374ebe3ec906126e49085906004016137e1565b60206040518083038186803b1580156126fc57600080fd5b505afa158015612710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273491906133ff565b801561052b57506040516335fc6c9f60e21b81526001600160a01b0383169063d7f1b27c906127679030906004016137e1565b60206040518083038186803b15801561277f57600080fd5b505afa158015612793573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b91906133ff565b6000808251116127d95760405162461bcd60e51b815260040161040290614204565b60005b600183510381101561285d5760008382815181106127f657fe5b6020026020010151905060008260010190505b84518110156128535784818151811061281e57fe5b60200260200101516001600160a01b0316826001600160a01b0316141561284b576001935050505061036d565b600101612809565b50506001016127dc565b50600092915050565b81516000908190815b818110156128b957846001600160a01b031686828151811061288d57fe5b60200260200101516001600160a01b031614156128b1579250600191506128c59050565b60010161286f565b50600019600092509250505b9250929050565b60405163a7bdad0360e01b81526060906001600160a01b0387169063a7bdad03906128fb9087906004016137e1565b60006040518083038186803b15801561291357600080fd5b505afa158015612927573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261294f9190810190613304565b805190915083156129ee5760005b818110156129e85782818151811061297157fe5b60200260200101516001600160a01b0316630fb96b21898989886040518563ffffffff1660e01b81526004016129aa9493929190613922565b600060405180830381600087803b1580156129c457600080fd5b505af11580156129d8573d6000803e3d6000fd5b50506001909201915061295d9050565b50611a6a565b60005b81811015612a7c57828181518110612a0557fe5b60200260200101516001600160a01b031663c137f4d7898989886040518563ffffffff1660e01b8152600401612a3e9493929190613922565b600060405180830381600087803b158015612a5857600080fd5b505af1158015612a6c573d6000803e3d6000fd5b5050600190920191506129f19050565b5050505050505050565b8015611728576040516370a0823160e01b81526000906001600160a01b038516906370a0823190612abb9088906004016137e1565b60206040518083038186803b158015612ad357600080fd5b505afa158015612ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0b919061370f565b9050612b1985858585612d16565b6040516370a0823160e01b81526000906001600160a01b038616906370a0823190612b489089906004016137e1565b60206040518083038186803b158015612b6057600080fd5b505afa158015612b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b98919061370f565b9050612baa828463ffffffff611db116565b81146119265760405162461bcd60e51b815260040161040290613e22565b61172884848484612de3565b600082612be35750600061052b565b82820282848281612bf057fe5b0414611daa5760405162461bcd60e51b815260040161040290613d29565b6000611daa83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612f07565b60008184841115612c745760405162461bcd60e51b8152600401610402919061394c565b505050900390565b6040516353bae5f760e01b81526000906001600160a01b038316906353bae5f7906127679030906004016137e1565b600082612cba5750600061052b565b82600019148015612cce5750600160ff1b82145b15612ceb5760405162461bcd60e51b815260040161040290613d99565b82820282848281612cf857fe5b0514611daa5760405162461bcd60e51b815260040161040290613d99565b80156117285760608282604051602401612d319291906137f5565b60408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b179052516347b7819960e11b81529091506001600160a01b03861690638f6f033290612d8d908790600090869060040161384c565b600060405180830381600087803b158015612da757600080fd5b505af1158015612dbb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611926919081019061341b565b8015611728576040516370a0823160e01b81526000906001600160a01b038616906370a0823190612e189086906004016137e1565b60206040518083038186803b158015612e3057600080fd5b505afa158015612e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e68919061370f565b9050612e7685858585612f3e565b6040516370a0823160e01b81526000906001600160a01b038716906370a0823190612ea59087906004016137e1565b60206040518083038186803b158015612ebd57600080fd5b505afa158015612ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef5919061370f565b9050612baa828463ffffffff611df316565b60008183612f285760405162461bcd60e51b8152600401610402919061394c565b506000838581612f3457fe5b0495945050505050565b611728846323b872dd60e01b858585604051602401612f5f93929190613828565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526060612fe6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166130209092919063ffffffff16565b805190915015611bd9578080602001905181019061300491906133ff565b611bd95760405162461bcd60e51b8152600401610402906140c6565b6060611c77848460008585613034856130ca565b6130505760405162461bcd60e51b815260040161040290613ed7565b60006060866001600160a01b0316858760405161306d91906137c5565b60006040518083038185875af1925050503d80600081146130aa576040519150601f19603f3d011682016040523d82523d6000602084013e6130af565b606091505b50915091506130bf8282866130d0565b979650505050505050565b3b151590565b606083156130df575081611daa565b8251156130ef5782518084602001fd5b8160405162461bcd60e51b8152600401610402919061394c565b50805460008255906000526020600020908101906116b791906131d0565b6040518060c0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001606081525090565b8280548282559060005260206000209081019282156131c4579160200282015b828111156131c457825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061318f565b506125b99291506131ed565b6131ea91905b808211156125b957600081556001016131d6565b90565b6131ea91905b808211156125b95780546001600160a01b03191681556001016131f3565b803561052b816142e7565b600082601f83011261322c578081fd5b815161323f61323a8261429c565b614276565b81815291506020808301908481018184028601820187101561326057600080fd5b60005b8481101561327f57815184529282019290820190600101613263565b505050505092915050565b600082601f83011261329a578081fd5b81356132a861323a8261429c565b8181529150602080830190848101818402860182018710156132c957600080fd5b60005b8481101561327f578135845292820192908201906001016132cc565b6000602082840312156132f9578081fd5b8151611daa816142e7565b60006020808385031215613316578182fd5b82516001600160401b0381111561332b578283fd5b80840185601f82011261333c578384fd5b8051915061334c61323a8361429c565b8281528381019082850185850284018601891015613368578687fd5b8693505b8484101561339357805161337f816142e7565b83526001939093019291850191850161336c565b50979650505050505050565b600080604083850312156133b1578081fd5b82516001600160401b03808211156133c7578283fd5b6133d38683870161321c565b935060208501519150808211156133e8578283fd5b506133f58582860161321c565b9150509250929050565b600060208284031215613410578081fd5b8151611daa816142fc565b60006020828403121561342c578081fd5b81516001600160401b0380821115613442578283fd5b81840185601f820112613453578384fd5b8051925081831115613463578384fd5b613476601f8401601f1916602001614276565b915082825285602084830101111561348c578384fd5b61349d8360208401602084016142bb565b50949350505050565b6000602082840312156134b7578081fd5b8135611daa816142e7565b600080604083850312156134d4578182fd5b82356134df816142e7565b915060208301356134ef816142e7565b809150509250929050565b6000806040838503121561350c578182fd5b8235613517816142e7565b946020939093013593505050565b600080600060608486031215613539578081fd5b8335613544816142e7565b925060208401359150604084013561355b816142e7565b809150509250925092565b600080600080600060a0868803121561357d578283fd5b8535613588816142e7565b9450602086810135945060408701356001600160401b03808211156135ab578586fd5b8189018a601f8201126135bc578687fd5b803592506135cc61323a8461429c565b83815284810190828601868602840187018e10156135e857898afd5b8993505b85841015613612576135fe8e82613211565b8352600193909301929186019186016135ec565b5097505050606089013592508083111561362a578384fd5b50506136388882890161328a565b9250506136488760808801613211565b90509295509295909350565b600080600060608486031215613668578081fd5b8335613673816142e7565b925060208401359150604084013561355b816142fc565b60008060008060008060c087890312156136a2578384fd5b86356136ad816142e7565b955060208701359450604087013593506060870135925060808701356136d2816142e7565b915060a08701356136e2816142e7565b809150509295509295509295565b600060208284031215613701578081fd5b815160038110611daa578182fd5b600060208284031215613720578081fd5b5051919050565b6000815180845260208085019450808401835b8381101561375f5781516001600160a01b03168752958201959082019060010161373a565b509495945050505050565b6000815180845260208085019450808401835b8381101561375f5781518752958201959082019060010161377d565b600081518084526137b18160208601602086016142bb565b601f01601f19169290920160200192915050565b600082516137d78184602087016142bb565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060018060a01b0385168252836020830152606060408301526138736060830184613799565b95945050505050565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b600060208252611daa6020830184613727565b6000606082526138c86060830186613727565b82810360208401526138da818661376a565b83810360408501526130bf818661376a565b901515815260200190565b6001600160a01b03948516815260208101939093529083166040830152909116606082015260800190565b6001600160a01b039485168152602081019390935292166040820152901515606082015260800190565b600060208252611daa6020830184613799565b60208082526015908201527420b2323932b9b9903737ba1034b71030b93930bc9760591b604082015260600190565b6020808252601f908201527f52656465656d206665652063616e277420657863656564206d6178696d756d00604082015260600190565b602080825260159082015274082e4e4c2f240d8cadccee8d040dad2e6dac2e8c6d605b1b604082015260600190565b60208082526026908201527f546f6f2066657720746f6b656e732072657475726e656420666f72207265646560408201526536b83a34b7b760d11b606082015260800190565b60208082526016908201527514d85b59481c995919595b48199959481c185cdcd95960521b604082015260600190565b60208082526028908201527f4d75737420626520612076616c696420616e6420696e697469616c697a65642060408201526729b2ba2a37b5b2b760c11b606082015260800190565b60208082526016908201527526b7b23ab632903737ba103932b3b4b9ba32b932b21760511b604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601e908201527f4d7573742062652070656e64696e6720696e697469616c697a6174696f6e0000604082015260600190565b6020808252601e908201527f4973737565206665652063616e277420657863656564206d6178696d756d0000604082015260600190565b6020808252601d908201527f536574546f6b656e207175616e74697479206d757374206265203e2030000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601a908201527f43616e6e6f74206475706c696361746520616464726573736573000000000000604082015260600190565b60208082526022908201527f4c696d69742070617373656420666f7220696e76616c696420636f6d706f6e656040820152611b9d60f21b606082015260800190565b60208082526025908201527f546f6f206d616e7920746f6b656e7320726571756972656420666f722069737360408201526475616e636560d81b606082015260800190565b6020808252818101527f53616665436173743a2076616c7565206d75737420626520706f736974697665604082015260600190565b60208082526018908201527f4f6e6c7920746865206d6f64756c652063616e2063616c6c0000000000000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526015908201527414d85b59481a5cdcdd5948199959481c185cdcd959605a1b604082015260600190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526022908201527f4973737565206665652063616e277420657863656564206d6178696d756d2066604082015261656560f01b606082015260800190565b6020808252601d908201527f496e76616c696420706f7374207472616e736665722062616c616e6365000000604082015260600190565b60208082526019908201527f53616d652066656520726563697069656e742070617373656400000000000000604082015260600190565b60208082526027908201527f46656520526563697069656e74206d757374206265206e6f6e2d7a65726f206160408201526632323932b9b99760c91b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252601f908201527f43616c6c2072656465656d57697468536c69707061676520696e737465616400604082015260600190565b6020808252601a908201527f4d6f64756c6520616c726561647920726567697374657265642e000000000000604082015260600190565b60208082526028908201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604082015267371034b73a191a9b60c11b606082015260800190565b60208082526024908201527f4d6f64756c65206d75737420626520656e61626c6564206f6e20636f6e74726f604082015263363632b960e11b606082015260800190565b60208082526023908201527f4d75737420626520636f6e74726f6c6c65722d656e61626c656420536574546f60408201526235b2b760e91b606082015260800190565b6020808252601c908201527f4d7573742062652074686520536574546f6b656e206d616e6167657200000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60208082526023908201527f52656769737465726564206d6f64756c6573206d7573742062652072656d6f7660408201526232b21760e91b606082015260800190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601e908201527f43616c6c20697373756557697468536c69707061676520696e73746561640000604082015260600190565b60208082526023908201527f52656465656d206665652063616e277420657863656564206d6178696d756d2060408201526266656560e81b606082015260800190565b6020808252600a90820152694120697320656d70747960b01b604082015260600190565b90815260200190565b9283526020830191909152604082015260600190565b948552602085019390935260408401919091526001600160a01b03908116606084015216608082015260a00190565b6040518181016001600160401b038111828210171561429457600080fd5b604052919050565b60006001600160401b038211156142b1578081fd5b5060209081020190565b60005b838110156142d65781810151838201526020016142be565b838111156117285750506000910152565b6001600160a01b03811681146116b757600080fd5b80151581146116b757600080fdfea264697066735822122025f7e5d4c5ae9cae73f11bdcb1e8608700702b5830161be46b6da833cc39448964736f6c634300060a0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
