{
  "_format": "hh-sol-artifact-1",
  "contractName": "PriceOracle",
  "sourceName": "contracts/core/PriceOracle.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "NewOwner",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "oldPendingOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newPendingOwner",
          "type": "address"
        }
      ],
      "name": "NewPendingOwner",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "WETH",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "ammObservationIndex",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "ammObservations",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "blockTimestamp",
          "type": "uint32"
        },
        {
          "internalType": "int56",
          "name": "tickCumulative",
          "type": "int56"
        },
        {
          "internalType": "bool",
          "name": "initialized",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cardinality",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        }
      ],
      "name": "getIndexPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        }
      ],
      "name": "getMarkPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isIndexPrice",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "beta",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "negative",
          "type": "bool"
        }
      ],
      "name": "getMarkPriceAcc",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        }
      ],
      "name": "getMarkPriceAfterSwap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isIndexPrice",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        }
      ],
      "name": "getMarkPriceInRatio",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "resultBaseAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "resultQuoteAmount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "isIndexPrice",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        }
      ],
      "name": "getMarketPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        }
      ],
      "name": "getPremiumFraction",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "quoteToken",
          "type": "address"
        }
      ],
      "name": "getTargetPool",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "WETH_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "v3Factory_",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "priceGap",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "quoteToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        }
      ],
      "name": "quote",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "source",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        }
      ],
      "name": "quoteFromAmmTwap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "baseToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "quoteToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "baseAmount",
          "type": "uint256"
        }
      ],
      "name": "quoteSingle",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "quoteAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "useBridge_",
          "type": "bool"
        }
      ],
      "name": "resetTwap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newPendingOwner",
          "type": "address"
        }
      ],
      "name": "setPendingOwner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        }
      ],
      "name": "setupTwap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "twapInterval",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "amm",
          "type": "address"
        }
      ],
      "name": "updateAmmTwap",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "useBridge",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "v3Factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "v3Fees",
      "outputs": [
        {
          "internalType": "uint24",
          "name": "",
          "type": "uint24"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "v3Pools",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50614da0806100206000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80639c6f302611610104578063d00a176e116100a2578063ebbc496511610071578063ebbc496514610491578063f4170ff114610499578063f65770ba146104d7578063fc3ef30f146104ea576101cf565b8063d00a176e14610450578063d480731c14610463578063dbffe9ad14610476578063e30c39781461047e576101cf565b8063b263e010116100de578063b263e010146103ed578063b646638414610400578063ba4433c01461042a578063c42069ec1461043d576101cf565b80639c6f3026146103a0578063a11b4528146103b3578063ad5c4648146103da576101cf565b806349d2e471116101715780635d6f9c141161014b5780635d6f9c14146103045780637c887c591461032c5780637e650a05146103575780638da5cb5b14610387576101cf565b806349d2e471146102805780634b8fc908146102ba5780634c0000dc146102f1576101cf565b8063422bb010116101ad578063422bb0101461022d57806345c48e0c1461024057806346b55e401461025a578063485cc9551461026d576101cf565b80631f491634146101d45780633c1d5df0146101fa5780633d325b7414610218575b600080fd5b6101e76101e236600461423d565b61051e565b6040519081526020015b60405180910390f35b61020361038481565b60405163ffffffff90911681526020016101f1565b61022b61022636600461427d565b61064c565b005b61022b61023b3660046141cd565b610ab5565b610248600a81565b60405160ff90911681526020016101f1565b6101e76102683660046141cd565b610b3c565b61022b61027b366004614205565b610c08565b61029361028e3660046142aa565b610d2e565b6040805163ffffffff909416845260069290920b60208401521515908201526060016101f1565b6102de6102c83660046141cd565b60086020526000908152604090205461ffff1681565b60405161ffff90911681526020016101f1565b6101e76102ff366004614309565b610d6f565b6103176103123660046141cd565b610fcc565b604080519283529015156020830152016101f1565b60035461033f906001600160a01b031681565b6040516001600160a01b0390911681526020016101f1565b61036a6103653660046142d5565b61104d565b6040805193845260208401929092521515908201526060016101f1565b60005461033f906201000090046001600160a01b031681565b6101e76103ae3660046141cd565b611360565b6103c66103c1366004614582565b6115ec565b60405162ffffff90911681526020016101f1565b60025461033f906001600160a01b031681565b6101e76103fb3660046141cd565b61161b565b61041361040e36600461423d565b61182b565b6040805192835260ff9091166020830152016101f1565b6103176104383660046142d5565b61193d565b61022b61044b3660046141cd565b611dd9565b61033f61045e366004614205565b611ee3565b6101e76104713660046142aa565b61208a565b6102de603c81565b60015461033f906001600160a01b031681565b61022b6123a5565b6104c76104a7366004614205565b600560209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101f1565b61022b6104e53660046141cd565b6124af565b61033f6104f8366004614205565b60066020908152600092835260408084209091529082529020546001600160a01b031681565b6001600160a01b03808416600090815260066020908152604080832086851684529091528120549091168061055a576105578585611ee3565b90505b6001600160a01b038116610572576000915050610645565b6000610580826103846127fa565b9050600061058d82612c33565b9050826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156105c857600080fd5b505afa1580156105dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060091906141e9565b6001600160a01b0316876001600160a01b0316141561062f576106288582600160601b612c53565b9350610641565b61063e85600160601b83612c53565b93505b5050505b9392505050565b6000546201000090046001600160a01b031633146106aa5760405162461bcd60e51b815260206004820152601660248201527527bbb730b136329d102922a8aaa4a922afa7aba722a960511b60448201526064015b60405180910390fd5b6001600160a01b03821660009081526007602052604081200154600160581b900460ff166107265760405162461bcd60e51b815260206004820152602360248201527f50726963654f7261636c652e7265736574547761703a20414d4d5f4e4f545f4960448201526213925560ea1b60648201526084016106a1565b6000826001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561076157600080fd5b505afa158015610775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079991906141e9565b90506000836001600160a01b031663217a4b706040518163ffffffff1660e01b815260040160206040518083038186803b1580156107d657600080fd5b505afa1580156107ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080e91906141e9565b6001600160a01b03808416600081815260066020908152604080832094861680845294825280832080546001600160a01b031916905592825260058152828220938252929092529020805460ff191690559050826108ab5760006108728383611ee3565b90506001600160a01b03811661089a5760405162461bcd60e51b81526004016106a190614692565b6108a5838383612d02565b506109da565b6001600160a01b038083166000908152600660208181526040808420600280548716865290835281852080546001600160a01b031990811690915581548716865293835281852087871686529092528320805490921690915554909161091391859116611ee3565b90506001600160a01b03811661093b5760405162461bcd60e51b81526004016106a190614692565b6002546109539084906001600160a01b031683612d02565b600254610969906001600160a01b031683611ee3565b90506001600160a01b0381166109915760405162461bcd60e51b81526004016106a190614692565b6002546109a8906001600160a01b03168383612d02565b506001600160a01b038083166000908152600560209081526040808320938516835292905220805460ff191660011790555b6001600160a01b03841660009081526007602052604081206109fb916140ce565b6001600160a01b0384166000908152600860205260409020805461ffff19169055610a87425b6001600160a01b0386166000908152600760209081526040808320815160608101835263ffffffff90951680865292850193909352600193018390528154600160581b63ffffffff199091169091176bffffffffffffffff000000001916179055908190565b50506001600160a01b0384166000908152600760205260409020610aae906001603c612e51565b5050505050565b6000610ac082612f0d565b90506000610acd82612fbb565b6001600160a01b0384166000908152600860209081526040808320546007909252822092935061ffff1691610b0790834286603c806132f6565b506001600160a01b03959095166000908152600860205260409020805461ffff191661ffff9096169590951790945550505050565b600080610b4883611360565b90506000610b558461161b565b9050600082118015610b675750600081115b610bc95760405162461bcd60e51b815260206004820152602d60248201527f50726963654f7261636c652e6765745072656d69756d4672616374696f6e3a2060448201526c494e56414c49445f505249434560981b60648201526084016106a1565b8062015180610bd88285614b41565b610bea90670de0b6b3a76400006149e5565b610bf4919061483e565b610bfe919061483e565b925050505b919050565b600054610100900460ff1680610c21575060005460ff16155b610c845760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a1565b600054610100900460ff16158015610caf576000805460ff1961ff0019909116610100171660011790555b600280546001600160a01b03199081166001600160a01b0386811691909117909255600380549091169184169190911790556004805462ffffff19166101f41765ffffff0000001916640bb80000001768ffffff00000000000019166727100000000000001790558015610d29576000805461ff00191690555b505050565b60076020528160005260406000208161ffff8110610d4b57600080fd5b015463ffffffff81169250600160201b810460060b9150600160581b900460ff1683565b6000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610dad57600080fd5b505afa158015610dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de59190614482565b5090925090506001600160701b038116606486610e03896002614b18565b60ff16610e109190614af9565b610e1a91906148aa565b10610e7f5760405162461bcd60e51b815260206004820152602f60248201527f50726963654f7261636c652e6765744d61726b50726963654163633a20534c4960448201526e50504147455f544f4f5f4c4152474560881b60648201526084016106a1565b600080610e8e8988600061104d565b925050915080610f235760006064610ea960ff8b168a614af9565b610eb391906148aa565b905060008715610ed757610ed0826001600160701b038716614bf2565b9050610eed565b610eea826001600160701b0387166147e1565b90505b610ef78180614af9565b9050610f1a610f126001600160701b03808816908916614af9565b8a9083612c53565b96505050610fc0565b600082610f3889670de0b6b3a7640000614af9565b610f4291906148aa565b90506000610f7f60648a610f578d6002614b18565b60ff16610f649190614af9565b610f6e91906148aa565b83906001600160701b038816612c53565b905060008815610f9a57610f938284614bf2565b9050610fa7565b610fa482846147e1565b90505b610fba8a670de0b6b3a764000083612c53565b97505050505b50505050949350505050565b600080610fd883611360565b91506000610fe58461161b565b9050610ff3600a6064614819565b6110009060ff1682614af9565b61100b846064614af9565b10158061103a575061101f600a6064614c26565b61102c9060ff1682614af9565b611037846064614af9565b11155b1561104757809250600191505b50915091565b6000808084158061105c575083155b6110c35760405162461bcd60e51b815260206004820152603260248201527f50726963654f7261636c652e6765744d61726b5072696365496e526174696f3a6044820152712041545f4c454153545f4f4e455f5a45524f60701b60648201526084016106a1565b60006110ce87610fcc565b92509050816110e7576110e287878761193d565b925090505b6000876001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561112257600080fd5b505afa158015611136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115a91906141e9565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561119257600080fd5b505afa1580156111a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ca91906145e7565b90506000886001600160a01b031663217a4b706040518163ffffffff1660e01b815260040160206040518083038186803b15801561120757600080fd5b505afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906141e9565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561127757600080fd5b505afa15801561128b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112af91906145e7565b905060008260ff168260ff1611156112e7576112cb8383614c26565b6112d690600a614913565b6112e09085614af9565b9050611309565b6112f18284614c26565b6112fc90600a614913565b61130690856148aa565b90505b881561133357806113228a670de0b6b3a7640000614af9565b61132c91906148aa565b9650611353565b670de0b6b3a7640000611346828a614af9565b61135091906148aa565b95505b5050505093509350939050565b6000806000836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561139e57600080fd5b505afa1580156113b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d69190614482565b50915091506000846001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561141657600080fd5b505afa15801561142a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144e91906141e9565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561148657600080fd5b505afa15801561149a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114be91906145e7565b90506000856001600160a01b031663217a4b706040518163ffffffff1660e01b815260040160206040518083038186803b1580156114fb57600080fd5b505afa15801561150f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153391906141e9565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561156b57600080fd5b505afa15801561157f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a391906145e7565b90506000816115b3846012614819565b6115bd9190614c26565b6115c890600a614913565b90506115e1816001600160701b03808716908816612c53565b979650505050505050565b600481600381106115fc57600080fd5b600a9182820401919006600302915054906101000a900462ffffff1681565b600080826001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561165757600080fd5b505afa15801561166b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168f91906141e9565b90506000836001600160a01b031663217a4b706040518163ffffffff1660e01b815260040160206040518083038186803b1580156116cc57600080fd5b505afa1580156116e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170491906141e9565b90506000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561174157600080fd5b505afa158015611755573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177991906145e7565b60ff1690506000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156117b957600080fd5b505afa1580156117cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f191906145e7565b60ff1690506000611808858561040e86600a614904565b509050611816826012614bf2565b61182190600a614904565b6115e19082614af9565b6001600160a01b038084166000908152600560209081526040808320938616835292905290812054819060ff166118ac5761186785858561051e565b9150816118a7576002546000906118899087906001600160a01b03168661051e565b6002549091506118a3906001600160a01b0316868361051e565b9250505b6118e5565b6002546000906118c79087906001600160a01b03168661051e565b6002549091506118e1906001600160a01b0316868361051e565b9250505b600082116119355760405162461bcd60e51b815260206004820152601e60248201527f50726963654f7261636c652e71756f74653a205a45524f5f414d4f554e54000060448201526064016106a1565b935093915050565b600080600080866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561197c57600080fd5b505afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b49190614482565b50915091506000876001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b1580156119f457600080fd5b505afa158015611a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2c91906141e9565b90506000886001600160a01b031663217a4b706040518163ffffffff1660e01b815260040160206040518083038186803b158015611a6957600080fd5b505afa158015611a7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa191906141e9565b90506000808915611b7657604051635e49b2bb60e11b81526001600160a01b0384811660048301528581166024830152604482018c905260006064830181905291908d169063bc93657690608401604080518083038186803b158015611b0657600080fd5b505afa158015611b1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3e919061441c565b6020810151909150611b59906001600160701b038916614bf2565b9250611b6e8b6001600160701b0388166147e1565b915050611c3c565b604051635e49b2bb60e11b81526001600160a01b0385811660048301528481166024830152604482018b905260006064830181905291908d169063bc93657690608401604080518083038186803b158015611bd057600080fd5b505afa158015611be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c08919061441c565b9050611c1d8a6001600160701b0389166147e1565b6020820151909350611c38906001600160701b038816614bf2565b9150505b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611c7757600080fd5b505afa158015611c8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611caf91906145e7565b90506000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611cec57600080fd5b505afa158015611d00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2491906145e7565b9050600081611d34846012614819565b611d3e9190614c26565b611d4990600a614913565b9050611d56818587612c53565b9a508d6000611d648261161b565b9050611d72600a6064614819565b611d7f9060ff1682614af9565b611d8a8e6064614af9565b101580611db95750611d9e600a6064614c26565b611dab9060ff1682614af9565b611db68e6064614af9565b11155b15611dc657809c5060019b505b5050505050505050505050935093915050565b6000546201000090046001600160a01b03163314611e325760405162461bcd60e51b815260206004820152601660248201527527bbb730b136329d102922a8aaa4a922afa7aba722a960511b60448201526064016106a1565b6001546001600160a01b0382811691161415611e875760405162461bcd60e51b815260206004820152601460248201527313dddb98589b194e881053149150511657d4d15560621b60448201526064016106a1565b6001546040516001600160a01b038084169216907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080808080805b600381101561207e57600380546001600160a01b031690631698ee82908a908a9060049086908110611f2d57634e487b7160e01b600052603260045260246000fd5b600a808204929092015460405160e087901b6001600160e01b03191681526001600160a01b039586166004820152939094166024840152066003026101000a90910462ffffff16604482015260640160206040518083038186803b158015611f9457600080fd5b505afa158015611fa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcc91906141e9565b93506001600160a01b038416611fe15761206c565b836001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b15801561201a57600080fd5b505afa15801561202e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205291906144c4565b6001600160801b031691508282111561206c578192508394505b8061207681614c6b565b915050611eeb565b50929695505050505050565b60008061209684612f0d565b6001600160a01b0385166000908152600860209081526040808320546007909252822092935061ffff1691603c6120ce8460016147bb565b6120d89190614c86565b61ffff1661ffff81106120fb57634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff161515918101829052915061219a576001600160a01b03861660009081526007602052604081209060408051606081018252929091015463ffffffff81168352600160201b8104600690810b810b900b602084015260ff600160581b9091041615159082015290505b805142906000906121ab9083614c09565b905063ffffffff811615612319578761038463ffffffff83168111156121ce5750815b604080516002808252606082018352600092602083019080368337019050509050818160008151811061221157634e487b7160e01b600052603260045260246000fd5b602002602001019063ffffffff16908163ffffffff168152505060008160018151811061224e57634e487b7160e01b600052603260045260246000fd5b602002602001019063ffffffff16908163ffffffff1681525050600061229b86836122788c612fbb565b6001600160a01b03881660009081526007602052604090209291908c603c61346b565b90506123128363ffffffff16826000815181106122c857634e487b7160e01b600052603260045260246000fd5b6020026020010151836001815181106122f157634e487b7160e01b600052603260045260246000fd5b60200260200101516123039190614b80565b61230d919061486c565b61358c565b9850505050505b600061232486612c33565b90506123358882600160601b612c53565b9650600087116123995760405162461bcd60e51b815260206004820152602960248201527f50726963654f7261636c652e71756f746546726f6d416d6d547761703a205a456044820152681493d7d05353d5539560ba1b60648201526084016106a1565b50505050505092915050565b6001546001600160a01b031633146123ff5760405162461bcd60e51b815260206004820152601e60248201527f4f776e61626c653a20524551554952455f50454e44494e475f4f574e4552000060448201526064016106a1565b60008054600180546001600160a01b038181166201000081810262010000600160b01b03198716178088556001600160a01b031990941690945560405194849004821695909493909204169184917f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b236491a36001546040516001600160a01b03918216918316907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a35050565b6001600160a01b03811660009081526007602052604081200154600160581b900460ff16156125315760405162461bcd60e51b815260206004820152602860248201527f50726963654f7261636c652e7365747570547761703a20414d4d5f414c524541604482015267044595f53455455560c41b60648201526084016106a1565b6000816001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561256c57600080fd5b505afa158015612580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a491906141e9565b90506000826001600160a01b031663217a4b706040518163ffffffff1660e01b815260040160206040518083038186803b1580156125e157600080fd5b505afa1580156125f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261991906141e9565b6001600160a01b0380841660009081526005602090815260408083209385168352929052205490915060ff16158061267657506001600160a01b038281166000908152600660209081526040808320858516845290915290205416155b6126d45760405162461bcd60e51b815260206004820152602960248201527f50726963654f7261636c652e7365747570547761703a20504149525f414c524560448201526804144595f53455455560bc1b60648201526084016106a1565b60006126e08383611ee3565b90506001600160a01b03811615612701576126fc838383612d02565b6109fb565b6002546127189084906001600160a01b0316611ee3565b90506001600160a01b0381166127405760405162461bcd60e51b81526004016106a19061464d565b6002546127589084906001600160a01b031683612d02565b60025461276e906001600160a01b031683611ee3565b90506001600160a01b0381166127965760405162461bcd60e51b81526004016106a19061464d565b6002546127ad906001600160a01b03168383612d02565b6001600160a01b03838116600090815260056020908152604080832086851684528252808320805460ff1916600117905592871682526008905220805461ffff19169055610a8742610a21565b60008263ffffffff831661288857806001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561284157600080fd5b505afa158015612855573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287991906144eb565b50949650612c2c945050505050565b600080826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156128c457600080fd5b505afa1580156128d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128fc91906144eb565b505050935093505050600080846001600160a01b031663252c09d78486600161292591906147bb565b61292f9190614c86565b6040516001600160e01b031960e084901b16815261ffff909116600482015260240160806040518083038186803b15801561296957600080fd5b505afa15801561297d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a1919061459a565b93505050915080612a2b5760405163252c09d760e01b8152600060048201526001600160a01b0386169063252c09d79060240160806040518083038186803b1580156129ec57600080fd5b505afa158015612a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a24919061459a565b5091935050505b6000612a378342614c09565b905063ffffffff8116612ac457856001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015612a7d57600080fd5b505afa158015612a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab591906144eb565b50949b50612399945050505050565b8763ffffffff168163ffffffff161015612adc578097505b6040805160028082526060820183526000926020830190803683370190505090508881600081518110612b1f57634e487b7160e01b600052603260045260246000fd5b602002602001019063ffffffff16908163ffffffff1681525050600081600181518110612b5c57634e487b7160e01b600052603260045260246000fd5b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81526000906001600160a01b0389169063883bdbfd90612ba0908590600401614603565b60006040518083038186803b158015612bb857600080fd5b505afa158015612bcc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612bf4919081019061435b565b509050612c228a63ffffffff16826000815181106122c857634e487b7160e01b600052603260045260246000fd5b9850505050505050505b5092915050565b6000612c4d6001600160a01b03831680600160601b612c53565b92915050565b600080806000198587098587029250828110838203039150508060001415612c8d5760008411612c8257600080fd5b508290049050610645565b808411612c9957600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038381166000908152600660209081526040808320868516845290915290205416610d29576001600160a01b038381166000908152600660209081526040808320868516845290915280822080546001600160a01b03191693851693841790558051633850c7bd60e01b81529051849391633850c7bd9160048083019260e0929190829003018186803b158015612d9f57600080fd5b505afa158015612db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd791906144eb565b5050945050505050603c61ffff168161ffff161015610aae576040516332148f6760e01b8152603c60048201526001600160a01b038416906332148f6790602401600060405180830381600087803b158015612e3257600080fd5b505af1158015612e46573d6000803e3d6000fd5b505050505050505050565b6000808361ffff1611612e8a5760405162461bcd60e51b81526020600482015260016024820152604960f81b60448201526064016106a1565b8261ffff168261ffff1611612ea0575081610645565b825b8261ffff168161ffff161015612f04576001858261ffff1661ffff8110612ed957634e487b7160e01b600052603260045260246000fd5b01805463ffffffff191663ffffffff9290921691909117905580612efc81614c49565b915050612ea2565b50909392505050565b6000806000836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612f4b57600080fd5b505afa158015612f5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f839190614482565b5090925090506000612fa76001600160701b0380841690600160c01b908616612c53565b9050612fb2816139a0565b95945050505050565b60006401000276a36001600160a01b03831610801590612ff7575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b6130275760405162461bcd60e51b81526020600482015260016024820152602960f91b60448201526064016106a1565b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106130c2576130b8607f82614bf2565b83901c91506130d3565b6130cd81607f614bf2565b83901b91505b600060406130e2608084614b41565b901b9050828302607f1c92508260801c80603f1b8217915083811c935050828302607f1c92508260801c80603e1b8217915083811c935050828302607f1c92508260801c80603d1b8217915083811c935050828302607f1c92508260801c80603c1b8217915083811c935050828302607f1c92508260801c80603b1b8217915083811c935050828302607f1c92508260801c80603a1b8217915083811c935050828302607f1c92508260801c8060391b8217915083811c935050828302607f1c92508260801c8060381b8217915083811c935050828302607f1c92508260801c8060371b8217915083811c935050828302607f1c92508260801c8060361b8217915083811c935050828302607f1c92508260801c8060351b8217915083811c935050828302607f1c92508260801c8060341b8217915083811c935050828302607f1c92508260801c8060331b8217915083811c935050828302607f1c92508260801c8060321b8217915050600081693627a301d71055774c8561326591906149e5565b9050600060806132856f028f6481ab7f045a5af012a19d003aaa84614b41565b901d9050600060806132a7846fdb2df09e81959a81455e260799a0632f61472c565b901d90508060020b8260020b146132e757886001600160a01b03166132cb8261358c565b6001600160a01b031611156132e057816132e2565b805b6132e9565b815b9998505050505050505050565b6000806000888861ffff1661ffff811061332057634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b90920460ff16151593830193909352909250908816141561337b5787859250925050613460565b8461ffff168461ffff161180156133a35750613398600186614bcf565b61ffff168861ffff16145b156133b0578391506133b4565b8491505b816133c08960016147bb565b6133ca9190614c86565b92506133d7818888613a0f565b898461ffff1661ffff81106133fc57634e487b7160e01b600052603260045260246000fd5b82519101805460208401516040909401511515600160581b0260ff60581b1960069590950b66ffffffffffffff16600160201b026affffffffffffff000000001963ffffffff90951663ffffffff1990931692909217939093161792909216179055505b965096945050505050565b606060008261ffff16116134a55760405162461bcd60e51b81526020600482015260016024820152604960f81b60448201526064016106a1565b845167ffffffffffffffff8111156134cd57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156134f6578160200160208202803683370190505b50905060005b85518110156135815761353a888888848151811061352a57634e487b7160e01b600052603260045260246000fd5b6020026020010151888888613a8b565b82828151811061355a57634e487b7160e01b600052603260045260246000fd5b602002602001019060060b908160060b81525050808061357990614c6b565b9150506134fc565b509695505050505050565b60008060008360020b126135a3578260020b6135b0565b8260020b6135b090614cdc565b90506135bf620d89e719614cbb565b60020b8111156135f55760405162461bcd60e51b81526020600482015260016024820152601560fa1b60448201526064016106a1565b60006001821661360957600160801b61361b565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561365a576080613655826ffff97272373d413259a46990580e213a614af9565b901c90505b600482161561368457608061367f826ffff2e50f5f656932ef12357cf3c7fdcc614af9565b901c90505b60088216156136ae5760806136a9826fffe5caca7e10e4e61c3624eaa0941cd0614af9565b901c90505b60108216156136d85760806136d3826fffcb9843d60f6159c9db58835c926644614af9565b901c90505b60208216156137025760806136fd826fff973b41fa98c081472e6896dfb254c0614af9565b901c90505b604082161561372c576080613727826fff2ea16466c96a3843ec78b326b52861614af9565b901c90505b6080821615613756576080613751826ffe5dee046a99a2a811c461f1969c3053614af9565b901c90505b61010082161561378157608061377c826ffcbe86c7900a88aedcffc83b479aa3a4614af9565b901c90505b6102008216156137ac5760806137a7826ff987a7253ac413176f2b074cf7815e54614af9565b901c90505b6104008216156137d75760806137d2826ff3392b0822b70005940c7a398e4b70f3614af9565b901c90505b6108008216156138025760806137fd826fe7159475a2c29b7443b29c7fa6e889d9614af9565b901c90505b61100082161561382d576080613828826fd097f3bdfd2022b8845ad8f792aa5825614af9565b901c90505b612000821615613858576080613853826fa9f746462d870fdf8a65dc1f90e061e5614af9565b901c90505b61400082161561388357608061387e826f70d869a156d2a1b890bb3df62baf32f7614af9565b901c90505b6180008216156138ae5760806138a9826f31be135f97d08fd981231505542fcfa6614af9565b901c90505b620100008216156138da5760806138d5826f09aa508b5b7a84e1c677de54f3e99bc9614af9565b901c90505b62020000821615613905576080613900826e5d6af8dedb81196699c329225ee604614af9565b901c90505b6204000082161561392f57608061392a826d2216e584f5fa1ea926041bedfe98614af9565b901c90505b62080000821615613957576080613952826b048a170391f7dc42444e8fa2614af9565b901c90505b60008460020b13156139725761396f816000196148aa565b90505b613980600160201b82614ca7565b1561398c57600161398f565b60005b610bfe9060ff16602083901c6147e1565b60006003821115613a0157508060006139ba6002836148aa565b6139c59060016147e1565b90505b818110156139fb579050806002816139e081866148aa565b6139ea91906147e1565b6139f491906148aa565b90506139c8565b50610c03565b8115610c0357506001919050565b60408051606081018252600080825260208201819052918101919091528351600090613a3b9085614c09565b905060405180606001604052808563ffffffff1681526020018260030b8560020b613a669190614a68565b8760200151613a75919061476d565b60060b8152600160209091015295945050505050565b600063ffffffff8516613b26576000878461ffff1661ffff8110613abf57634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b90920460ff1615159383019390935290925090881614613b1b57613b18818887613a0f565b90505b602001519050613bfa565b6000613b328688614c09565b9050600080613b458a8a858a8a8a613c04565b91509150816000015163ffffffff168363ffffffff161415613b6f5750602001519150613bfa9050565b805163ffffffff84811691161415613b8f57602001519250613bfa915050565b81518151600091613b9f91614c09565b8351909150600090613bb19086614c09565b90508060030b8260030b85602001518560200151613bcf9190614b80565b613bd9919061486c565b613be39190614a68565b8460200151613bf2919061476d565b955050505050505b9695505050505050565b60408051606081018252600080825260208201819052918101919091526040805160608101825260008082526020820181905291810191909152878461ffff1661ffff8110613c6357634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff8116808352600160201b8204600690810b810b900b6020840152600160581b90910460ff161515928201929092529250613cb390889088613e06565b15613cea578563ffffffff16826000015163ffffffff161415613cd557613460565b81613ce1838888613a0f565b91509150613460565b8783613cf78660016147bb565b613d019190614c86565b61ffff1661ffff8110613d2457634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff1615159181018290529250613da95760408051606081018252895463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff1615159181019190915291505b613db887836000015188613e06565b613dea5760405162461bcd60e51b815260206004820152600360248201526213d31160ea1b60448201526064016106a1565b613df78888888787613ed5565b91509150965096945050505050565b60008363ffffffff168363ffffffff1611158015613e3057508363ffffffff168263ffffffff1611155b15613e4c578163ffffffff168363ffffffff1611159050610645565b60008463ffffffff168463ffffffff1611613e7a57613e7563ffffffff8516600160201b6147f9565b613e82565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff1611613eb957613eb463ffffffff8516600160201b6147f9565b613ec1565b8363ffffffff165b64ffffffffff169091111595945050505050565b604080516060808201835260008083526020808401829052838501829052845192830185528183528201819052928101839052909183613f168660016147bb565b613f209190614c86565b61ffff169050600060018561ffff1683613f3a91906147e1565b613f449190614bf2565b905060005b6002613f5583856147e1565b613f5f91906148aa565b905089613f7061ffff881683614ca7565b61ffff8110613f8f57634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff1615159181018290529550613fe657613fdf8160016147e1565b9250613f49565b8961ffff8716613ff78360016147e1565b6140019190614ca7565b61ffff811061402057634e487b7160e01b600052603260045260246000fd5b60408051606081018252929091015463ffffffff81168352600160201b8104600690810b810b900b602084015260ff600160581b909104161515908201528551909450600090614072908b908b613e06565b905080801561408b575061408b8a8a8760000151613e06565b1561409657506140c1565b806140ad576140a6600183614bf2565b92506140bb565b6140b88260016147e1565b93505b50613f49565b5050509550959350505050565b506140de9061ffff8101906140e1565b50565b5b808211156141055780546bffffffffffffffffffffffff191681556001016140e2565b5090565b600082601f830112614119578081fd5b8151602061412e61412983614708565b6146d7565b828152818101908583018385028701840188101561414a578586fd5b855b8581101561417157815161415f81614d38565b8452928401929084019060010161414c565b5090979650505050505050565b8051600681900b8114610c0357600080fd5b80516001600160701b0381168114610c0357600080fd5b805161ffff81168114610c0357600080fd5b805163ffffffff81168114610c0357600080fd5b6000602082840312156141de578081fd5b813561064581614d38565b6000602082840312156141fa578081fd5b815161064581614d38565b60008060408385031215614217578081fd5b823561422281614d38565b9150602083013561423281614d38565b809150509250929050565b600080600060608486031215614251578081fd5b833561425c81614d38565b9250602084013561426c81614d38565b929592945050506040919091013590565b6000806040838503121561428f578182fd5b823561429a81614d38565b9150602083013561423281614d4d565b600080604083850312156142bc578182fd5b82356142c781614d38565b946020939093013593505050565b6000806000606084860312156142e9578081fd5b83356142f481614d38565b95602085013595506040909401359392505050565b6000806000806080858703121561431e578182fd5b843561432981614d38565b9350602085013561433981614d5b565b925060408501359150606085013561435081614d4d565b939692955090935050565b6000806040838503121561436d578182fd5b825167ffffffffffffffff80821115614384578384fd5b818501915085601f830112614397578384fd5b815160206143a761412983614708565b82815281810190858301838502870184018b10156143c3578889fd5b8896505b848710156143ec576143d88161417e565b8352600196909601959183019183016143c7565b5091880151919650909350505080821115614405578283fd5b5061441285828601614109565b9150509250929050565b60006040828403121561442d578081fd5b82601f83011261443b578081fd5b61444560406146d7565b808385604086011115614456578384fd5b835b6002811015614477578151845260209384019390910190600101614458565b509095945050505050565b600080600060608486031215614496578081fd5b61449f84614190565b92506144ad60208501614190565b91506144bb604085016141b9565b90509250925092565b6000602082840312156144d5578081fd5b81516001600160801b0381168114610645578182fd5b600080600080600080600060e0888a031215614505578485fd5b875161451081614d38565b8097505060208801518060020b8114614527578586fd5b9550614535604089016141a7565b9450614543606089016141a7565b9350614551608089016141a7565b925060a088015161456181614d5b565b60c089015190925061457281614d4d565b8091505092959891949750929550565b600060208284031215614593578081fd5b5035919050565b600080600080608085870312156145af578182fd5b6145b8856141b9565b93506145c66020860161417e565b925060408501516145d681614d38565b606086015190925061435081614d4d565b6000602082840312156145f8578081fd5b815161064581614d5b565b6020808252825182820181905260009190848201906040850190845b8181101561464157835163ffffffff168352928401929184019160010161461f565b50909695505050505050565b60208082526025908201527f50726963654f7261636c652e7365747570547761703a20504f4f4c5f4e4f545f6040820152641193d5539160da1b606082015260800190565b60208082526025908201527f50726963654f7261636c652e7265736574547761703a20504f4f4c5f4e4f545f6040820152641193d5539160da1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561470057614700614d22565b604052919050565b600067ffffffffffffffff82111561472257614722614d22565b5060209081020190565b600080821280156001600160ff1b038490038513161561474e5761474e614cf6565b600160ff1b839003841281161561476757614767614cf6565b50500190565b60008160060b8360060b82821282667fffffffffffff0382138115161561479657614796614cf6565b82667fffffffffffff190382128116156147b2576147b2614cf6565b50019392505050565b600061ffff8083168185168083038211156147d8576147d8614cf6565b01949350505050565b600082198211156147f4576147f4614cf6565b500190565b600064ffffffffff8083168185168083038211156147d8576147d8614cf6565b600060ff821660ff84168060ff0382111561483657614836614cf6565b019392505050565b60008261484d5761484d614d0c565b600160ff1b82146000198414161561486757614867614cf6565b500590565b60008160060b8360060b8061488357614883614d0c565b667fffffffffffff198214600019821416156148a1576148a1614cf6565b90059392505050565b6000826148b9576148b9614d0c565b500490565b80825b60018086116148d057506148fb565b8187048211156148e2576148e2614cf6565b808616156148ef57918102915b9490941c9380026148c1565b94509492505050565b60006106456000198484614921565b600061064560001960ff8516845b60008261493057506001610645565b8161493d57506000610645565b8160018114614953576002811461495d5761498a565b6001915050610645565b60ff84111561496e5761496e614cf6565b6001841b91508482111561498457614984614cf6565b50610645565b5060208310610133831016604e8410600b84101617156149bd575081810a838111156149b8576149b8614cf6565b610645565b6149ca84848460016148be565b8086048211156149dc576149dc614cf6565b02949350505050565b60006001600160ff1b0381841382841380821686840486111615614a0b57614a0b614cf6565b600160ff1b84871282811687830589121615614a2957614a29614cf6565b858712925087820587128484161615614a4457614a44614cf6565b87850587128184161615614a5a57614a5a614cf6565b505050929093029392505050565b60008160060b8360060b667fffffffffffff83821384841383830485118282161615614a9657614a96614cf6565b667fffffffffffff1986851282811687830587121615614ab857614ab8614cf6565b878712925085820587128484161615614ad357614ad3614cf6565b85850587128184161615614ae957614ae9614cf6565b5050509290910295945050505050565b6000816000190483118215151615614b1357614b13614cf6565b500290565b600060ff821660ff84168160ff0481118215151615614b3957614b39614cf6565b029392505050565b60008083128015600160ff1b850184121615614b5f57614b5f614cf6565b6001600160ff1b0384018313811615614b7a57614b7a614cf6565b50500390565b60008160060b8360060b82811281667fffffffffffff1901831281151615614baa57614baa614cf6565b81667fffffffffffff018313811615614bc557614bc5614cf6565b5090039392505050565b600061ffff83811690831681811015614bea57614bea614cf6565b039392505050565b600082821015614c0457614c04614cf6565b500390565b600063ffffffff83811690831681811015614bea57614bea614cf6565b600060ff821660ff841680821015614c4057614c40614cf6565b90039392505050565b600061ffff80831681811415614c6157614c61614cf6565b6001019392505050565b6000600019821415614c7f57614c7f614cf6565b5060010190565b600061ffff80841680614c9b57614c9b614d0c565b92169190910692915050565b600082614cb657614cb6614d0c565b500690565b60008160020b627fffff19811415614cd557614cd5614cf6565b9003919050565b6000600160ff1b821415614cf257614cf2614cf6565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146140de57600080fd5b80151581146140de57600080fd5b60ff811681146140de57600080fdfea2646970667358221220f0fb604c599c6767c8885049243ae017aac39c8a469cfa0f8cd4c75e13fa7a9d64736f6c63430008020033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80639c6f302611610104578063d00a176e116100a2578063ebbc496511610071578063ebbc496514610491578063f4170ff114610499578063f65770ba146104d7578063fc3ef30f146104ea576101cf565b8063d00a176e14610450578063d480731c14610463578063dbffe9ad14610476578063e30c39781461047e576101cf565b8063b263e010116100de578063b263e010146103ed578063b646638414610400578063ba4433c01461042a578063c42069ec1461043d576101cf565b80639c6f3026146103a0578063a11b4528146103b3578063ad5c4648146103da576101cf565b806349d2e471116101715780635d6f9c141161014b5780635d6f9c14146103045780637c887c591461032c5780637e650a05146103575780638da5cb5b14610387576101cf565b806349d2e471146102805780634b8fc908146102ba5780634c0000dc146102f1576101cf565b8063422bb010116101ad578063422bb0101461022d57806345c48e0c1461024057806346b55e401461025a578063485cc9551461026d576101cf565b80631f491634146101d45780633c1d5df0146101fa5780633d325b7414610218575b600080fd5b6101e76101e236600461423d565b61051e565b6040519081526020015b60405180910390f35b61020361038481565b60405163ffffffff90911681526020016101f1565b61022b61022636600461427d565b61064c565b005b61022b61023b3660046141cd565b610ab5565b610248600a81565b60405160ff90911681526020016101f1565b6101e76102683660046141cd565b610b3c565b61022b61027b366004614205565b610c08565b61029361028e3660046142aa565b610d2e565b6040805163ffffffff909416845260069290920b60208401521515908201526060016101f1565b6102de6102c83660046141cd565b60086020526000908152604090205461ffff1681565b60405161ffff90911681526020016101f1565b6101e76102ff366004614309565b610d6f565b6103176103123660046141cd565b610fcc565b604080519283529015156020830152016101f1565b60035461033f906001600160a01b031681565b6040516001600160a01b0390911681526020016101f1565b61036a6103653660046142d5565b61104d565b6040805193845260208401929092521515908201526060016101f1565b60005461033f906201000090046001600160a01b031681565b6101e76103ae3660046141cd565b611360565b6103c66103c1366004614582565b6115ec565b60405162ffffff90911681526020016101f1565b60025461033f906001600160a01b031681565b6101e76103fb3660046141cd565b61161b565b61041361040e36600461423d565b61182b565b6040805192835260ff9091166020830152016101f1565b6103176104383660046142d5565b61193d565b61022b61044b3660046141cd565b611dd9565b61033f61045e366004614205565b611ee3565b6101e76104713660046142aa565b61208a565b6102de603c81565b60015461033f906001600160a01b031681565b61022b6123a5565b6104c76104a7366004614205565b600560209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101f1565b61022b6104e53660046141cd565b6124af565b61033f6104f8366004614205565b60066020908152600092835260408084209091529082529020546001600160a01b031681565b6001600160a01b03808416600090815260066020908152604080832086851684529091528120549091168061055a576105578585611ee3565b90505b6001600160a01b038116610572576000915050610645565b6000610580826103846127fa565b9050600061058d82612c33565b9050826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156105c857600080fd5b505afa1580156105dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060091906141e9565b6001600160a01b0316876001600160a01b0316141561062f576106288582600160601b612c53565b9350610641565b61063e85600160601b83612c53565b93505b5050505b9392505050565b6000546201000090046001600160a01b031633146106aa5760405162461bcd60e51b815260206004820152601660248201527527bbb730b136329d102922a8aaa4a922afa7aba722a960511b60448201526064015b60405180910390fd5b6001600160a01b03821660009081526007602052604081200154600160581b900460ff166107265760405162461bcd60e51b815260206004820152602360248201527f50726963654f7261636c652e7265736574547761703a20414d4d5f4e4f545f4960448201526213925560ea1b60648201526084016106a1565b6000826001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561076157600080fd5b505afa158015610775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061079991906141e9565b90506000836001600160a01b031663217a4b706040518163ffffffff1660e01b815260040160206040518083038186803b1580156107d657600080fd5b505afa1580156107ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080e91906141e9565b6001600160a01b03808416600081815260066020908152604080832094861680845294825280832080546001600160a01b031916905592825260058152828220938252929092529020805460ff191690559050826108ab5760006108728383611ee3565b90506001600160a01b03811661089a5760405162461bcd60e51b81526004016106a190614692565b6108a5838383612d02565b506109da565b6001600160a01b038083166000908152600660208181526040808420600280548716865290835281852080546001600160a01b031990811690915581548716865293835281852087871686529092528320805490921690915554909161091391859116611ee3565b90506001600160a01b03811661093b5760405162461bcd60e51b81526004016106a190614692565b6002546109539084906001600160a01b031683612d02565b600254610969906001600160a01b031683611ee3565b90506001600160a01b0381166109915760405162461bcd60e51b81526004016106a190614692565b6002546109a8906001600160a01b03168383612d02565b506001600160a01b038083166000908152600560209081526040808320938516835292905220805460ff191660011790555b6001600160a01b03841660009081526007602052604081206109fb916140ce565b6001600160a01b0384166000908152600860205260409020805461ffff19169055610a87425b6001600160a01b0386166000908152600760209081526040808320815160608101835263ffffffff90951680865292850193909352600193018390528154600160581b63ffffffff199091169091176bffffffffffffffff000000001916179055908190565b50506001600160a01b0384166000908152600760205260409020610aae906001603c612e51565b5050505050565b6000610ac082612f0d565b90506000610acd82612fbb565b6001600160a01b0384166000908152600860209081526040808320546007909252822092935061ffff1691610b0790834286603c806132f6565b506001600160a01b03959095166000908152600860205260409020805461ffff191661ffff9096169590951790945550505050565b600080610b4883611360565b90506000610b558461161b565b9050600082118015610b675750600081115b610bc95760405162461bcd60e51b815260206004820152602d60248201527f50726963654f7261636c652e6765745072656d69756d4672616374696f6e3a2060448201526c494e56414c49445f505249434560981b60648201526084016106a1565b8062015180610bd88285614b41565b610bea90670de0b6b3a76400006149e5565b610bf4919061483e565b610bfe919061483e565b925050505b919050565b600054610100900460ff1680610c21575060005460ff16155b610c845760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106a1565b600054610100900460ff16158015610caf576000805460ff1961ff0019909116610100171660011790555b600280546001600160a01b03199081166001600160a01b0386811691909117909255600380549091169184169190911790556004805462ffffff19166101f41765ffffff0000001916640bb80000001768ffffff00000000000019166727100000000000001790558015610d29576000805461ff00191690555b505050565b60076020528160005260406000208161ffff8110610d4b57600080fd5b015463ffffffff81169250600160201b810460060b9150600160581b900460ff1683565b6000806000866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610dad57600080fd5b505afa158015610dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de59190614482565b5090925090506001600160701b038116606486610e03896002614b18565b60ff16610e109190614af9565b610e1a91906148aa565b10610e7f5760405162461bcd60e51b815260206004820152602f60248201527f50726963654f7261636c652e6765744d61726b50726963654163633a20534c4960448201526e50504147455f544f4f5f4c4152474560881b60648201526084016106a1565b600080610e8e8988600061104d565b925050915080610f235760006064610ea960ff8b168a614af9565b610eb391906148aa565b905060008715610ed757610ed0826001600160701b038716614bf2565b9050610eed565b610eea826001600160701b0387166147e1565b90505b610ef78180614af9565b9050610f1a610f126001600160701b03808816908916614af9565b8a9083612c53565b96505050610fc0565b600082610f3889670de0b6b3a7640000614af9565b610f4291906148aa565b90506000610f7f60648a610f578d6002614b18565b60ff16610f649190614af9565b610f6e91906148aa565b83906001600160701b038816612c53565b905060008815610f9a57610f938284614bf2565b9050610fa7565b610fa482846147e1565b90505b610fba8a670de0b6b3a764000083612c53565b97505050505b50505050949350505050565b600080610fd883611360565b91506000610fe58461161b565b9050610ff3600a6064614819565b6110009060ff1682614af9565b61100b846064614af9565b10158061103a575061101f600a6064614c26565b61102c9060ff1682614af9565b611037846064614af9565b11155b1561104757809250600191505b50915091565b6000808084158061105c575083155b6110c35760405162461bcd60e51b815260206004820152603260248201527f50726963654f7261636c652e6765744d61726b5072696365496e526174696f3a6044820152712041545f4c454153545f4f4e455f5a45524f60701b60648201526084016106a1565b60006110ce87610fcc565b92509050816110e7576110e287878761193d565b925090505b6000876001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561112257600080fd5b505afa158015611136573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115a91906141e9565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561119257600080fd5b505afa1580156111a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ca91906145e7565b90506000886001600160a01b031663217a4b706040518163ffffffff1660e01b815260040160206040518083038186803b15801561120757600080fd5b505afa15801561121b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123f91906141e9565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561127757600080fd5b505afa15801561128b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112af91906145e7565b905060008260ff168260ff1611156112e7576112cb8383614c26565b6112d690600a614913565b6112e09085614af9565b9050611309565b6112f18284614c26565b6112fc90600a614913565b61130690856148aa565b90505b881561133357806113228a670de0b6b3a7640000614af9565b61132c91906148aa565b9650611353565b670de0b6b3a7640000611346828a614af9565b61135091906148aa565b95505b5050505093509350939050565b6000806000836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561139e57600080fd5b505afa1580156113b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d69190614482565b50915091506000846001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561141657600080fd5b505afa15801561142a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144e91906141e9565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561148657600080fd5b505afa15801561149a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114be91906145e7565b90506000856001600160a01b031663217a4b706040518163ffffffff1660e01b815260040160206040518083038186803b1580156114fb57600080fd5b505afa15801561150f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153391906141e9565b6001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561156b57600080fd5b505afa15801561157f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a391906145e7565b90506000816115b3846012614819565b6115bd9190614c26565b6115c890600a614913565b90506115e1816001600160701b03808716908816612c53565b979650505050505050565b600481600381106115fc57600080fd5b600a9182820401919006600302915054906101000a900462ffffff1681565b600080826001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561165757600080fd5b505afa15801561166b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168f91906141e9565b90506000836001600160a01b031663217a4b706040518163ffffffff1660e01b815260040160206040518083038186803b1580156116cc57600080fd5b505afa1580156116e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170491906141e9565b90506000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561174157600080fd5b505afa158015611755573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061177991906145e7565b60ff1690506000826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156117b957600080fd5b505afa1580156117cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f191906145e7565b60ff1690506000611808858561040e86600a614904565b509050611816826012614bf2565b61182190600a614904565b6115e19082614af9565b6001600160a01b038084166000908152600560209081526040808320938616835292905290812054819060ff166118ac5761186785858561051e565b9150816118a7576002546000906118899087906001600160a01b03168661051e565b6002549091506118a3906001600160a01b0316868361051e565b9250505b6118e5565b6002546000906118c79087906001600160a01b03168661051e565b6002549091506118e1906001600160a01b0316868361051e565b9250505b600082116119355760405162461bcd60e51b815260206004820152601e60248201527f50726963654f7261636c652e71756f74653a205a45524f5f414d4f554e54000060448201526064016106a1565b935093915050565b600080600080866001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561197c57600080fd5b505afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b49190614482565b50915091506000876001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b1580156119f457600080fd5b505afa158015611a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2c91906141e9565b90506000886001600160a01b031663217a4b706040518163ffffffff1660e01b815260040160206040518083038186803b158015611a6957600080fd5b505afa158015611a7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aa191906141e9565b90506000808915611b7657604051635e49b2bb60e11b81526001600160a01b0384811660048301528581166024830152604482018c905260006064830181905291908d169063bc93657690608401604080518083038186803b158015611b0657600080fd5b505afa158015611b1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3e919061441c565b6020810151909150611b59906001600160701b038916614bf2565b9250611b6e8b6001600160701b0388166147e1565b915050611c3c565b604051635e49b2bb60e11b81526001600160a01b0385811660048301528481166024830152604482018b905260006064830181905291908d169063bc93657690608401604080518083038186803b158015611bd057600080fd5b505afa158015611be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c08919061441c565b9050611c1d8a6001600160701b0389166147e1565b6020820151909350611c38906001600160701b038816614bf2565b9150505b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611c7757600080fd5b505afa158015611c8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611caf91906145e7565b90506000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611cec57600080fd5b505afa158015611d00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2491906145e7565b9050600081611d34846012614819565b611d3e9190614c26565b611d4990600a614913565b9050611d56818587612c53565b9a508d6000611d648261161b565b9050611d72600a6064614819565b611d7f9060ff1682614af9565b611d8a8e6064614af9565b101580611db95750611d9e600a6064614c26565b611dab9060ff1682614af9565b611db68e6064614af9565b11155b15611dc657809c5060019b505b5050505050505050505050935093915050565b6000546201000090046001600160a01b03163314611e325760405162461bcd60e51b815260206004820152601660248201527527bbb730b136329d102922a8aaa4a922afa7aba722a960511b60448201526064016106a1565b6001546001600160a01b0382811691161415611e875760405162461bcd60e51b815260206004820152601460248201527313dddb98589b194e881053149150511657d4d15560621b60448201526064016106a1565b6001546040516001600160a01b038084169216907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b600080808080805b600381101561207e57600380546001600160a01b031690631698ee82908a908a9060049086908110611f2d57634e487b7160e01b600052603260045260246000fd5b600a808204929092015460405160e087901b6001600160e01b03191681526001600160a01b039586166004820152939094166024840152066003026101000a90910462ffffff16604482015260640160206040518083038186803b158015611f9457600080fd5b505afa158015611fa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fcc91906141e9565b93506001600160a01b038416611fe15761206c565b836001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b15801561201a57600080fd5b505afa15801561202e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205291906144c4565b6001600160801b031691508282111561206c578192508394505b8061207681614c6b565b915050611eeb565b50929695505050505050565b60008061209684612f0d565b6001600160a01b0385166000908152600860209081526040808320546007909252822092935061ffff1691603c6120ce8460016147bb565b6120d89190614c86565b61ffff1661ffff81106120fb57634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff161515918101829052915061219a576001600160a01b03861660009081526007602052604081209060408051606081018252929091015463ffffffff81168352600160201b8104600690810b810b900b602084015260ff600160581b9091041615159082015290505b805142906000906121ab9083614c09565b905063ffffffff811615612319578761038463ffffffff83168111156121ce5750815b604080516002808252606082018352600092602083019080368337019050509050818160008151811061221157634e487b7160e01b600052603260045260246000fd5b602002602001019063ffffffff16908163ffffffff168152505060008160018151811061224e57634e487b7160e01b600052603260045260246000fd5b602002602001019063ffffffff16908163ffffffff1681525050600061229b86836122788c612fbb565b6001600160a01b03881660009081526007602052604090209291908c603c61346b565b90506123128363ffffffff16826000815181106122c857634e487b7160e01b600052603260045260246000fd5b6020026020010151836001815181106122f157634e487b7160e01b600052603260045260246000fd5b60200260200101516123039190614b80565b61230d919061486c565b61358c565b9850505050505b600061232486612c33565b90506123358882600160601b612c53565b9650600087116123995760405162461bcd60e51b815260206004820152602960248201527f50726963654f7261636c652e71756f746546726f6d416d6d547761703a205a456044820152681493d7d05353d5539560ba1b60648201526084016106a1565b50505050505092915050565b6001546001600160a01b031633146123ff5760405162461bcd60e51b815260206004820152601e60248201527f4f776e61626c653a20524551554952455f50454e44494e475f4f574e4552000060448201526064016106a1565b60008054600180546001600160a01b038181166201000081810262010000600160b01b03198716178088556001600160a01b031990941690945560405194849004821695909493909204169184917f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b236491a36001546040516001600160a01b03918216918316907fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b90600090a35050565b6001600160a01b03811660009081526007602052604081200154600160581b900460ff16156125315760405162461bcd60e51b815260206004820152602860248201527f50726963654f7261636c652e7365747570547761703a20414d4d5f414c524541604482015267044595f53455455560c41b60648201526084016106a1565b6000816001600160a01b031663c55dae636040518163ffffffff1660e01b815260040160206040518083038186803b15801561256c57600080fd5b505afa158015612580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a491906141e9565b90506000826001600160a01b031663217a4b706040518163ffffffff1660e01b815260040160206040518083038186803b1580156125e157600080fd5b505afa1580156125f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261991906141e9565b6001600160a01b0380841660009081526005602090815260408083209385168352929052205490915060ff16158061267657506001600160a01b038281166000908152600660209081526040808320858516845290915290205416155b6126d45760405162461bcd60e51b815260206004820152602960248201527f50726963654f7261636c652e7365747570547761703a20504149525f414c524560448201526804144595f53455455560bc1b60648201526084016106a1565b60006126e08383611ee3565b90506001600160a01b03811615612701576126fc838383612d02565b6109fb565b6002546127189084906001600160a01b0316611ee3565b90506001600160a01b0381166127405760405162461bcd60e51b81526004016106a19061464d565b6002546127589084906001600160a01b031683612d02565b60025461276e906001600160a01b031683611ee3565b90506001600160a01b0381166127965760405162461bcd60e51b81526004016106a19061464d565b6002546127ad906001600160a01b03168383612d02565b6001600160a01b03838116600090815260056020908152604080832086851684528252808320805460ff1916600117905592871682526008905220805461ffff19169055610a8742610a21565b60008263ffffffff831661288857806001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561284157600080fd5b505afa158015612855573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287991906144eb565b50949650612c2c945050505050565b600080826001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156128c457600080fd5b505afa1580156128d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128fc91906144eb565b505050935093505050600080846001600160a01b031663252c09d78486600161292591906147bb565b61292f9190614c86565b6040516001600160e01b031960e084901b16815261ffff909116600482015260240160806040518083038186803b15801561296957600080fd5b505afa15801561297d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a1919061459a565b93505050915080612a2b5760405163252c09d760e01b8152600060048201526001600160a01b0386169063252c09d79060240160806040518083038186803b1580156129ec57600080fd5b505afa158015612a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a24919061459a565b5091935050505b6000612a378342614c09565b905063ffffffff8116612ac457856001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015612a7d57600080fd5b505afa158015612a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab591906144eb565b50949b50612399945050505050565b8763ffffffff168163ffffffff161015612adc578097505b6040805160028082526060820183526000926020830190803683370190505090508881600081518110612b1f57634e487b7160e01b600052603260045260246000fd5b602002602001019063ffffffff16908163ffffffff1681525050600081600181518110612b5c57634e487b7160e01b600052603260045260246000fd5b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81526000906001600160a01b0389169063883bdbfd90612ba0908590600401614603565b60006040518083038186803b158015612bb857600080fd5b505afa158015612bcc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612bf4919081019061435b565b509050612c228a63ffffffff16826000815181106122c857634e487b7160e01b600052603260045260246000fd5b9850505050505050505b5092915050565b6000612c4d6001600160a01b03831680600160601b612c53565b92915050565b600080806000198587098587029250828110838203039150508060001415612c8d5760008411612c8257600080fd5b508290049050610645565b808411612c9957600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b038381166000908152600660209081526040808320868516845290915290205416610d29576001600160a01b038381166000908152600660209081526040808320868516845290915280822080546001600160a01b03191693851693841790558051633850c7bd60e01b81529051849391633850c7bd9160048083019260e0929190829003018186803b158015612d9f57600080fd5b505afa158015612db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd791906144eb565b5050945050505050603c61ffff168161ffff161015610aae576040516332148f6760e01b8152603c60048201526001600160a01b038416906332148f6790602401600060405180830381600087803b158015612e3257600080fd5b505af1158015612e46573d6000803e3d6000fd5b505050505050505050565b6000808361ffff1611612e8a5760405162461bcd60e51b81526020600482015260016024820152604960f81b60448201526064016106a1565b8261ffff168261ffff1611612ea0575081610645565b825b8261ffff168161ffff161015612f04576001858261ffff1661ffff8110612ed957634e487b7160e01b600052603260045260246000fd5b01805463ffffffff191663ffffffff9290921691909117905580612efc81614c49565b915050612ea2565b50909392505050565b6000806000836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015612f4b57600080fd5b505afa158015612f5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f839190614482565b5090925090506000612fa76001600160701b0380841690600160c01b908616612c53565b9050612fb2816139a0565b95945050505050565b60006401000276a36001600160a01b03831610801590612ff7575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b6130275760405162461bcd60e51b81526020600482015260016024820152602960f91b60448201526064016106a1565b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106130c2576130b8607f82614bf2565b83901c91506130d3565b6130cd81607f614bf2565b83901b91505b600060406130e2608084614b41565b901b9050828302607f1c92508260801c80603f1b8217915083811c935050828302607f1c92508260801c80603e1b8217915083811c935050828302607f1c92508260801c80603d1b8217915083811c935050828302607f1c92508260801c80603c1b8217915083811c935050828302607f1c92508260801c80603b1b8217915083811c935050828302607f1c92508260801c80603a1b8217915083811c935050828302607f1c92508260801c8060391b8217915083811c935050828302607f1c92508260801c8060381b8217915083811c935050828302607f1c92508260801c8060371b8217915083811c935050828302607f1c92508260801c8060361b8217915083811c935050828302607f1c92508260801c8060351b8217915083811c935050828302607f1c92508260801c8060341b8217915083811c935050828302607f1c92508260801c8060331b8217915083811c935050828302607f1c92508260801c8060321b8217915050600081693627a301d71055774c8561326591906149e5565b9050600060806132856f028f6481ab7f045a5af012a19d003aaa84614b41565b901d9050600060806132a7846fdb2df09e81959a81455e260799a0632f61472c565b901d90508060020b8260020b146132e757886001600160a01b03166132cb8261358c565b6001600160a01b031611156132e057816132e2565b805b6132e9565b815b9998505050505050505050565b6000806000888861ffff1661ffff811061332057634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b90920460ff16151593830193909352909250908816141561337b5787859250925050613460565b8461ffff168461ffff161180156133a35750613398600186614bcf565b61ffff168861ffff16145b156133b0578391506133b4565b8491505b816133c08960016147bb565b6133ca9190614c86565b92506133d7818888613a0f565b898461ffff1661ffff81106133fc57634e487b7160e01b600052603260045260246000fd5b82519101805460208401516040909401511515600160581b0260ff60581b1960069590950b66ffffffffffffff16600160201b026affffffffffffff000000001963ffffffff90951663ffffffff1990931692909217939093161792909216179055505b965096945050505050565b606060008261ffff16116134a55760405162461bcd60e51b81526020600482015260016024820152604960f81b60448201526064016106a1565b845167ffffffffffffffff8111156134cd57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156134f6578160200160208202803683370190505b50905060005b85518110156135815761353a888888848151811061352a57634e487b7160e01b600052603260045260246000fd5b6020026020010151888888613a8b565b82828151811061355a57634e487b7160e01b600052603260045260246000fd5b602002602001019060060b908160060b81525050808061357990614c6b565b9150506134fc565b509695505050505050565b60008060008360020b126135a3578260020b6135b0565b8260020b6135b090614cdc565b90506135bf620d89e719614cbb565b60020b8111156135f55760405162461bcd60e51b81526020600482015260016024820152601560fa1b60448201526064016106a1565b60006001821661360957600160801b61361b565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561365a576080613655826ffff97272373d413259a46990580e213a614af9565b901c90505b600482161561368457608061367f826ffff2e50f5f656932ef12357cf3c7fdcc614af9565b901c90505b60088216156136ae5760806136a9826fffe5caca7e10e4e61c3624eaa0941cd0614af9565b901c90505b60108216156136d85760806136d3826fffcb9843d60f6159c9db58835c926644614af9565b901c90505b60208216156137025760806136fd826fff973b41fa98c081472e6896dfb254c0614af9565b901c90505b604082161561372c576080613727826fff2ea16466c96a3843ec78b326b52861614af9565b901c90505b6080821615613756576080613751826ffe5dee046a99a2a811c461f1969c3053614af9565b901c90505b61010082161561378157608061377c826ffcbe86c7900a88aedcffc83b479aa3a4614af9565b901c90505b6102008216156137ac5760806137a7826ff987a7253ac413176f2b074cf7815e54614af9565b901c90505b6104008216156137d75760806137d2826ff3392b0822b70005940c7a398e4b70f3614af9565b901c90505b6108008216156138025760806137fd826fe7159475a2c29b7443b29c7fa6e889d9614af9565b901c90505b61100082161561382d576080613828826fd097f3bdfd2022b8845ad8f792aa5825614af9565b901c90505b612000821615613858576080613853826fa9f746462d870fdf8a65dc1f90e061e5614af9565b901c90505b61400082161561388357608061387e826f70d869a156d2a1b890bb3df62baf32f7614af9565b901c90505b6180008216156138ae5760806138a9826f31be135f97d08fd981231505542fcfa6614af9565b901c90505b620100008216156138da5760806138d5826f09aa508b5b7a84e1c677de54f3e99bc9614af9565b901c90505b62020000821615613905576080613900826e5d6af8dedb81196699c329225ee604614af9565b901c90505b6204000082161561392f57608061392a826d2216e584f5fa1ea926041bedfe98614af9565b901c90505b62080000821615613957576080613952826b048a170391f7dc42444e8fa2614af9565b901c90505b60008460020b13156139725761396f816000196148aa565b90505b613980600160201b82614ca7565b1561398c57600161398f565b60005b610bfe9060ff16602083901c6147e1565b60006003821115613a0157508060006139ba6002836148aa565b6139c59060016147e1565b90505b818110156139fb579050806002816139e081866148aa565b6139ea91906147e1565b6139f491906148aa565b90506139c8565b50610c03565b8115610c0357506001919050565b60408051606081018252600080825260208201819052918101919091528351600090613a3b9085614c09565b905060405180606001604052808563ffffffff1681526020018260030b8560020b613a669190614a68565b8760200151613a75919061476d565b60060b8152600160209091015295945050505050565b600063ffffffff8516613b26576000878461ffff1661ffff8110613abf57634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff808216808452600160201b8304600690810b810b900b6020850152600160581b90920460ff1615159383019390935290925090881614613b1b57613b18818887613a0f565b90505b602001519050613bfa565b6000613b328688614c09565b9050600080613b458a8a858a8a8a613c04565b91509150816000015163ffffffff168363ffffffff161415613b6f5750602001519150613bfa9050565b805163ffffffff84811691161415613b8f57602001519250613bfa915050565b81518151600091613b9f91614c09565b8351909150600090613bb19086614c09565b90508060030b8260030b85602001518560200151613bcf9190614b80565b613bd9919061486c565b613be39190614a68565b8460200151613bf2919061476d565b955050505050505b9695505050505050565b60408051606081018252600080825260208201819052918101919091526040805160608101825260008082526020820181905291810191909152878461ffff1661ffff8110613c6357634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff8116808352600160201b8204600690810b810b900b6020840152600160581b90910460ff161515928201929092529250613cb390889088613e06565b15613cea578563ffffffff16826000015163ffffffff161415613cd557613460565b81613ce1838888613a0f565b91509150613460565b8783613cf78660016147bb565b613d019190614c86565b61ffff1661ffff8110613d2457634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff1615159181018290529250613da95760408051606081018252895463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff1615159181019190915291505b613db887836000015188613e06565b613dea5760405162461bcd60e51b815260206004820152600360248201526213d31160ea1b60448201526064016106a1565b613df78888888787613ed5565b91509150965096945050505050565b60008363ffffffff168363ffffffff1611158015613e3057508363ffffffff168263ffffffff1611155b15613e4c578163ffffffff168363ffffffff1611159050610645565b60008463ffffffff168463ffffffff1611613e7a57613e7563ffffffff8516600160201b6147f9565b613e82565b8363ffffffff165b64ffffffffff16905060008563ffffffff168463ffffffff1611613eb957613eb463ffffffff8516600160201b6147f9565b613ec1565b8363ffffffff165b64ffffffffff169091111595945050505050565b604080516060808201835260008083526020808401829052838501829052845192830185528183528201819052928101839052909183613f168660016147bb565b613f209190614c86565b61ffff169050600060018561ffff1683613f3a91906147e1565b613f449190614bf2565b905060005b6002613f5583856147e1565b613f5f91906148aa565b905089613f7061ffff881683614ca7565b61ffff8110613f8f57634e487b7160e01b600052603260045260246000fd5b60408051606081018252919092015463ffffffff81168252600160201b8104600690810b810b900b6020830152600160581b900460ff1615159181018290529550613fe657613fdf8160016147e1565b9250613f49565b8961ffff8716613ff78360016147e1565b6140019190614ca7565b61ffff811061402057634e487b7160e01b600052603260045260246000fd5b60408051606081018252929091015463ffffffff81168352600160201b8104600690810b810b900b602084015260ff600160581b909104161515908201528551909450600090614072908b908b613e06565b905080801561408b575061408b8a8a8760000151613e06565b1561409657506140c1565b806140ad576140a6600183614bf2565b92506140bb565b6140b88260016147e1565b93505b50613f49565b5050509550959350505050565b506140de9061ffff8101906140e1565b50565b5b808211156141055780546bffffffffffffffffffffffff191681556001016140e2565b5090565b600082601f830112614119578081fd5b8151602061412e61412983614708565b6146d7565b828152818101908583018385028701840188101561414a578586fd5b855b8581101561417157815161415f81614d38565b8452928401929084019060010161414c565b5090979650505050505050565b8051600681900b8114610c0357600080fd5b80516001600160701b0381168114610c0357600080fd5b805161ffff81168114610c0357600080fd5b805163ffffffff81168114610c0357600080fd5b6000602082840312156141de578081fd5b813561064581614d38565b6000602082840312156141fa578081fd5b815161064581614d38565b60008060408385031215614217578081fd5b823561422281614d38565b9150602083013561423281614d38565b809150509250929050565b600080600060608486031215614251578081fd5b833561425c81614d38565b9250602084013561426c81614d38565b929592945050506040919091013590565b6000806040838503121561428f578182fd5b823561429a81614d38565b9150602083013561423281614d4d565b600080604083850312156142bc578182fd5b82356142c781614d38565b946020939093013593505050565b6000806000606084860312156142e9578081fd5b83356142f481614d38565b95602085013595506040909401359392505050565b6000806000806080858703121561431e578182fd5b843561432981614d38565b9350602085013561433981614d5b565b925060408501359150606085013561435081614d4d565b939692955090935050565b6000806040838503121561436d578182fd5b825167ffffffffffffffff80821115614384578384fd5b818501915085601f830112614397578384fd5b815160206143a761412983614708565b82815281810190858301838502870184018b10156143c3578889fd5b8896505b848710156143ec576143d88161417e565b8352600196909601959183019183016143c7565b5091880151919650909350505080821115614405578283fd5b5061441285828601614109565b9150509250929050565b60006040828403121561442d578081fd5b82601f83011261443b578081fd5b61444560406146d7565b808385604086011115614456578384fd5b835b6002811015614477578151845260209384019390910190600101614458565b509095945050505050565b600080600060608486031215614496578081fd5b61449f84614190565b92506144ad60208501614190565b91506144bb604085016141b9565b90509250925092565b6000602082840312156144d5578081fd5b81516001600160801b0381168114610645578182fd5b600080600080600080600060e0888a031215614505578485fd5b875161451081614d38565b8097505060208801518060020b8114614527578586fd5b9550614535604089016141a7565b9450614543606089016141a7565b9350614551608089016141a7565b925060a088015161456181614d5b565b60c089015190925061457281614d4d565b8091505092959891949750929550565b600060208284031215614593578081fd5b5035919050565b600080600080608085870312156145af578182fd5b6145b8856141b9565b93506145c66020860161417e565b925060408501516145d681614d38565b606086015190925061435081614d4d565b6000602082840312156145f8578081fd5b815161064581614d5b565b6020808252825182820181905260009190848201906040850190845b8181101561464157835163ffffffff168352928401929184019160010161461f565b50909695505050505050565b60208082526025908201527f50726963654f7261636c652e7365747570547761703a20504f4f4c5f4e4f545f6040820152641193d5539160da1b606082015260800190565b60208082526025908201527f50726963654f7261636c652e7265736574547761703a20504f4f4c5f4e4f545f6040820152641193d5539160da1b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff8111828210171561470057614700614d22565b604052919050565b600067ffffffffffffffff82111561472257614722614d22565b5060209081020190565b600080821280156001600160ff1b038490038513161561474e5761474e614cf6565b600160ff1b839003841281161561476757614767614cf6565b50500190565b60008160060b8360060b82821282667fffffffffffff0382138115161561479657614796614cf6565b82667fffffffffffff190382128116156147b2576147b2614cf6565b50019392505050565b600061ffff8083168185168083038211156147d8576147d8614cf6565b01949350505050565b600082198211156147f4576147f4614cf6565b500190565b600064ffffffffff8083168185168083038211156147d8576147d8614cf6565b600060ff821660ff84168060ff0382111561483657614836614cf6565b019392505050565b60008261484d5761484d614d0c565b600160ff1b82146000198414161561486757614867614cf6565b500590565b60008160060b8360060b8061488357614883614d0c565b667fffffffffffff198214600019821416156148a1576148a1614cf6565b90059392505050565b6000826148b9576148b9614d0c565b500490565b80825b60018086116148d057506148fb565b8187048211156148e2576148e2614cf6565b808616156148ef57918102915b9490941c9380026148c1565b94509492505050565b60006106456000198484614921565b600061064560001960ff8516845b60008261493057506001610645565b8161493d57506000610645565b8160018114614953576002811461495d5761498a565b6001915050610645565b60ff84111561496e5761496e614cf6565b6001841b91508482111561498457614984614cf6565b50610645565b5060208310610133831016604e8410600b84101617156149bd575081810a838111156149b8576149b8614cf6565b610645565b6149ca84848460016148be565b8086048211156149dc576149dc614cf6565b02949350505050565b60006001600160ff1b0381841382841380821686840486111615614a0b57614a0b614cf6565b600160ff1b84871282811687830589121615614a2957614a29614cf6565b858712925087820587128484161615614a4457614a44614cf6565b87850587128184161615614a5a57614a5a614cf6565b505050929093029392505050565b60008160060b8360060b667fffffffffffff83821384841383830485118282161615614a9657614a96614cf6565b667fffffffffffff1986851282811687830587121615614ab857614ab8614cf6565b878712925085820587128484161615614ad357614ad3614cf6565b85850587128184161615614ae957614ae9614cf6565b5050509290910295945050505050565b6000816000190483118215151615614b1357614b13614cf6565b500290565b600060ff821660ff84168160ff0481118215151615614b3957614b39614cf6565b029392505050565b60008083128015600160ff1b850184121615614b5f57614b5f614cf6565b6001600160ff1b0384018313811615614b7a57614b7a614cf6565b50500390565b60008160060b8360060b82811281667fffffffffffff1901831281151615614baa57614baa614cf6565b81667fffffffffffff018313811615614bc557614bc5614cf6565b5090039392505050565b600061ffff83811690831681811015614bea57614bea614cf6565b039392505050565b600082821015614c0457614c04614cf6565b500390565b600063ffffffff83811690831681811015614bea57614bea614cf6565b600060ff821660ff841680821015614c4057614c40614cf6565b90039392505050565b600061ffff80831681811415614c6157614c61614cf6565b6001019392505050565b6000600019821415614c7f57614c7f614cf6565b5060010190565b600061ffff80841680614c9b57614c9b614d0c565b92169190910692915050565b600082614cb657614cb6614d0c565b500690565b60008160020b627fffff19811415614cd557614cd5614cf6565b9003919050565b6000600160ff1b821415614cf257614cf2614cf6565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146140de57600080fd5b80151581146140de57600080fd5b60ff811681146140de57600080fdfea2646970667358221220f0fb604c599c6767c8885049243ae017aac39c8a469cfa0f8cd4c75e13fa7a9d64736f6c63430008020033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
