{
  "_format": "hh-sol-artifact-1",
  "contractName": "ResilientOracle",
  "sourceName": "contracts/ResilientOracle.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "nativeMarketAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "vaiAddress",
          "type": "address"
        },
        {
          "internalType": "contract BoundValidatorInterface",
          "name": "_boundValidator",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "calledContract",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "methodSignature",
          "type": "string"
        }
      ],
      "name": "Unauthorized",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "enabled",
          "type": "bool"
        }
      ],
      "name": "CachedEnabled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldAccessControlManager",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAccessControlManager",
          "type": "address"
        }
      ],
      "name": "NewAccessControlManager",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "role",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "bool",
          "name": "enable",
          "type": "bool"
        }
      ],
      "name": "OracleEnabled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "oracle",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "role",
          "type": "uint256"
        }
      ],
      "name": "OracleSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "mainOracle",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "pivotOracle",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "fallbackOracle",
          "type": "address"
        }
      ],
      "name": "TokenConfigAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "CACHE_SLOT",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "INVALID_PRICE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "NATIVE_TOKEN_ADDR",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "accessControlManager",
      "outputs": [
        {
          "internalType": "contract IAccessControlManagerV8",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "boundValidator",
      "outputs": [
        {
          "internalType": "contract BoundValidatorInterface",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "enum ResilientOracle.OracleRole",
          "name": "role",
          "type": "uint8"
        },
        {
          "internalType": "bool",
          "name": "enable",
          "type": "bool"
        }
      ],
      "name": "enableOracle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "enum ResilientOracle.OracleRole",
          "name": "role",
          "type": "uint8"
        }
      ],
      "name": "getOracle",
      "outputs": [
        {
          "internalType": "address",
          "name": "oracle",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "enabled",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        }
      ],
      "name": "getPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        }
      ],
      "name": "getTokenConfig",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address[3]",
              "name": "oracles",
              "type": "address[3]"
            },
            {
              "internalType": "bool[3]",
              "name": "enableFlagsForOracles",
              "type": "bool[3]"
            },
            {
              "internalType": "bool",
              "name": "cachingEnabled",
              "type": "bool"
            }
          ],
          "internalType": "struct ResilientOracle.TokenConfig",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "vToken",
          "type": "address"
        }
      ],
      "name": "getUnderlyingPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "accessControlManager_",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nativeMarket",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "accessControlManager_",
          "type": "address"
        }
      ],
      "name": "setAccessControlManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "oracle",
          "type": "address"
        },
        {
          "internalType": "enum ResilientOracle.OracleRole",
          "name": "role",
          "type": "uint8"
        }
      ],
      "name": "setOracle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address[3]",
              "name": "oracles",
              "type": "address[3]"
            },
            {
              "internalType": "bool[3]",
              "name": "enableFlagsForOracles",
              "type": "bool[3]"
            },
            {
              "internalType": "bool",
              "name": "cachingEnabled",
              "type": "bool"
            }
          ],
          "internalType": "struct ResilientOracle.TokenConfig",
          "name": "tokenConfig",
          "type": "tuple"
        }
      ],
      "name": "setTokenConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "asset",
              "type": "address"
            },
            {
              "internalType": "address[3]",
              "name": "oracles",
              "type": "address[3]"
            },
            {
              "internalType": "bool[3]",
              "name": "enableFlagsForOracles",
              "type": "bool[3]"
            },
            {
              "internalType": "bool",
              "name": "cachingEnabled",
              "type": "bool"
            }
          ],
          "internalType": "struct ResilientOracle.TokenConfig[]",
          "name": "tokenConfigs_",
          "type": "tuple[]"
        }
      ],
      "name": "setTokenConfigs",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "asset",
          "type": "address"
        }
      ],
      "name": "updateAssetPrice",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "vToken",
          "type": "address"
        }
      ],
      "name": "updatePrice",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "vai",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60e060405234801561000f575f80fd5b506040516126de3803806126de83398101604081905261002e91610154565b806001600160a01b03811661005e5760405162461bcd60e51b8152600401610055906101a0565b60405180910390fd5b6001600160a01b0380851660805283811660a052821660c05261007f610088565b50505050610235565b5f54610100900460ff16156100af5760405162461bcd60e51b8152600401610055906101db565b5f5460ff90811614610101575f805460ff191660ff9081179091556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498916100f891610226565b60405180910390a15b565b5f6001600160a01b0382165b92915050565b61011e81610103565b8114610128575f80fd5b50565b805161010f81610115565b5f61010f82610103565b61011e81610136565b805161010f81610140565b5f805f60608486031215610169576101695f80fd5b5f610174868661012b565b93505060206101858682870161012b565b925050604061019686828701610149565b9150509250925092565b6020808252810161010f81601581527f63616e2774206265207a65726f20616464726573730000000000000000000000602082015260400190565b6020808252810161010f81602781527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469602082015266616c697a696e6760c81b604082015260600190565b60ff821681526020810161010f565b60805160a05160c0516124556102895f395f81816101bf01528181610ff5015281816114b1015261161401525f818161035a0152818161116d01526111a601525f818161027c015261111801526124555ff3fe608060405234801561000f575f80fd5b50600436106101a1575f3560e01c80638da5cb5b116100f3578063b62e4c9211610093578063e30c39781161006e578063e30c3978146103af578063e9d1284f146103c0578063f2fde38b146103d4578063fc57d4df146103e7575f80fd5b8063b62e4c9214610355578063c4d66de81461037c578063cb67e3b11461038f575f80fd5b8063a8e68463116100ce578063a8e6846314610303578063a9534f8a14610316578063b4a0bdf314610331578063b62cad6914610342575f80fd5b80638da5cb5b146102cc57806396e85ced146102dd578063a6b1344a146102f0575f80fd5b80635c975abb1161015e5780638456cb59116101395780638456cb591461025c578063883cfb91146102645780638a2f7f6d146102775780638b855da4146102ab575f80fd5b80635c975abb14610239578063715018a61461024c57806379ba509714610254575f80fd5b80630e32cb86146101a557806333d33494146101ba5780633f4ba83a146101f757806341976e09146101ff5780634b932b8f1461021f5780634bf39cba14610232575b5f80fd5b6101b86101b3366004611983565b6103fa565b005b6101e17f000000000000000000000000000000000000000000000000000000000000000081565b6040516101ee91906119cc565b60405180910390f35b6101b861040e565b61021261020d366004611983565b610442565b6040516101ee91906119e0565b6101b861022d366004611a18565b610484565b6102125f81565b60335460ff166040516101ee9190611a6c565b6101b86105cd565b6101b86105de565b6101b8610613565b6101b8610272366004611cdd565b610643565b61029e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101ee9190611d1e565b6102be6102b9366004611d2c565b61069e565b6040516101ee929190611d66565b6065546001600160a01b031661029e565b6101b86102eb366004611983565b61073e565b6101b86102fe366004611d81565b610757565b6101b8610311366004611dc3565b6108ee565b61029e73bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb81565b60c9546001600160a01b03166101e1565b6101b8610350366004611983565b610a9e565b61029e7f000000000000000000000000000000000000000000000000000000000000000081565b6101b861038a366004611983565b610aa7565b6103a261039d366004611983565b610b79565b6040516101ee9190611ea9565b6097546001600160a01b031661029e565b6102125f8051602061240083398151915281565b6101b86103e2366004611983565b610c5a565b6102126103f5366004611983565b610ccb565b610402610d11565b61040b81610d3b565b50565b61043860405180604001604052806009815260200168756e7061757365282960b81b815250610db4565b610440610e4b565b565b5f61044f60335460ff1690565b156104755760405162461bcd60e51b815260040161046c90611eee565b60405180910390fd5b61047e82610e97565b92915050565b826001600160a01b0381166104ab5760405162461bcd60e51b815260040161046c90611f29565b6001600160a01b038085165f90815260fb60205260409020548591166104e35760405162461bcd60e51b815260040161046c90611f6c565b6105216040518060400160405280602081526020017f656e61626c654f7261636c6528616464726573732c75696e74382c626f6f6c29815250610db4565b6001600160a01b0385165f90815260fb60205260409020839060040185600281111561054f5761054f611f7c565b6003811061055f5761055f611f90565b602091828204019190066101000a81548160ff02191690831515021790555082151584600281111561059357610593611f7c565b6040516001600160a01b038816907fcf3cad1ec87208efbde5d82a0557484a78d4182c3ad16926a5463bc1f7234b3d905f90a45050505050565b6105d5610d11565b6104405f611098565b60975433906001600160a01b0316811461060a5760405162461bcd60e51b815260040161046c90611fec565b61040b81611098565b61063b604051806040016040528060078152602001667061757365282960c81b815250610db4565b6104406110b1565b80515f036106635760405162461bcd60e51b815260040161046c90612023565b80515f5b818110156106995761069183828151811061068457610684611f90565b60200260200101516108ee565b600101610667565b505050565b6001600160a01b0382165f90815260fb6020526040812081906001018360028111156106cc576106cc611f7c565b600381106106dc576106dc611f90565b01546001600160a01b038581165f90815260fb602052604090209116925060040183600281111561070f5761070f611f7c565b6003811061071f5761071f611f90565b602091828204019190069054906101000a900460ff1690509250929050565b5f610748826110ee565b905061075381611232565b5050565b826001600160a01b03811661077e5760405162461bcd60e51b815260040161046c90611f29565b6001600160a01b038085165f90815260fb60205260409020548591166107b65760405162461bcd60e51b815260040161046c90611f6c565b6107f46040518060400160405280602081526020017f7365744f7261636c6528616464726573732c616464726573732c75696e743829815250610db4565b6001600160a01b03841615801561081b57505f83600281111561081957610819611f7c565b145b156108385760405162461bcd60e51b815260040161046c90612074565b6001600160a01b0385165f90815260fb60205260409020849060010184600281111561086657610866611f7c565b6003811061087657610876611f90565b0180546001600160a01b0319166001600160a01b03929092169190911790558260028111156108a7576108a7611f7c565b846001600160a01b0316866001600160a01b03167fea681d3efb830ef032a9c29a7215b5ceeeb546250d2c463dbf87817aecda1bf160405160405180910390a45050505050565b80516001600160a01b0381166109165760405162461bcd60e51b815260040161046c90611f29565b6020820151516001600160a01b0381166109425760405162461bcd60e51b815260040161046c90611f29565b6109806040518060400160405280601b81526020017f736574546f6b656e436f6e66696728546f6b656e436f6e666967290000000000815250610db4565b82516001600160a01b039081165f90815260fb60209081526040909120855181546001600160a01b03191693169290921782558401518491906109c99060018301906003611806565b5060408201516109df906004830190600361185e565b50606091909101516005909101805460ff191691151591909117905560208381015190810151815185516001600160a01b03928316939183169216907fa51ad01e2270c314a7b78f0c60fe66c723f2d06c121d63fcdce776e654878fc19060026020020151604051610a519190611d1e565b60405180910390a482606001511515835f01516001600160a01b03167fca250c5374abedcbf71c0e3eda7ff4cf940fa9e6561d8cd31d2bf480a140a93f60405160405180910390a3505050565b61040b81611232565b5f54610100900460ff1615808015610ac557505f54600160ff909116105b80610ade5750303b158015610ade57505f5460ff166001145b610afa5760405162461bcd60e51b815260040161046c906120ce565b5f805460ff191660011790558015610b1b575f805461ff0019166101001790555b610b2482611314565b610b2c61134b565b8015610753575f805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890610b6d906001906120f1565b60405180910390a15050565b610b816118e8565b6001600160a01b038281165f90815260fb602090815260409182902082516080810184528154909416845282516060810193849052909291840191600184019060039082845b81546001600160a01b03168152600190910190602001808311610bc7575050509183525050604080516060810191829052602090920191906004840190600390825f855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411610c0b575050509284525050506005919091015460ff16151560209091015292915050565b610c62610d11565b609780546001600160a01b0383166001600160a01b03199091168117909155610c936065546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f610cd860335460ff1690565b15610cf55760405162461bcd60e51b815260040161046c90611eee565b5f610cff836110ee565b9050610d0a81610e97565b9392505050565b6065546001600160a01b031633146104405760405162461bcd60e51b815260040161046c90612130565b6001600160a01b038116610d615760405162461bcd60e51b815260040161046c90612181565b60c980546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa090610b6d9083908590612191565b60c9546040516318c5e8ab60e01b81525f916001600160a01b0316906318c5e8ab90610de690339086906004016121e8565b602060405180830381865afa158015610e01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e259190612213565b90508061075357333083604051634a3fa29360e01b815260040161046c93929190612231565b610e53611379565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051610e8d9190611d1e565b60405180910390a1565b5f8080610eb15f805160206124008339815191528561139b565b90508015610ec0579392505050565b5f80610ecd86600161069e565b91509150808015610ee657506001600160a01b03821615155b15610f58576040516341976e0960e01b81526001600160a01b038316906341976e0990610f17908990600401611d1e565b602060405180830381865afa925050508015610f50575060408051601f3d908101601f19168201909252610f4d91810190612278565b60015b15610f585793505b5f80610f798887858015610f7457506001600160a01b03871615155b6113d1565b915091505f8214158015610f8a5750805b15610f9a57509695505050505050565b5f80610fa68a89611546565b915091505f8214158015610fb75750805b15610fc9575098975050505050505050565b8315801590610fd757508115155b801561106d5750604051634be3819f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906397c7033e9061102e908d9088908790600401612296565b602060405180830381865afa158015611049573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061106d9190612213565b1561108057509198975050505050505050565b60405162461bcd60e51b815260040161046c906122f1565b609780546001600160a01b031916905561040b816116a8565b6110b96116f9565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e803390565b5f816001600160a01b0381166111165760405162461bcd60e51b815260040161046c90611f29565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361116b5773bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb915061122c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036111cc577f0000000000000000000000000000000000000000000000000000000000000000915061122c565b826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611208573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0a919061230c565b50919050565b6112495f805160206124008339815191528261139b565b156112515750565b5f8061125d835f61069e565b90925090506001600160a01b038216158015906112775750805b156112c757816001600160a01b031663692404266040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156112b4575f80fd5b505af19250505080156112c5575060015b505b6001600160a01b0383165f90815260fb602052604090206005015460ff1615610699575f6112f484610e97565b905061130e5f80516020612400833981519152858361171c565b50505050565b5f54610100900460ff1661133a5760405162461bcd60e51b815260040161046c90612371565b611342611751565b61040b8161177f565b5f54610100900460ff166113715760405162461bcd60e51b815260040161046c90612371565b6104406117a5565b60335460ff166104405760405162461bcd60e51b815260040161046c906123ab565b5f8083836040516020016113b09291906123bb565b60408051601f1981840301815291905280516020909101205c949350505050565b5f805f806113df875f61069e565b915091508080156113f857506001600160a01b03821615155b15611535576040516341976e0960e01b81526001600160a01b038316906341976e0990611429908a90600401611d1e565b602060405180830381865afa925050508015611462575060408051601f3d908101601f1916820190925261145f91810190612278565b60015b611473575f8093509350505061153e565b856114865793506001925061153e915050565b866114985793505f925061153e915050565b604051634be3819f60e11b815281906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906397c7033e906114ea908c9085908d90600401612296565b602060405180830381865afa158015611505573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115299190612213565b9450945050505061153e565b5f809350935050505b935093915050565b5f805f8061155586600261069e565b9150915080801561156e57506001600160a01b03821615155b15611698576040516341976e0960e01b81526001600160a01b038316906341976e099061159f908990600401611d1e565b602060405180830381865afa9250505080156115d8575060408051601f3d908101601f191682019092526115d591810190612278565b60015b6115e9575f809350935050506116a1565b856115fb5793505f92506116a1915050565b604051634be3819f60e11b815281906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906397c7033e9061164d908b9085908c90600401612296565b602060405180830381865afa158015611668573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061168c9190612213565b945094505050506116a1565b5f809350935050505b9250929050565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60335460ff16156104405760405162461bcd60e51b815260040161046c906123ef565b5f83836040516020016117309291906123bb565b60405160208183030381529060405280519060200120905081815d50505050565b5f54610100900460ff166117775760405162461bcd60e51b815260040161046c90612371565b6104406117d7565b5f54610100900460ff166104025760405162461bcd60e51b815260040161046c90612371565b5f54610100900460ff166117cb5760405162461bcd60e51b815260040161046c90612371565b6033805460ff19169055565b5f54610100900460ff166117fd5760405162461bcd60e51b815260040161046c90612371565b61044033611098565b826003810192821561184e579160200282015b8281111561184e57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611819565b5061185a929150611923565b5090565b60018301918390821561184e579160200282015f5b838211156118af57835183826101000a81548160ff02191690831515021790555092602001926001016020815f01049283019260010302611873565b80156118db5782816101000a81549060ff02191690556001016020815f010492830192600103026118af565b505061185a929150611923565b60405180608001604052805f6001600160a01b0316815260200161190a611937565b8152602001611917611937565b81525f60209091015290565b5b8082111561185a575f8155600101611924565b60405180606001604052806003906020820280368337509192915050565b5f6001600160a01b03821661047e565b61196e81611955565b811461040b575f80fd5b803561047e81611965565b5f60208284031215611996576119965f80fd5b5f6119a18484611978565b949350505050565b5f61047e82611955565b5f61047e826119a9565b6119c6816119b3565b82525050565b6020810161047e82846119bd565b806119c6565b6020810161047e82846119da565b6003811061040b575f80fd5b803561047e816119ee565b80151561196e565b803561047e81611a05565b5f805f60608486031215611a2d57611a2d5f80fd5b5f611a388686611978565b9350506020611a49868287016119fa565b9250506040611a5a86828701611a0d565b9150509250925092565b8015156119c6565b6020810161047e8284611a64565b634e487b7160e01b5f52604160045260245ffd5b601f19601f830116810181811067ffffffffffffffff82111715611ab457611ab4611a7a565b6040525050565b5f611ac560405190565b9050611ad18282611a8e565b919050565b5f67ffffffffffffffff821115611aef57611aef611a7a565b5060209081020190565b5f67ffffffffffffffff821115611b1257611b12611a7a565b5060200290565b5f611b2b611b2684611af9565b611abb565b90508060208402830185811115611b4357611b435f80fd5b835b81811015611b675780611b588882611978565b84525060209283019201611b45565b5050509392505050565b5f82601f830112611b8357611b835f80fd5b60036119a1848285611b19565b5f611b9d611b2684611af9565b90508060208402830185811115611bb557611bb55f80fd5b835b81811015611b675780611bca8882611a0d565b84525060209283019201611bb7565b5f82601f830112611beb57611beb5f80fd5b60036119a1848285611b90565b5f6101008284031215611c0c57611c0c5f80fd5b611c166080611abb565b90505f611c238484611978565b8252506020611c3484848301611b71565b6020830152506080611c4884828501611bd9565b60408301525060e0611c5c84828501611a0d565b60608301525092915050565b5f611c75611b2684611ad6565b8381529050602081016101008402830185811115611c9457611c945f80fd5b835b81811015611b675780611ca98882611bf8565b84525060209092019161010001611c96565b5f82601f830112611ccd57611ccd5f80fd5b81356119a1848260208601611c68565b5f60208284031215611cf057611cf05f80fd5b813567ffffffffffffffff811115611d0957611d095f80fd5b6119a184828501611cbb565b6119c681611955565b6020810161047e8284611d15565b5f8060408385031215611d4057611d405f80fd5b5f611d4b8585611978565b9250506020611d5c858286016119fa565b9150509250929050565b60408101611d748285611d15565b610d0a6020830184611a64565b5f805f60608486031215611d9657611d965f80fd5b5f611da18686611978565b9350506020611db286828701611978565b9250506040611a5a868287016119fa565b5f6101008284031215611dd757611dd75f80fd5b5f6119a18484611bf8565b5f611ded8383611d15565b505060200190565b600381805f5b83811015611e20578151611e0f8782611de2565b965060208301925050600101611dfb565b505050505050565b5f611ded8383611a64565b600381805f5b83811015611e20578151611e4d8782611e28565b965060208301925050600101611e39565b8051610100830190611e708482611d15565b506020820151611e836020850182611df5565b506040820151611e966080850182611e33565b50606082015161130e60e0850182611a64565b610100810161047e8284611e5e565b601a81525f602082017f726573696c69656e74206f7261636c6520697320706175736564000000000000815291505b5060200190565b6020808252810161047e81611eb8565b601581525f602082017463616e2774206265207a65726f206164647265737360581b81529150611ee7565b6020808252810161047e81611efe565b601781525f602082017f746f6b656e20636f6e666967206d75737420657869737400000000000000000081529150611ee7565b6020808252810161047e81611f39565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b602981525f602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291505b5060400190565b6020808252810161047e81611fa4565b601181525f602082017006c656e6774682063616e2774206265203607c1b81529150611ee7565b6020808252810161047e81611ffc565b602581525f602082017f63616e277420736574207a65726f206164647265737320746f206d61696e206f8152647261636c6560d81b60208201529150611fe5565b6020808252810161047e81612033565b602e81525f602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529150611fe5565b6020808252810161047e81612084565b5f60ff821661047e565b6119c6816120de565b6020810161047e82846120e8565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081525f611ee7565b6020808252810161047e816120ff565b602581525f602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b60208201529150611fe5565b6020808252810161047e81612140565b6040810161219f8285611d15565b610d0a6020830184611d15565b8281835e505f910152565b5f6121c0825190565b8084526020840193506121d78185602086016121ac565b601f01601f19169290920192915050565b604081016121f68285611d15565b81810360208301526119a181846121b7565b805161047e81611a05565b5f60208284031215612226576122265f80fd5b5f6119a18484612208565b6060810161223f8286611d15565b61224c6020830185611d15565b818103604083015261225e81846121b7565b95945050505050565b8061196e565b805161047e81612267565b5f6020828403121561228b5761228b5f80fd5b5f6119a1848461226d565b606081016122a48286611d15565b6122b160208301856119da565b6119a160408301846119da565b601e81525f602082017f696e76616c696420726573696c69656e74206f7261636c65207072696365000081529150611ee7565b6020808252810161047e816122be565b805161047e81611965565b5f6020828403121561231f5761231f5f80fd5b5f6119a18484612301565b602b81525f602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150611fe5565b6020808252810161047e8161232a565b601481525f602082017314185d5cd8589b194e881b9bdd081c185d5cd95960621b81529150611ee7565b6020808252810161047e81612381565b6040810161219f82856119da565b601081525f602082016f14185d5cd8589b194e881c185d5cd95960821b81529150611ee7565b6020808252810161047e816123c956fe4e99ec55972332f5e0ef9c6623192c0401b609161bffae64d9ccdd7ad6cc7800a264697066735822122071db7a592f6e37dc1b9a94cbb64f679e43f1f496741c52d980f623401e529da564736f6c63430008190033",
  "deployedBytecode": "0x608060405234801561000f575f80fd5b50600436106101a1575f3560e01c80638da5cb5b116100f3578063b62e4c9211610093578063e30c39781161006e578063e30c3978146103af578063e9d1284f146103c0578063f2fde38b146103d4578063fc57d4df146103e7575f80fd5b8063b62e4c9214610355578063c4d66de81461037c578063cb67e3b11461038f575f80fd5b8063a8e68463116100ce578063a8e6846314610303578063a9534f8a14610316578063b4a0bdf314610331578063b62cad6914610342575f80fd5b80638da5cb5b146102cc57806396e85ced146102dd578063a6b1344a146102f0575f80fd5b80635c975abb1161015e5780638456cb59116101395780638456cb591461025c578063883cfb91146102645780638a2f7f6d146102775780638b855da4146102ab575f80fd5b80635c975abb14610239578063715018a61461024c57806379ba509714610254575f80fd5b80630e32cb86146101a557806333d33494146101ba5780633f4ba83a146101f757806341976e09146101ff5780634b932b8f1461021f5780634bf39cba14610232575b5f80fd5b6101b86101b3366004611983565b6103fa565b005b6101e17f000000000000000000000000000000000000000000000000000000000000000081565b6040516101ee91906119cc565b60405180910390f35b6101b861040e565b61021261020d366004611983565b610442565b6040516101ee91906119e0565b6101b861022d366004611a18565b610484565b6102125f81565b60335460ff166040516101ee9190611a6c565b6101b86105cd565b6101b86105de565b6101b8610613565b6101b8610272366004611cdd565b610643565b61029e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101ee9190611d1e565b6102be6102b9366004611d2c565b61069e565b6040516101ee929190611d66565b6065546001600160a01b031661029e565b6101b86102eb366004611983565b61073e565b6101b86102fe366004611d81565b610757565b6101b8610311366004611dc3565b6108ee565b61029e73bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb81565b60c9546001600160a01b03166101e1565b6101b8610350366004611983565b610a9e565b61029e7f000000000000000000000000000000000000000000000000000000000000000081565b6101b861038a366004611983565b610aa7565b6103a261039d366004611983565b610b79565b6040516101ee9190611ea9565b6097546001600160a01b031661029e565b6102125f8051602061240083398151915281565b6101b86103e2366004611983565b610c5a565b6102126103f5366004611983565b610ccb565b610402610d11565b61040b81610d3b565b50565b61043860405180604001604052806009815260200168756e7061757365282960b81b815250610db4565b610440610e4b565b565b5f61044f60335460ff1690565b156104755760405162461bcd60e51b815260040161046c90611eee565b60405180910390fd5b61047e82610e97565b92915050565b826001600160a01b0381166104ab5760405162461bcd60e51b815260040161046c90611f29565b6001600160a01b038085165f90815260fb60205260409020548591166104e35760405162461bcd60e51b815260040161046c90611f6c565b6105216040518060400160405280602081526020017f656e61626c654f7261636c6528616464726573732c75696e74382c626f6f6c29815250610db4565b6001600160a01b0385165f90815260fb60205260409020839060040185600281111561054f5761054f611f7c565b6003811061055f5761055f611f90565b602091828204019190066101000a81548160ff02191690831515021790555082151584600281111561059357610593611f7c565b6040516001600160a01b038816907fcf3cad1ec87208efbde5d82a0557484a78d4182c3ad16926a5463bc1f7234b3d905f90a45050505050565b6105d5610d11565b6104405f611098565b60975433906001600160a01b0316811461060a5760405162461bcd60e51b815260040161046c90611fec565b61040b81611098565b61063b604051806040016040528060078152602001667061757365282960c81b815250610db4565b6104406110b1565b80515f036106635760405162461bcd60e51b815260040161046c90612023565b80515f5b818110156106995761069183828151811061068457610684611f90565b60200260200101516108ee565b600101610667565b505050565b6001600160a01b0382165f90815260fb6020526040812081906001018360028111156106cc576106cc611f7c565b600381106106dc576106dc611f90565b01546001600160a01b038581165f90815260fb602052604090209116925060040183600281111561070f5761070f611f7c565b6003811061071f5761071f611f90565b602091828204019190069054906101000a900460ff1690509250929050565b5f610748826110ee565b905061075381611232565b5050565b826001600160a01b03811661077e5760405162461bcd60e51b815260040161046c90611f29565b6001600160a01b038085165f90815260fb60205260409020548591166107b65760405162461bcd60e51b815260040161046c90611f6c565b6107f46040518060400160405280602081526020017f7365744f7261636c6528616464726573732c616464726573732c75696e743829815250610db4565b6001600160a01b03841615801561081b57505f83600281111561081957610819611f7c565b145b156108385760405162461bcd60e51b815260040161046c90612074565b6001600160a01b0385165f90815260fb60205260409020849060010184600281111561086657610866611f7c565b6003811061087657610876611f90565b0180546001600160a01b0319166001600160a01b03929092169190911790558260028111156108a7576108a7611f7c565b846001600160a01b0316866001600160a01b03167fea681d3efb830ef032a9c29a7215b5ceeeb546250d2c463dbf87817aecda1bf160405160405180910390a45050505050565b80516001600160a01b0381166109165760405162461bcd60e51b815260040161046c90611f29565b6020820151516001600160a01b0381166109425760405162461bcd60e51b815260040161046c90611f29565b6109806040518060400160405280601b81526020017f736574546f6b656e436f6e66696728546f6b656e436f6e666967290000000000815250610db4565b82516001600160a01b039081165f90815260fb60209081526040909120855181546001600160a01b03191693169290921782558401518491906109c99060018301906003611806565b5060408201516109df906004830190600361185e565b50606091909101516005909101805460ff191691151591909117905560208381015190810151815185516001600160a01b03928316939183169216907fa51ad01e2270c314a7b78f0c60fe66c723f2d06c121d63fcdce776e654878fc19060026020020151604051610a519190611d1e565b60405180910390a482606001511515835f01516001600160a01b03167fca250c5374abedcbf71c0e3eda7ff4cf940fa9e6561d8cd31d2bf480a140a93f60405160405180910390a3505050565b61040b81611232565b5f54610100900460ff1615808015610ac557505f54600160ff909116105b80610ade5750303b158015610ade57505f5460ff166001145b610afa5760405162461bcd60e51b815260040161046c906120ce565b5f805460ff191660011790558015610b1b575f805461ff0019166101001790555b610b2482611314565b610b2c61134b565b8015610753575f805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890610b6d906001906120f1565b60405180910390a15050565b610b816118e8565b6001600160a01b038281165f90815260fb602090815260409182902082516080810184528154909416845282516060810193849052909291840191600184019060039082845b81546001600160a01b03168152600190910190602001808311610bc7575050509183525050604080516060810191829052602090920191906004840190600390825f855b825461010083900a900460ff161515815260206001928301818104948501949093039092029101808411610c0b575050509284525050506005919091015460ff16151560209091015292915050565b610c62610d11565b609780546001600160a01b0383166001600160a01b03199091168117909155610c936065546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f610cd860335460ff1690565b15610cf55760405162461bcd60e51b815260040161046c90611eee565b5f610cff836110ee565b9050610d0a81610e97565b9392505050565b6065546001600160a01b031633146104405760405162461bcd60e51b815260040161046c90612130565b6001600160a01b038116610d615760405162461bcd60e51b815260040161046c90612181565b60c980546001600160a01b038381166001600160a01b03198316179092556040519116907f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa090610b6d9083908590612191565b60c9546040516318c5e8ab60e01b81525f916001600160a01b0316906318c5e8ab90610de690339086906004016121e8565b602060405180830381865afa158015610e01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e259190612213565b90508061075357333083604051634a3fa29360e01b815260040161046c93929190612231565b610e53611379565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051610e8d9190611d1e565b60405180910390a1565b5f8080610eb15f805160206124008339815191528561139b565b90508015610ec0579392505050565b5f80610ecd86600161069e565b91509150808015610ee657506001600160a01b03821615155b15610f58576040516341976e0960e01b81526001600160a01b038316906341976e0990610f17908990600401611d1e565b602060405180830381865afa925050508015610f50575060408051601f3d908101601f19168201909252610f4d91810190612278565b60015b15610f585793505b5f80610f798887858015610f7457506001600160a01b03871615155b6113d1565b915091505f8214158015610f8a5750805b15610f9a57509695505050505050565b5f80610fa68a89611546565b915091505f8214158015610fb75750805b15610fc9575098975050505050505050565b8315801590610fd757508115155b801561106d5750604051634be3819f60e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906397c7033e9061102e908d9088908790600401612296565b602060405180830381865afa158015611049573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061106d9190612213565b1561108057509198975050505050505050565b60405162461bcd60e51b815260040161046c906122f1565b609780546001600160a01b031916905561040b816116a8565b6110b96116f9565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610e803390565b5f816001600160a01b0381166111165760405162461bcd60e51b815260040161046c90611f29565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b03160361116b5773bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb915061122c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036111cc577f0000000000000000000000000000000000000000000000000000000000000000915061122c565b826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611208573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d0a919061230c565b50919050565b6112495f805160206124008339815191528261139b565b156112515750565b5f8061125d835f61069e565b90925090506001600160a01b038216158015906112775750805b156112c757816001600160a01b031663692404266040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156112b4575f80fd5b505af19250505080156112c5575060015b505b6001600160a01b0383165f90815260fb602052604090206005015460ff1615610699575f6112f484610e97565b905061130e5f80516020612400833981519152858361171c565b50505050565b5f54610100900460ff1661133a5760405162461bcd60e51b815260040161046c90612371565b611342611751565b61040b8161177f565b5f54610100900460ff166113715760405162461bcd60e51b815260040161046c90612371565b6104406117a5565b60335460ff166104405760405162461bcd60e51b815260040161046c906123ab565b5f8083836040516020016113b09291906123bb565b60408051601f1981840301815291905280516020909101205c949350505050565b5f805f806113df875f61069e565b915091508080156113f857506001600160a01b03821615155b15611535576040516341976e0960e01b81526001600160a01b038316906341976e0990611429908a90600401611d1e565b602060405180830381865afa925050508015611462575060408051601f3d908101601f1916820190925261145f91810190612278565b60015b611473575f8093509350505061153e565b856114865793506001925061153e915050565b866114985793505f925061153e915050565b604051634be3819f60e11b815281906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906397c7033e906114ea908c9085908d90600401612296565b602060405180830381865afa158015611505573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115299190612213565b9450945050505061153e565b5f809350935050505b935093915050565b5f805f8061155586600261069e565b9150915080801561156e57506001600160a01b03821615155b15611698576040516341976e0960e01b81526001600160a01b038316906341976e099061159f908990600401611d1e565b602060405180830381865afa9250505080156115d8575060408051601f3d908101601f191682019092526115d591810190612278565b60015b6115e9575f809350935050506116a1565b856115fb5793505f92506116a1915050565b604051634be3819f60e11b815281906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906397c7033e9061164d908b9085908c90600401612296565b602060405180830381865afa158015611668573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061168c9190612213565b945094505050506116a1565b5f809350935050505b9250929050565b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60335460ff16156104405760405162461bcd60e51b815260040161046c906123ef565b5f83836040516020016117309291906123bb565b60405160208183030381529060405280519060200120905081815d50505050565b5f54610100900460ff166117775760405162461bcd60e51b815260040161046c90612371565b6104406117d7565b5f54610100900460ff166104025760405162461bcd60e51b815260040161046c90612371565b5f54610100900460ff166117cb5760405162461bcd60e51b815260040161046c90612371565b6033805460ff19169055565b5f54610100900460ff166117fd5760405162461bcd60e51b815260040161046c90612371565b61044033611098565b826003810192821561184e579160200282015b8281111561184e57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190611819565b5061185a929150611923565b5090565b60018301918390821561184e579160200282015f5b838211156118af57835183826101000a81548160ff02191690831515021790555092602001926001016020815f01049283019260010302611873565b80156118db5782816101000a81549060ff02191690556001016020815f010492830192600103026118af565b505061185a929150611923565b60405180608001604052805f6001600160a01b0316815260200161190a611937565b8152602001611917611937565b81525f60209091015290565b5b8082111561185a575f8155600101611924565b60405180606001604052806003906020820280368337509192915050565b5f6001600160a01b03821661047e565b61196e81611955565b811461040b575f80fd5b803561047e81611965565b5f60208284031215611996576119965f80fd5b5f6119a18484611978565b949350505050565b5f61047e82611955565b5f61047e826119a9565b6119c6816119b3565b82525050565b6020810161047e82846119bd565b806119c6565b6020810161047e82846119da565b6003811061040b575f80fd5b803561047e816119ee565b80151561196e565b803561047e81611a05565b5f805f60608486031215611a2d57611a2d5f80fd5b5f611a388686611978565b9350506020611a49868287016119fa565b9250506040611a5a86828701611a0d565b9150509250925092565b8015156119c6565b6020810161047e8284611a64565b634e487b7160e01b5f52604160045260245ffd5b601f19601f830116810181811067ffffffffffffffff82111715611ab457611ab4611a7a565b6040525050565b5f611ac560405190565b9050611ad18282611a8e565b919050565b5f67ffffffffffffffff821115611aef57611aef611a7a565b5060209081020190565b5f67ffffffffffffffff821115611b1257611b12611a7a565b5060200290565b5f611b2b611b2684611af9565b611abb565b90508060208402830185811115611b4357611b435f80fd5b835b81811015611b675780611b588882611978565b84525060209283019201611b45565b5050509392505050565b5f82601f830112611b8357611b835f80fd5b60036119a1848285611b19565b5f611b9d611b2684611af9565b90508060208402830185811115611bb557611bb55f80fd5b835b81811015611b675780611bca8882611a0d565b84525060209283019201611bb7565b5f82601f830112611beb57611beb5f80fd5b60036119a1848285611b90565b5f6101008284031215611c0c57611c0c5f80fd5b611c166080611abb565b90505f611c238484611978565b8252506020611c3484848301611b71565b6020830152506080611c4884828501611bd9565b60408301525060e0611c5c84828501611a0d565b60608301525092915050565b5f611c75611b2684611ad6565b8381529050602081016101008402830185811115611c9457611c945f80fd5b835b81811015611b675780611ca98882611bf8565b84525060209092019161010001611c96565b5f82601f830112611ccd57611ccd5f80fd5b81356119a1848260208601611c68565b5f60208284031215611cf057611cf05f80fd5b813567ffffffffffffffff811115611d0957611d095f80fd5b6119a184828501611cbb565b6119c681611955565b6020810161047e8284611d15565b5f8060408385031215611d4057611d405f80fd5b5f611d4b8585611978565b9250506020611d5c858286016119fa565b9150509250929050565b60408101611d748285611d15565b610d0a6020830184611a64565b5f805f60608486031215611d9657611d965f80fd5b5f611da18686611978565b9350506020611db286828701611978565b9250506040611a5a868287016119fa565b5f6101008284031215611dd757611dd75f80fd5b5f6119a18484611bf8565b5f611ded8383611d15565b505060200190565b600381805f5b83811015611e20578151611e0f8782611de2565b965060208301925050600101611dfb565b505050505050565b5f611ded8383611a64565b600381805f5b83811015611e20578151611e4d8782611e28565b965060208301925050600101611e39565b8051610100830190611e708482611d15565b506020820151611e836020850182611df5565b506040820151611e966080850182611e33565b50606082015161130e60e0850182611a64565b610100810161047e8284611e5e565b601a81525f602082017f726573696c69656e74206f7261636c6520697320706175736564000000000000815291505b5060200190565b6020808252810161047e81611eb8565b601581525f602082017463616e2774206265207a65726f206164647265737360581b81529150611ee7565b6020808252810161047e81611efe565b601781525f602082017f746f6b656e20636f6e666967206d75737420657869737400000000000000000081529150611ee7565b6020808252810161047e81611f39565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b602981525f602082017f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865208152683732bb9037bbb732b960b91b602082015291505b5060400190565b6020808252810161047e81611fa4565b601181525f602082017006c656e6774682063616e2774206265203607c1b81529150611ee7565b6020808252810161047e81611ffc565b602581525f602082017f63616e277420736574207a65726f206164647265737320746f206d61696e206f8152647261636c6560d81b60208201529150611fe5565b6020808252810161047e81612033565b602e81525f602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529150611fe5565b6020808252810161047e81612084565b5f60ff821661047e565b6119c6816120de565b6020810161047e82846120e8565b60208082527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657291019081525f611ee7565b6020808252810161047e816120ff565b602581525f602082017f696e76616c696420616365737320636f6e74726f6c206d616e61676572206164815264647265737360d81b60208201529150611fe5565b6020808252810161047e81612140565b6040810161219f8285611d15565b610d0a6020830184611d15565b8281835e505f910152565b5f6121c0825190565b8084526020840193506121d78185602086016121ac565b601f01601f19169290920192915050565b604081016121f68285611d15565b81810360208301526119a181846121b7565b805161047e81611a05565b5f60208284031215612226576122265f80fd5b5f6119a18484612208565b6060810161223f8286611d15565b61224c6020830185611d15565b818103604083015261225e81846121b7565b95945050505050565b8061196e565b805161047e81612267565b5f6020828403121561228b5761228b5f80fd5b5f6119a1848461226d565b606081016122a48286611d15565b6122b160208301856119da565b6119a160408301846119da565b601e81525f602082017f696e76616c696420726573696c69656e74206f7261636c65207072696365000081529150611ee7565b6020808252810161047e816122be565b805161047e81611965565b5f6020828403121561231f5761231f5f80fd5b5f6119a18484612301565b602b81525f602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150611fe5565b6020808252810161047e8161232a565b601481525f602082017314185d5cd8589b194e881b9bdd081c185d5cd95960621b81529150611ee7565b6020808252810161047e81612381565b6040810161219f82856119da565b601081525f602082016f14185d5cd8589b194e881c185d5cd95960821b81529150611ee7565b6020808252810161047e816123c956fe4e99ec55972332f5e0ef9c6623192c0401b609161bffae64d9ccdd7ad6cc7800a264697066735822122071db7a592f6e37dc1b9a94cbb64f679e43f1f496741c52d980f623401e529da564736f6c63430008190033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
