0x608060405234801561000f575f5ffd5b5061002e5f73f93d37549ebe665907f8715f9c8938a22ba1ceed610776565b61004d600273df0f22d99224699fdddb7434319c4647e20f3af3610776565b7f86c875b50748df1e51fd6a1dabdd01aff24ece67e2e077bf89ec97456588845a8054600160ff1991821681179092557f16cb2a3b8fc69c400cf9621276d479c8667a1ab18cb5378e78c9059067d068c280548216831790557fe85f55aa94e5a5aba5e6cb71c99bbad5ba870a3bf56d613679167e5bdeb87c9b80548216831790557fc273c5eab56927ab9b101956326dd1daa9cefbe1e4586f4cd93d59170f74b86880548216831790557faa1eabf12c831fd954228d92cf1b3dc906a4af0288a41a6bc3d24543c97d2f1c80548216831790557f6ab3cd0bb4c8aebb1d5b8546a9cc7b675e1fa9f776011b78abe2f4ca3a10edb880548216831790557f331ebed5b546d80caac12b4a68fd484aed9550fc0d2610026278755c8d10d6b180548216831790557ffb15e646a4931ad5f266da3912ae2f51378129f2f5d072e89539f3ed71acc0be80548216831790557f52365e5d299f20f2713064898a4bb577f3de276048447338546c902a748533a280548216831790557f6021118232d1a9994cfe117c1176305334d165ae30063dfa27f46b84c204f43f80548216831790557f217eeca31f179219a09b0680e481def60f80cd3db96dcddfede8fa98f87e2b7580548216831790557f4ba2fdcdae3bcc4da70ba7e42dc90e645638c20bb92572f9a46a7e1193f4db3b80548216831790557f9f45b3219f18382104adbd2b5f07a73920cec9849dc71db8e626ffd100620fb880548216831790557fbd8bf4061569348f4c019904a8ffa4940dd4f86943d5b9a0e19129c5be14d61180548216831790557f0905dae755209bf7c005dcc2c96ae79f14d06e8622c49cec8a1ddae4ee29bb3e80548216831790557f61d012cb1ff13c1caab9f3ecdc7630ddc42c9174cbb5877f0148141a67ba71be80548216831790557fcf82e6021ad62ad06279db75058f382c311bb44a633333979c9bf81b7473a11d80548216831790557f685bb30459d9549787b47c46d1c2cd873e80b9f64c6028a14ce3d8c25d86fb4180548216831790557f97f39cfb293411c4d447e4e6d78f382da902c4c8886dde06b8655a8871fc23e580548216831790557fc350343584cc365fee97408f237b63ae32137d6a472c88ac83cf96772d93201d80548216831790557f6b9a022aed501b8b9ea0d30a97cce8286f2d568265d26d2426fe6ad31e341ce980548216831790557f0e2f87ea93cdc0e40ddc78d127e0bda905543a5717a2d36f58d761e90547c3c480548216831790557ffecdfe04d70d12b266d3aafa39d0ce052bdcd7a801554d5d845f0a1d76cbcd6c80548216831790557fc7bd7191d332b0ffd590bacf58bb9c9b032150e7e4edb1964770904babf4ebfc80548216831790557f03f3d66af2473c52fd89f023d485f4d04b90d4503694703e91934124141196b880548216831790557f622a4324c6692f338b05c7867342adb90b516b80f0fb680a1427d30eb485a77a80548216831790557f514e7cd2337dd7ef515b5e9c35e396adeb56829c50b097dbc33f74ed319b209b80548216831790557f5cbe1a70c15350584f65ff0f929bd7f40983189bdf57074189714fbf8e85fa3a80548216831790557fb7893b5acf7b9f6cf3a90100d503d197268c86183aefe9df1fcd71b0475168cf80548216831790557fcb4e7748f2dd384fad0b34b297cbf5cd849348b789e0b19ea246e84de6792e0580548216831790557fe12a4b91279db8a15d116ad14cc80b37ceee3c9176d6eb1f0176d861555de6bd80548216831790557f9d5e4a6ce30174cad1e4514672f8e1f0505f1796e4a02ac3d458d949223045af80548216831790557f772020d85944d27b8f49115539917954c161f2a64cbdfba4286a49af2046b52880548216831790557fbf0568c38cbab2caae1ab638bca2e8de61cb2e466bb87274e8f14f7a56f1602780548216831790557facff87773d435cf374697b1e5bd5f84b6e7a8b69de4fbd59169384d7548cb843805482168317905560208290527fd44f71166cdf6d30751de8ac7f1b4eefcd9b5a70dfe4e7c158c57f0d8d700b2a80548216831790557fab45d6514052831d284ac962d805b232ea13e75280e6eb86e5b49e5485f451d880548216831790557f672992a3a02e6aee458d569465486167cbcd8c31778231422982d669a1d9a86280548216831790557f76d6a2f0c32b82640d00eba587135c5dbd48b328231fb229fba8b1e2cf5e3a3c80548216831790557f55097b58f320ea423a780c30ff3dd831dfeb6cb4d8078224deec918c2a8decad80548216831790557f827dbc57fda7b4f4a7a1192aebb634122b9e6a97a48a85824f8521d88f88fae380548216831790557ff175946c5c012aa5436e7313aaac39ac389dc3334348c7294f6ec60b8214459780548216831790557f668071081f8c2613a4e5a0f31a3256af88797ee81ece9667f2807580c98e1045805482168317905563746c8bff60e11b5f527f6ca83fe2af68c291d0f77ea8977456d884f65ef0bac2b7be43d344b173429c46805490911690911790556107e5565b8060025f84601081111561078c5761078c6107d1565b601081111561079d5761079d6107d1565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b634e487b7160e01b5f52602160045260245ffd5b614c33806107f25f395ff3fe60806040526004361061012c575f3560e01c8063676ab30b116100a4578063a6e9347911610073578063fa461e3311610058578063fa461e3314610507578063fa483e7214610378578063fba2d3bd1461052657610133565b8063a6e9347914610378578063d365a377146104e857610133565b8063676ab30b1461041657806376cdb03b14610444578063a07aea1c14610490578063a32ce11e146104af57610133565b806331b30468116100fb5780633a1c453c116100e05780633a1c453c1461037857806346ea6051146103c957806350b8ea7d146103f757610133565b806331b304681461039757806337523745146103b657610133565b80630614117a1461031f57806313e7c9d81461033557806323a69e75146103785780632c8958f61461037857610133565b3661013357005b34801561013e575f5ffd5b505f3660606001836101508482613d2c565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260208101919091526040015f205460ff1615156001036101c6575f80606061019f8560048189613d92565b8101906101ac9190613e5f565b919450925090506101be838383610545565b505050610309565b6101d0365f613d2c565b7fffffffff00000000000000000000000000000000000000000000000000000000167ff0cacc1a000000000000000000000000000000000000000000000000000000000361030957325f9081526003602052604090205460ff1615156001146102c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f41682061682061682c20796f75206469646e27742073617920746865206d616760448201527f696320776f72640000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103096102d0366004815f613d92565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506106b592505050565b5050604080515f81526020810191829052519150f35b34801561032a575f5ffd5b50610333610759565b005b348015610340575f5ffd5b5061036361034f366004613f4f565b60036020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610383575f5ffd5b50610333610392366004613f6a565b610901565b3480156103a2575f5ffd5b506103336103b1366004613ff4565b610947565b6103336103c43660046140bd565b6109ce565b3480156103d4575f5ffd5b506103636103e3366004613f4f565b5f6020819052908152604090205460ff1681565b348015610402575f5ffd5b5061033361041136600461419b565b6113fc565b348015610421575f5ffd5b5061036361043036600461419b565b60016020525f908152604090205460ff1681565b34801561044f575f5ffd5b5061046b73b38a90f14b24ae81ec0b8f1373694f5b59811d8a81565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161036f565b34801561049b575f5ffd5b506103336104aa3660046141da565b6114d6565b3480156104ba575f5ffd5b506103636104c9366004614283565b600460209081525f928352604080842090915290825290205460ff1681565b3480156104f3575f5ffd5b506103336105023660046141da565b6115d9565b348015610512575f5ffd5b50610333610521366004613e5f565b610545565b348015610531575f5ffd5b5061033361054036600461429f565b6116db565b325f9081526003602052604090205460ff1615156001146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f41682061682061682c20796f75206469646e27742073617920746865206d616760448201527f696320776f72640000000000000000000000000000000000000000000000000060648201526084016102b7565b335f9081526020819052604090205460ff161515600114610665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f756e617574686f72697a65642063616c6c65720000000000000000000000000060448201526064016102b7565b5f5f84136106735782610675565b835b90505f8280602001905181019061068c91906142c9565b90506106ae8173b38a90f14b24ae81ec0b8f1373694f5b59811d8a33856117e9565b5050505050565b61073460408051610180810182525f8082526020808301829052828401829052606083018290526080830182905260a0830182905260c083018290528351808501855282815280820183905260e084015283518085019094528184528301529061010082019081526020015f81525f6020820181905260409091015290565b61073e828261187e565b905061074a8282611982565b9050610755816109ce565b5050565b73b38a90f14b24ae81ec0b8f1373694f5b59811d8a33146107d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7065202d204e6f742062616e6b000000000000000000000000000000000060448201526064016102b7565b478061083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4e6f2045544820746f207265636f76657200000000000000000000000000000060448201526064016102b7565b6040515f9073b38a90f14b24ae81ec0b8f1373694f5b59811d8a9083908381818185875af1925050503d805f8114610891576040519150601f19603f3d011682016040523d82523d5f602084013e610896565b606091505b5050905080610755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5472616e73666572206661696c65642e0000000000000000000000000000000060448201526064016102b7565b610941848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061054592505050565b50505050565b73b38a90f14b24ae81ec0b8f1373694f5b59811d8a33146109c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7065202d204e6f742062616e6b000000000000000000000000000000000060448201526064016102b7565b6107558282611ace565b335f9081526003602052604090205460ff161515600114610a71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f41682061682061682c20796f75206469646e27742073617920746865206d616760448201527f696320776f72640000000000000000000000000000000000000000000000000060648201526084016102b7565b428161016001511015610ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f455850495245440000000000000000000000000000000000000000000000000060448201526064016102b7565b60098161012001516010811115610af957610af96142e4565b03610dee575f60405180610160016040528073b38a90f14b24ae81ec0b8f1373694f5b59811d8a73ffffffffffffffffffffffffffffffffffffffff168152602001835f015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001836040015160ff168152602001836060015160ff168152602001836080015173ffffffffffffffffffffffffffffffffffffffff1681526020018360a0015181526020018360c0015181526020018360e001518152602001836101000151815260200183610140015161ffff1681525090505f635668afa960e01b82604051602401610c06919061443b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f60025f8561012001516010811115610c8057610c806142e4565b6010811115610c9157610c916142e4565b815260208101919091526040015f205473ffffffffffffffffffffffffffffffffffffffff16905080610d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4d697373696e67206d6f64756c6500000000000000000000000000000000000060448201526064016102b7565b5f8173ffffffffffffffffffffffffffffffffffffffff1683604051610d46919061446c565b5f60405180830381855af49150503d805f8114610d7e576040519150601f19603f3d011682016040523d82523d5f602084013e610d83565b606091505b50509050806106ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f63616c6c206661696c656400000000000000000000000000000000000000000060448201526064016102b7565b5f8161012001516010811115610e0657610e066142e4565b03610f13575f60405180610160016040528073b38a90f14b24ae81ec0b8f1373694f5b59811d8a73ffffffffffffffffffffffffffffffffffffffff168152602001835f015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001836040015160ff168152602001836060015160ff168152602001836080015173ffffffffffffffffffffffffffffffffffffffff1681526020018360a0015181526020018360c0015181526020018360e001518152602001836101000151815260200183610140015161ffff1681525090505f6334b0aee760e01b82604051602401610c06919061443b565b60018161012001516010811115610f2c57610f2c6142e4565b1480610f4e575060028161012001516010811115610f4c57610f4c6142e4565b145b15611287575f60018261012001516010811115610f6d57610f6d6142e4565b14610f78575f610f7b565b60015b90505f60405180610160016040528073b38a90f14b24ae81ec0b8f1373694f5b59811d8a73ffffffffffffffffffffffffffffffffffffffff168152602001845f015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015173ffffffffffffffffffffffffffffffffffffffff168152602001846040015160ff168152602001846060015160ff168152602001846080015173ffffffffffffffffffffffffffffffffffffffff1681526020018460a0015181526020018460c0015181526020018460e001518152602001846101000151815260200184610140015161ffff1681525090505f63c51e8c9560e01b8284604051602401611087929190614487565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000949094169390931790925260025f8190529091527f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28c5490915073ffffffffffffffffffffffffffffffffffffffff16806111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4d697373696e67206d6f64756c6500000000000000000000000000000000000060448201526064016102b7565b5f8173ffffffffffffffffffffffffffffffffffffffff16836040516111d7919061446c565b5f60405180830381855af49150503d805f811461120f576040519150601f19603f3d011682016040523d82523d5f602084013e611214565b606091505b505090508061127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f63616c6c206661696c656400000000000000000000000000000000000000000060448201526064016102b7565b505050505050565b600c81610120015160108111156112a0576112a06142e4565b036113f0576112c673aaaaaaaacb71bf2c8cae522ea5fa455571a74106825f0151611b43565b6112e873aaaaaaaacb71bf2c8cae522ea5fa455571a741068260200151611b43565b5f60405180610160016040528073b38a90f14b24ae81ec0b8f1373694f5b59811d8a73ffffffffffffffffffffffffffffffffffffffff168152602001835f015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001836040015160ff168152602001836060015160ff168152602001836080015173ffffffffffffffffffffffffffffffffffffffff1681526020018360a0015181526020018360c0015181526020018360e001518152602001836101000151815260200183610140015161ffff1681525090505f636a30d00e60e01b82604051602401610c06919061443b565b6113f981611c7f565b50565b73b38a90f14b24ae81ec0b8f1373694f5b59811d8a3314611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7065202d204e6f742062616e6b000000000000000000000000000000000060448201526064016102b7565b7fffffffff00000000000000000000000000000000000000000000000000000000165f90815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b73b38a90f14b24ae81ec0b8f1373694f5b59811d8a3314611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7065202d204e6f742062616e6b000000000000000000000000000000000060448201526064016102b7565b5f5b815181101561075557600160035f848481518110611575576115756144a6565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101611555565b73b38a90f14b24ae81ec0b8f1373694f5b59811d8a3314611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7065202d204e6f742062616e6b000000000000000000000000000000000060448201526064016102b7565b5f5b8151811015610755575f60035f848481518110611677576116776144a6565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101611658565b73b38a90f14b24ae81ec0b8f1373694f5b59811d8a3314611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7065202d204e6f742062616e6b000000000000000000000000000000000060448201526064016102b7565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273b38a90f14b24ae81ec0b8f1373694f5b59811d8a60048201526024810182905273ffffffffffffffffffffffffffffffffffffffff83169063a9059cbb906044015f604051808303815f87803b1580156117d7575f5ffd5b505af115801561127f573d5f5f3e3d5ffd5b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610941908590612bde565b6118fd60408051610180810182525f8082526020808301829052828401829052606083018290526080830182905260a0830182905260c083018290528351808501855282815280820183905260e084015283518085019094528184528301529061010082019081526020015f81525f6020820181905260409091015290565b50601482015160288301516029840151602a850151603e860151604a870151605688015173ffffffffffffffffffffffffffffffffffffffff9687168852948616602088015260ff93841660408801529290911660608601529290921660808401526bffffffffffffffffffffffff91821660a08401521660c0820152805b92915050565b611a0160408051610180810182525f8082526020808301829052828401829052606083018290526080830182905260a0830182905260c083018290528351808501855282815280820183905260e084015283518085019094528184528301529061010082019081526020015f81525f6020820181905260409091015290565b6058830151605a840151605c850151605e860151605f8701516061880151606589015160408051808201825261ffff808a168252808916602080840191909152835180850190945281891684529087169083015260e08b018190526101008b018290529060ff85166010811115611a7a57611a7a6142e4565b8b61012001906010811115611a9157611a916142e4565b90816010811115611aa457611aa46142e4565b905250505061ffff9190911661014089015263ffffffff1661016088015250949695505050505050565b8060025f846010811115611ae457611ae46142e4565b6010811115611af557611af56142e4565b81526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b73ffffffffffffffffffffffffffffffffffffffff8083165f9081526004602090815260408083209385168352929052205460ff1680611c7a576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602483015283169063095ea7b3906044015f604051808303815f87803b158015611c09575f5ffd5b505af1158015611c1b573d5f5f3e3d5ffd5b50505073ffffffffffffffffffffffffffffffffffffffff8085165f90815260046020908152604080832093871683529290522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505b505050565b604080518082019091525f8082526020820152604080518082019091525f8082526020820152611ce260405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81525090565b5f611d0a60405180608001604052805f81526020015f81526020015f81526020015f81525090565b6c0100000000000000000000000060038761012001516010811115611d3157611d316142e4565b03611dcd57866080015173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611d83573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da791906144f3565b50505073ffffffffffffffffffffffffffffffffffffffff9093168752506123a2915050565b60058761012001516010811115611de657611de66142e4565b03611e5c57866080015173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611e38573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da79190614581565b60078761012001516010811115611e7557611e756142e4565b03611f0b57866080015173ffffffffffffffffffffffffffffffffffffffff1663217ac2376040518163ffffffff1660e01b8152600401608060405180830381865afa158015611ec7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eeb91906145fb565b50505073ffffffffffffffffffffffffffffffffffffffff1684526123a2565b600d8761012001516010811115611f2457611f246142e4565b03611fbf57866080015173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160c060405180830381865afa158015611f76573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f9a919061464e565b50505073ffffffffffffffffffffffffffffffffffffffff9092168652506123a29050565b600a8761012001516010811115611fd857611fd86142e4565b036120e0575f876080015173ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa15801561202b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061204f91906146c8565b50505073ffffffffffffffffffffffffffffffffffffffff9092168752509050606461208261ffff8316620f4240614744565b61208c919061478c565b61ffff9081166101408a0190815260408051808201909152600b81527f6e6577206665653a202573000000000000000000000000000000000000000000602082015290516120da9216612ceb565b506123a2565b600e87610120015160108111156120f9576120f96142e4565b0361219d575f876080015173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b8152600401608060405180830381865afa15801561214c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061217091906147b1565b5073ffffffffffffffffffffffffffffffffffffffff9092168752509050606461208282620f4240614744565b600f87610120015160108111156121b6576121b66142e4565b0361227a575f876080015173ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa158015612209573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061222d91906146c8565b50505073ffffffffffffffffffffffffffffffffffffffff9092168752509050606461226061ffff8316620f4240614744565b61226a919061478c565b61ffff16610140890152506123a2565b60108761012001516010811115612293576122936142e4565b036122e557866080015173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611e38573d5f5f3e3d5ffd5b5f876080015173ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b815260040160e060405180830381865afa158015612333573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061235791906147f4565b5050505073ffffffffffffffffffffffffffffffffffffffff929092168752509050606461238c61ffff8316620f4240614744565b612396919061478c565b61ffff16610140890152505b600787610120015160108111156123bb576123bb6142e4565b0361244f57866080015173ffffffffffffffffffffffffffffffffffffffff1663ab612f2b6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561240d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124319190614874565b50506fffffffffffffffffffffffffffffffff1660208501526124d8565b866080015173ffffffffffffffffffffffffffffffffffffffff16631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa15801561249c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124c091906148b4565b6fffffffffffffffffffffffffffffffff1660208501525b865f015173ffffffffffffffffffffffffffffffffffffffff16876080015173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061256391906142c9565b73ffffffffffffffffffffffffffffffffffffffff16036125da576125a6846020015182865f015173ffffffffffffffffffffffffffffffffffffffff16612d7c565b8652602084015184516125d0919073ffffffffffffffffffffffffffffffffffffffff1683612d7c565b6020870152612633565b6126028460200151855f015173ffffffffffffffffffffffffffffffffffffffff1683612d7c565b86526020840151845161262d9190839073ffffffffffffffffffffffffffffffffffffffff16612d7c565b60208701525b855185526020808701519086015285516040880151612657919060ff166012612e4a565b865260208601516060880151612672919060ff166012612e4a565b6020870181905286519061268e90670de0b6b3a76400006148cd565b61269891906148e4565b92505f8760c001518860a00151670de0b6b3a76400006126b891906148cd565b6126c291906148e4565b61014089015190915061ffff166126db826127106148cd565b6126e591906148e4565b604086018190526101008901515160e08a01516020015161ffff9182169261271092909116906148cd565b61271a91906148e4565b6040860152610140880151612710906127379061ffff16836148cd565b61274191906148e4565b606086018190526101008901516020015160e08a01515161ffff9182169261276c92909116906148cd565b61277691906148e4565b60608601526040850151841015806127915750846060015184105b15612bd457875160208901516040517f70a0823100000000000000000000000000000000000000000000000000000000815273b38a90f14b24ae81ec0b8f1373694f5b59811d8a600482015273ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015612819573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061283d91906148f7565b85526040517f70a0823100000000000000000000000000000000000000000000000000000000815273b38a90f14b24ae81ec0b8f1373694f5b59811d8a600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa1580156128bb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128df91906148f7565b6020860181905260c08b015160608c0151670de0b6b3a7640000926129089160ff166012612e4a565b61291291906148cd565b61291c91906148e4565b670de0b6b3a76400008b60a00151612940885f01518e6040015160ff166012612e4a565b61294a91906148cd565b61295491906148e4565b61295e919061490e565b6040808701919091528701518610612988576129838a8a875f01518a60400151612ea4565b61299c565b61299c8a8a87602001518a606001516132a9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273b38a90f14b24ae81ec0b8f1373694f5b59811d8a600482015273ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015612a18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a3c91906148f7565b85526040517f70a0823100000000000000000000000000000000000000000000000000000000815273b38a90f14b24ae81ec0b8f1373694f5b59811d8a600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa158015612aba573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ade91906148f7565b6020860181905260c08b015160608c0151670de0b6b3a764000092612b079160ff166012612e4a565b612b1191906148cd565b612b1b91906148e4565b670de0b6b3a76400008b60a00151612b3f885f01518e6040015160ff166012612e4a565b612b4991906148cd565b612b5391906148e4565b612b5d919061490e565b6060860181905260408601511115612bd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f76616c75655f6265666f7265203e2076616c75655f616674657200000000000060448201526064016102b7565b50505b5050505050505050565b5f612c3f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661364c9092919063ffffffff16565b905080515f1480612c5f575080806020019051810190612c5f9190614921565b611c7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016102b7565b6107558282604051602401612d01929190614983565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9710a9d00000000000000000000000000000000000000000000000000000000017905261365a565b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050805f03612dd257838281612dc857612dc861475f565b0492505050612e43565b808411612ddd575f5ffd5b5f848688098519600190810187169687900496828603819004959092119093035f82900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b5f5f82841115612e7a57612e5e83856149a4565b612e6990600a614ad8565b612e7390866148e4565b9050612e9c565b612e8484846149a4565b612e8f90600a614ad8565b612e9990866148cd565b90505b949350505050565b612ed76040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f612f178560200151865f015188610140015161ffff168960c001518a60a001518b61010001515f015161ffff168c60e001516020015161ffff16613663565b9050670de0b6b3a76400008660a0015182612f3291906148cd565b612f3c91906148e4565b60408301819052662386f26fc100001115612f58575050610941565b612f6b816012886040015160ff16612e4a565b9050612f77848261374f565b606083018190525f03612f8b575050610941565b6130296040518061012001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81525090565b866080015173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613076573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061309a91906142c9565b73ffffffffffffffffffffffffffffffffffffffff9081166020830181905288518216835273b38a90f14b24ae81ec0b8f1373694f5b59811d8a6060840152885190911614613101576130fc846ec097ce7bc90715b34b9f10000000006148e4565b613103565b835b60c08201528651602082015173ffffffffffffffffffffffffffffffffffffffff90811691161461313857866060015161313e565b86604001515b60ff1660e08201528651602082015173ffffffffffffffffffffffffffffffffffffffff90811691161461317657866040015161317c565b86606001515b60ff16816101000181815250506131a283606001518860800151838a6101200151613764565b6060850181905290845260408801516131c0919060ff166012612e4a565b6020840152825160608801516131db919060ff166012612e4a565b80845260c0880151670de0b6b3a7640000916131f791906148cd565b61320191906148e4565b608084015260a08701516020840151670de0b6b3a764000091613223916148cd565b61322d91906148e4565b60a084018190526080840151116132a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f2050726f666974000000000000000000000000000000000000000000000060448201526064016102b7565b50505050505050565b6132dc6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f61331c855f0151866020015188610140015161ffff168960a001518a60c001518b60e001515f015161ffff168c61010001516020015161ffff16613663565b9050670de0b6b3a76400008660c001518261333791906148cd565b61334191906148e4565b60408301819052662386f26fc10000111561335d575050610941565b613370816012886060015160ff16612e4a565b905061337c848261374f565b606083018190525f03613390575050610941565b61342e6040518061012001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81525090565b60208088015173ffffffffffffffffffffffffffffffffffffffff90811683526080890151604080517f0dfe168100000000000000000000000000000000000000000000000000000000815290519190921692630dfe168192600480820193918290030181865afa1580156134a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134c991906142c9565b73ffffffffffffffffffffffffffffffffffffffff9081166020830181905273b38a90f14b24ae81ec0b8f1373694f5b59811d8a606084015288519091161461352a57613525846ec097ce7bc90715b34b9f10000000006148e4565b61352c565b835b60c08201528651602082015173ffffffffffffffffffffffffffffffffffffffff908116911614613561578660600151613567565b86604001515b60ff1660e08201528651602082015173ffffffffffffffffffffffffffffffffffffffff90811691161461359f5786604001516135a5565b86606001515b60ff16816101000181815250506135cb83606001518860800151838a6101200151613764565b6060808601829052918552908801516135e9919060ff166012612e4a565b602084015282516040880151613604919060ff166012612e4a565b80845260a0880151670de0b6b3a76400009161362091906148cd565b61362a91906148e4565b608084015260c08701516020840151670de0b6b3a764000091613223916148cd565b6060612e9c84845f8561398a565b6113f981613a9f565b5f670de0b6b3a7640000613677868a6148cd565b61368191906148e4565b9750670de0b6b3a764000061369685896148cd565b6136a091906148e4565b9650826136af886127106148cd565b6136b991906148e4565b9650816136c8896127106148cd565b6136d291906148e4565b97505f6136df888a6148cd565b90505f6136ed8960646148cd565b6136ff6136fa8a856148cd565b613abf565b61370991906149a4565b6137149060646148cd565b905061372088826148e4565b90505f8661373683670de0b6b3a76400006148cd565b61374091906148e4565b9b9a5050505050505050505050565b5f81831061375d5781612e43565b5090919050565b81516040805173ffffffffffffffffffffffffffffffffffffffff90921660208301525f91829182910160405160208183030381529060405290505f855f015173ffffffffffffffffffffffffffffffffffffffff16866020015173ffffffffffffffffffffffffffffffffffffffff16146137e0575f6137e3565b60015b90505f6137fe8760c001518860e00151896101000151613b78565b905061380988613bd0565b5f80600788601081111561381f5761381f6142e4565b036138cb5760608901516040517f24b31a0c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c16916324b31a0c9161388291908f90899089908c90600401614ae3565b60408051808303815f875af115801561389d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138c19190614b3b565b9092509050613955565b8973ffffffffffffffffffffffffffffffffffffffff1663128acb088a60600151868e878a6040518663ffffffff1660e01b8152600401613910959493929190614b5d565b60408051808303815f875af115801561392b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061394f9190614b3b565b90925090505b836139605781613962565b805b61396b90614bb5565b965083613978578061397a565b815b9550505050505094509492505050565b606082471015613a1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016102b7565b5f5f8673ffffffffffffffffffffffffffffffffffffffff168587604051613a44919061446c565b5f6040518083038185875af1925050503d805f8114613a7e576040519150601f19603f3d011682016040523d82523d5f602084013e613a83565b606091505b5091509150613a9487838387613c4e565b979650505050505050565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b60b581710100000000000000000000000000000000008110613ae65760409190911b9060801c5b69010000000000000000008110613b025760209190911b9060401c5b650100000000008110613b1a5760109190911b9060201c5b63010000008110613b305760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c808204811115613b735781045b919050565b5f78010000000000000000000000000000000000000000000000008183613ba086601261490e565b613baa91906149a4565b613bb590600a614ad8565b90505f613a9487613bc684866148e4565b6136fa91906148cd565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604090205460ff16806107555773ffffffffffffffffffffffffffffffffffffffff82165f90815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050565b60608315613ce35782515f03613cdc5773ffffffffffffffffffffffffffffffffffffffff85163b613cdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102b7565b5081612e9c565b612e9c8383815115613cf85781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b79190614beb565b80357fffffffff000000000000000000000000000000000000000000000000000000008116906004841015613d8b577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b5f5f85851115613da0575f5ffd5b83861115613dac575f5ffd5b5050820193919092039150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051610180810167ffffffffffffffff81118282101715613e0a57613e0a613db9565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613e5757613e57613db9565b604052919050565b5f5f5f60608486031215613e71575f5ffd5b8335925060208401359150604084013567ffffffffffffffff811115613e95575f5ffd5b8401601f81018613613ea5575f5ffd5b803567ffffffffffffffff811115613ebf57613ebf613db9565b613ef060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613e10565b818152876020838501011115613f04575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b73ffffffffffffffffffffffffffffffffffffffff811681146113f9575f5ffd5b8035613b7381613f23565b5f60208284031215613f5f575f5ffd5b8135612e4381613f23565b5f5f5f5f60608587031215613f7d575f5ffd5b8435935060208501359250604085013567ffffffffffffffff811115613fa1575f5ffd5b8501601f81018713613fb1575f5ffd5b803567ffffffffffffffff811115613fc7575f5ffd5b876020828401011115613fd8575f5ffd5b949793965060200194505050565b803560118110613b73575f5ffd5b5f5f60408385031215614005575f5ffd5b61400e83613fe6565b9150602083013561401e81613f23565b809150509250929050565b60ff811681146113f9575f5ffd5b8035613b7381614029565b61ffff811681146113f9575f5ffd5b8035613b7381614042565b5f6040828403121561406c575f5ffd5b6040805190810167ffffffffffffffff8111828210171561408f5761408f613db9565b60405290508082356140a081614042565b815260208301356140b081614042565b6020919091015292915050565b5f6101c08284031280156140cf575f5ffd5b506140d8613de6565b6140e183613f44565b81526140ef60208401613f44565b602082015261410060408401614037565b604082015261411160608401614037565b606082015261412260808401613f44565b608082015260a0838101359082015260c080840135908201526141488460e0850161405c565b60e082015261415b84610120850161405c565b61010082015261416e6101608401613fe6565b6101208201526141816101808401614051565b6101408201526101a0929092013561016083015250919050565b5f602082840312156141ab575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612e43575f5ffd5b5f602082840312156141ea575f5ffd5b813567ffffffffffffffff811115614200575f5ffd5b8201601f81018413614210575f5ffd5b803567ffffffffffffffff81111561422a5761422a613db9565b8060051b61423a60208201613e10565b91825260208184018101929081019087841115614255575f5ffd5b6020850194505b83851015613a94578435925061427183613f23565b8282526020948501949091019061425c565b5f5f60408385031215614294575f5ffd5b823561400e81613f23565b5f5f604083850312156142b0575f5ffd5b82356142bb81613f23565b946020939093013593505050565b5f602082840312156142d9575f5ffd5b8151612e4381613f23565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b805173ffffffffffffffffffffffffffffffffffffffff1682526020810151614352602084018273ffffffffffffffffffffffffffffffffffffffff169052565b50604081015161437a604084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606081015161438f606084018260ff169052565b5060808101516143a4608084018260ff169052565b5060a08101516143cc60a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060c081015160c083015260e081015160e0830152610100810151614406610100840182805161ffff908116835260209182015116910152565b50610120810151805161ffff90811661014085015260208201511661016084015250610140015161ffff166101809190910152565b6101a0810161197c8284614311565b5f5b8381101561446457818101518382015260200161444c565b50505f910152565b5f825161447d81846020870161444a565b9190910192915050565b6101c081016144968285614311565b8215156101a08301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051600281900b8114613b73575f5ffd5b80518015158114613b73575f5ffd5b5f5f5f5f5f5f5f60e0888a031215614509575f5ffd5b875161451481613f23565b9650614522602089016144d3565b9550604088015161453281614042565b606089015190955061454381614042565b608089015190945061455481614042565b60a089015190935061456581614029565b915061457360c089016144e4565b905092959891949750929550565b5f5f5f5f5f5f5f60e0888a031215614597575f5ffd5b87516145a281613f23565b96506145b0602089016144d3565b955060408801516145c081614042565b60608901519095506145d181614042565b60808901519094506145e281614042565b60a089015190935063ffffffff81168114614565575f5ffd5b5f5f5f5f6080858703121561460e575f5ffd5b845161461981613f23565b9350614627602086016144d3565b9250614635604086016144d3565b9150614643606086016144e4565b905092959194509250565b5f5f5f5f5f5f60c08789031215614663575f5ffd5b865161466e81613f23565b955061467c602088016144d3565b9450604087015161468c81614042565b606088015190945061469d81614042565b60808801519093506146ae81614042565b91506146bc60a088016144e4565b90509295509295509295565b5f5f5f5f5f5f60c087890312156146dd575f5ffd5b86516146e881613f23565b95506146f6602088016144d3565b9450604087015161470681614042565b606088015190945061469d81614029565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b62ffffff828116828216039081111561197c5761197c614717565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62ffffff8316806147a0576147a061475f565b8062ffffff84160491505092915050565b5f5f5f5f608085870312156147c4575f5ffd5b84516147cf81613f23565b93506147dd602086016144d3565b9250604085015162ffffff81168114614635575f5ffd5b5f5f5f5f5f5f5f60e0888a03121561480a575f5ffd5b875161481581613f23565b9650614823602089016144d3565b9550604088015161483381614042565b606089015190955061484481614042565b608089015190945061455481614029565b80516fffffffffffffffffffffffffffffffff81168114613b73575f5ffd5b5f5f5f60608486031215614886575f5ffd5b61488f84614855565b925061489d60208501614855565b91506148ab60408501614855565b90509250925092565b5f602082840312156148c4575f5ffd5b612e4382614855565b808202811582820484141761197c5761197c614717565b5f826148f2576148f261475f565b500490565b5f60208284031215614907575f5ffd5b5051919050565b8082018082111561197c5761197c614717565b5f60208284031215614931575f5ffd5b612e43826144e4565b5f815180845261495181602086016020860161444a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f614995604083018561493a565b90508260208301529392505050565b8181038181111561197c5761197c614717565b6001815b60018411156149f2578085048111156149d6576149d6614717565b60018416156149e457908102905b60019390931c9280026149bb565b935093915050565b5f82614a085750600161197c565b81614a1457505f61197c565b8160018114614a2a5760028114614a3457614a50565b600191505061197c565b60ff841115614a4557614a45614717565b50506001821b61197c565b5060208310610133831016604e8410600b8410161715614a73575081810a61197c565b614a9e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846149b7565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614ad057614ad0614717565b029392505050565b5f612e4383836149fa565b73ffffffffffffffffffffffffffffffffffffffff86168152846020820152831515604082015273ffffffffffffffffffffffffffffffffffffffff8316606082015260a060808201525f613a9460a083018461493a565b5f5f60408385031215614b4c575f5ffd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff86168152841515602082015283604082015273ffffffffffffffffffffffffffffffffffffffff8316606082015260a060808201525f613a9460a083018461493a565b5f7f80000000000000000000000000000000000000000000000000000000000000008203614be557614be5614717565b505f0390565b602081525f612e43602083018461493a56fea26469706673582212209e3ef6b0cb225ca9ab8345b42e04557e3a89511b98fcf1bbf131570380ab33bc64736f6c634300081c0033
0x60806040526004361061012c575f3560e01c8063676ab30b116100a4578063a6e9347911610073578063fa461e3311610058578063fa461e3314610507578063fa483e7214610378578063fba2d3bd1461052657610133565b8063a6e9347914610378578063d365a377146104e857610133565b8063676ab30b1461041657806376cdb03b14610444578063a07aea1c14610490578063a32ce11e146104af57610133565b806331b30468116100fb5780633a1c453c116100e05780633a1c453c1461037857806346ea6051146103c957806350b8ea7d146103f757610133565b806331b304681461039757806337523745146103b657610133565b80630614117a1461031f57806313e7c9d81461033557806323a69e75146103785780632c8958f61461037857610133565b3661013357005b34801561013e575f5ffd5b505f3660606001836101508482613d2c565b7fffffffff0000000000000000000000000000000000000000000000000000000016815260208101919091526040015f205460ff1615156001036101c6575f80606061019f8560048189613d92565b8101906101ac9190613e5f565b919450925090506101be838383610545565b505050610309565b6101d0365f613d2c565b7fffffffff00000000000000000000000000000000000000000000000000000000167ff0cacc1a000000000000000000000000000000000000000000000000000000000361030957325f9081526003602052604090205460ff1615156001146102c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f41682061682061682c20796f75206469646e27742073617920746865206d616760448201527f696320776f72640000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103096102d0366004815f613d92565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506106b592505050565b5050604080515f81526020810191829052519150f35b34801561032a575f5ffd5b50610333610759565b005b348015610340575f5ffd5b5061036361034f366004613f4f565b60036020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b348015610383575f5ffd5b50610333610392366004613f6a565b610901565b3480156103a2575f5ffd5b506103336103b1366004613ff4565b610947565b6103336103c43660046140bd565b6109ce565b3480156103d4575f5ffd5b506103636103e3366004613f4f565b5f6020819052908152604090205460ff1681565b348015610402575f5ffd5b5061033361041136600461419b565b6113fc565b348015610421575f5ffd5b5061036361043036600461419b565b60016020525f908152604090205460ff1681565b34801561044f575f5ffd5b5061046b73b38a90f14b24ae81ec0b8f1373694f5b59811d8a81565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161036f565b34801561049b575f5ffd5b506103336104aa3660046141da565b6114d6565b3480156104ba575f5ffd5b506103636104c9366004614283565b600460209081525f928352604080842090915290825290205460ff1681565b3480156104f3575f5ffd5b506103336105023660046141da565b6115d9565b348015610512575f5ffd5b50610333610521366004613e5f565b610545565b348015610531575f5ffd5b5061033361054036600461429f565b6116db565b325f9081526003602052604090205460ff1615156001146105e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f41682061682061682c20796f75206469646e27742073617920746865206d616760448201527f696320776f72640000000000000000000000000000000000000000000000000060648201526084016102b7565b335f9081526020819052604090205460ff161515600114610665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f756e617574686f72697a65642063616c6c65720000000000000000000000000060448201526064016102b7565b5f5f84136106735782610675565b835b90505f8280602001905181019061068c91906142c9565b90506106ae8173b38a90f14b24ae81ec0b8f1373694f5b59811d8a33856117e9565b5050505050565b61073460408051610180810182525f8082526020808301829052828401829052606083018290526080830182905260a0830182905260c083018290528351808501855282815280820183905260e084015283518085019094528184528301529061010082019081526020015f81525f6020820181905260409091015290565b61073e828261187e565b905061074a8282611982565b9050610755816109ce565b5050565b73b38a90f14b24ae81ec0b8f1373694f5b59811d8a33146107d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7065202d204e6f742062616e6b000000000000000000000000000000000060448201526064016102b7565b478061083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4e6f2045544820746f207265636f76657200000000000000000000000000000060448201526064016102b7565b6040515f9073b38a90f14b24ae81ec0b8f1373694f5b59811d8a9083908381818185875af1925050503d805f8114610891576040519150601f19603f3d011682016040523d82523d5f602084013e610896565b606091505b5050905080610755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5472616e73666572206661696c65642e0000000000000000000000000000000060448201526064016102b7565b610941848484848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061054592505050565b50505050565b73b38a90f14b24ae81ec0b8f1373694f5b59811d8a33146109c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7065202d204e6f742062616e6b000000000000000000000000000000000060448201526064016102b7565b6107558282611ace565b335f9081526003602052604090205460ff161515600114610a71576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f41682061682061682c20796f75206469646e27742073617920746865206d616760448201527f696320776f72640000000000000000000000000000000000000000000000000060648201526084016102b7565b428161016001511015610ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f455850495245440000000000000000000000000000000000000000000000000060448201526064016102b7565b60098161012001516010811115610af957610af96142e4565b03610dee575f60405180610160016040528073b38a90f14b24ae81ec0b8f1373694f5b59811d8a73ffffffffffffffffffffffffffffffffffffffff168152602001835f015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001836040015160ff168152602001836060015160ff168152602001836080015173ffffffffffffffffffffffffffffffffffffffff1681526020018360a0015181526020018360c0015181526020018360e001518152602001836101000151815260200183610140015161ffff1681525090505f635668afa960e01b82604051602401610c06919061443b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f60025f8561012001516010811115610c8057610c806142e4565b6010811115610c9157610c916142e4565b815260208101919091526040015f205473ffffffffffffffffffffffffffffffffffffffff16905080610d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4d697373696e67206d6f64756c6500000000000000000000000000000000000060448201526064016102b7565b5f8173ffffffffffffffffffffffffffffffffffffffff1683604051610d46919061446c565b5f60405180830381855af49150503d805f8114610d7e576040519150601f19603f3d011682016040523d82523d5f602084013e610d83565b606091505b50509050806106ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f63616c6c206661696c656400000000000000000000000000000000000000000060448201526064016102b7565b5f8161012001516010811115610e0657610e066142e4565b03610f13575f60405180610160016040528073b38a90f14b24ae81ec0b8f1373694f5b59811d8a73ffffffffffffffffffffffffffffffffffffffff168152602001835f015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001836040015160ff168152602001836060015160ff168152602001836080015173ffffffffffffffffffffffffffffffffffffffff1681526020018360a0015181526020018360c0015181526020018360e001518152602001836101000151815260200183610140015161ffff1681525090505f6334b0aee760e01b82604051602401610c06919061443b565b60018161012001516010811115610f2c57610f2c6142e4565b1480610f4e575060028161012001516010811115610f4c57610f4c6142e4565b145b15611287575f60018261012001516010811115610f6d57610f6d6142e4565b14610f78575f610f7b565b60015b90505f60405180610160016040528073b38a90f14b24ae81ec0b8f1373694f5b59811d8a73ffffffffffffffffffffffffffffffffffffffff168152602001845f015173ffffffffffffffffffffffffffffffffffffffff168152602001846020015173ffffffffffffffffffffffffffffffffffffffff168152602001846040015160ff168152602001846060015160ff168152602001846080015173ffffffffffffffffffffffffffffffffffffffff1681526020018460a0015181526020018460c0015181526020018460e001518152602001846101000151815260200184610140015161ffff1681525090505f63c51e8c9560e01b8284604051602401611087929190614487565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000949094169390931790925260025f8190529091527f679795a0195a1b76cdebb7c51d74e058aee92919b8c3389af86ef24535e8a28c5490915073ffffffffffffffffffffffffffffffffffffffff16806111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4d697373696e67206d6f64756c6500000000000000000000000000000000000060448201526064016102b7565b5f8173ffffffffffffffffffffffffffffffffffffffff16836040516111d7919061446c565b5f60405180830381855af49150503d805f811461120f576040519150601f19603f3d011682016040523d82523d5f602084013e611214565b606091505b505090508061127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f63616c6c206661696c656400000000000000000000000000000000000000000060448201526064016102b7565b505050505050565b600c81610120015160108111156112a0576112a06142e4565b036113f0576112c673aaaaaaaacb71bf2c8cae522ea5fa455571a74106825f0151611b43565b6112e873aaaaaaaacb71bf2c8cae522ea5fa455571a741068260200151611b43565b5f60405180610160016040528073b38a90f14b24ae81ec0b8f1373694f5b59811d8a73ffffffffffffffffffffffffffffffffffffffff168152602001835f015173ffffffffffffffffffffffffffffffffffffffff168152602001836020015173ffffffffffffffffffffffffffffffffffffffff168152602001836040015160ff168152602001836060015160ff168152602001836080015173ffffffffffffffffffffffffffffffffffffffff1681526020018360a0015181526020018360c0015181526020018360e001518152602001836101000151815260200183610140015161ffff1681525090505f636a30d00e60e01b82604051602401610c06919061443b565b6113f981611c7f565b50565b73b38a90f14b24ae81ec0b8f1373694f5b59811d8a3314611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7065202d204e6f742062616e6b000000000000000000000000000000000060448201526064016102b7565b7fffffffff00000000000000000000000000000000000000000000000000000000165f90815260016020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055565b73b38a90f14b24ae81ec0b8f1373694f5b59811d8a3314611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7065202d204e6f742062616e6b000000000000000000000000000000000060448201526064016102b7565b5f5b815181101561075557600160035f848481518110611575576115756144a6565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101611555565b73b38a90f14b24ae81ec0b8f1373694f5b59811d8a3314611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7065202d204e6f742062616e6b000000000000000000000000000000000060448201526064016102b7565b5f5b8151811015610755575f60035f848481518110611677576116776144a6565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101611658565b73b38a90f14b24ae81ec0b8f1373694f5b59811d8a3314611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7065202d204e6f742062616e6b000000000000000000000000000000000060448201526064016102b7565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273b38a90f14b24ae81ec0b8f1373694f5b59811d8a60048201526024810182905273ffffffffffffffffffffffffffffffffffffffff83169063a9059cbb906044015f604051808303815f87803b1580156117d7575f5ffd5b505af115801561127f573d5f5f3e3d5ffd5b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052610941908590612bde565b6118fd60408051610180810182525f8082526020808301829052828401829052606083018290526080830182905260a0830182905260c083018290528351808501855282815280820183905260e084015283518085019094528184528301529061010082019081526020015f81525f6020820181905260409091015290565b50601482015160288301516029840151602a850151603e860151604a870151605688015173ffffffffffffffffffffffffffffffffffffffff9687168852948616602088015260ff93841660408801529290911660608601529290921660808401526bffffffffffffffffffffffff91821660a08401521660c0820152805b92915050565b611a0160408051610180810182525f8082526020808301829052828401829052606083018290526080830182905260a0830182905260c083018290528351808501855282815280820183905260e084015283518085019094528184528301529061010082019081526020015f81525f6020820181905260409091015290565b6058830151605a840151605c850151605e860151605f8701516061880151606589015160408051808201825261ffff808a168252808916602080840191909152835180850190945281891684529087169083015260e08b018190526101008b018290529060ff85166010811115611a7a57611a7a6142e4565b8b61012001906010811115611a9157611a916142e4565b90816010811115611aa457611aa46142e4565b905250505061ffff9190911661014089015263ffffffff1661016088015250949695505050505050565b8060025f846010811115611ae457611ae46142e4565b6010811115611af557611af56142e4565b81526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b73ffffffffffffffffffffffffffffffffffffffff8083165f9081526004602090815260408083209385168352929052205460ff1680611c7a576040517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602483015283169063095ea7b3906044015f604051808303815f87803b158015611c09575f5ffd5b505af1158015611c1b573d5f5f3e3d5ffd5b50505073ffffffffffffffffffffffffffffffffffffffff8085165f90815260046020908152604080832093871683529290522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505b505050565b604080518082019091525f8082526020820152604080518082019091525f8082526020820152611ce260405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81525090565b5f611d0a60405180608001604052805f81526020015f81526020015f81526020015f81525090565b6c0100000000000000000000000060038761012001516010811115611d3157611d316142e4565b03611dcd57866080015173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611d83573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da791906144f3565b50505073ffffffffffffffffffffffffffffffffffffffff9093168752506123a2915050565b60058761012001516010811115611de657611de66142e4565b03611e5c57866080015173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611e38573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da79190614581565b60078761012001516010811115611e7557611e756142e4565b03611f0b57866080015173ffffffffffffffffffffffffffffffffffffffff1663217ac2376040518163ffffffff1660e01b8152600401608060405180830381865afa158015611ec7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eeb91906145fb565b50505073ffffffffffffffffffffffffffffffffffffffff1684526123a2565b600d8761012001516010811115611f2457611f246142e4565b03611fbf57866080015173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160c060405180830381865afa158015611f76573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f9a919061464e565b50505073ffffffffffffffffffffffffffffffffffffffff9092168652506123a29050565b600a8761012001516010811115611fd857611fd86142e4565b036120e0575f876080015173ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa15801561202b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061204f91906146c8565b50505073ffffffffffffffffffffffffffffffffffffffff9092168752509050606461208261ffff8316620f4240614744565b61208c919061478c565b61ffff9081166101408a0190815260408051808201909152600b81527f6e6577206665653a202573000000000000000000000000000000000000000000602082015290516120da9216612ceb565b506123a2565b600e87610120015160108111156120f9576120f96142e4565b0361219d575f876080015173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b8152600401608060405180830381865afa15801561214c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061217091906147b1565b5073ffffffffffffffffffffffffffffffffffffffff9092168752509050606461208282620f4240614744565b600f87610120015160108111156121b6576121b66142e4565b0361227a575f876080015173ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa158015612209573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061222d91906146c8565b50505073ffffffffffffffffffffffffffffffffffffffff9092168752509050606461226061ffff8316620f4240614744565b61226a919061478c565b61ffff16610140890152506123a2565b60108761012001516010811115612293576122936142e4565b036122e557866080015173ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611e38573d5f5f3e3d5ffd5b5f876080015173ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b815260040160e060405180830381865afa158015612333573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061235791906147f4565b5050505073ffffffffffffffffffffffffffffffffffffffff929092168752509050606461238c61ffff8316620f4240614744565b612396919061478c565b61ffff16610140890152505b600787610120015160108111156123bb576123bb6142e4565b0361244f57866080015173ffffffffffffffffffffffffffffffffffffffff1663ab612f2b6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561240d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124319190614874565b50506fffffffffffffffffffffffffffffffff1660208501526124d8565b866080015173ffffffffffffffffffffffffffffffffffffffff16631a6865026040518163ffffffff1660e01b8152600401602060405180830381865afa15801561249c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124c091906148b4565b6fffffffffffffffffffffffffffffffff1660208501525b865f015173ffffffffffffffffffffffffffffffffffffffff16876080015173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061256391906142c9565b73ffffffffffffffffffffffffffffffffffffffff16036125da576125a6846020015182865f015173ffffffffffffffffffffffffffffffffffffffff16612d7c565b8652602084015184516125d0919073ffffffffffffffffffffffffffffffffffffffff1683612d7c565b6020870152612633565b6126028460200151855f015173ffffffffffffffffffffffffffffffffffffffff1683612d7c565b86526020840151845161262d9190839073ffffffffffffffffffffffffffffffffffffffff16612d7c565b60208701525b855185526020808701519086015285516040880151612657919060ff166012612e4a565b865260208601516060880151612672919060ff166012612e4a565b6020870181905286519061268e90670de0b6b3a76400006148cd565b61269891906148e4565b92505f8760c001518860a00151670de0b6b3a76400006126b891906148cd565b6126c291906148e4565b61014089015190915061ffff166126db826127106148cd565b6126e591906148e4565b604086018190526101008901515160e08a01516020015161ffff9182169261271092909116906148cd565b61271a91906148e4565b6040860152610140880151612710906127379061ffff16836148cd565b61274191906148e4565b606086018190526101008901516020015160e08a01515161ffff9182169261276c92909116906148cd565b61277691906148e4565b60608601526040850151841015806127915750846060015184105b15612bd457875160208901516040517f70a0823100000000000000000000000000000000000000000000000000000000815273b38a90f14b24ae81ec0b8f1373694f5b59811d8a600482015273ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015612819573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061283d91906148f7565b85526040517f70a0823100000000000000000000000000000000000000000000000000000000815273b38a90f14b24ae81ec0b8f1373694f5b59811d8a600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa1580156128bb573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128df91906148f7565b6020860181905260c08b015160608c0151670de0b6b3a7640000926129089160ff166012612e4a565b61291291906148cd565b61291c91906148e4565b670de0b6b3a76400008b60a00151612940885f01518e6040015160ff166012612e4a565b61294a91906148cd565b61295491906148e4565b61295e919061490e565b6040808701919091528701518610612988576129838a8a875f01518a60400151612ea4565b61299c565b61299c8a8a87602001518a606001516132a9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273b38a90f14b24ae81ec0b8f1373694f5b59811d8a600482015273ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015612a18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a3c91906148f7565b85526040517f70a0823100000000000000000000000000000000000000000000000000000000815273b38a90f14b24ae81ec0b8f1373694f5b59811d8a600482015273ffffffffffffffffffffffffffffffffffffffff8216906370a0823190602401602060405180830381865afa158015612aba573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ade91906148f7565b6020860181905260c08b015160608c0151670de0b6b3a764000092612b079160ff166012612e4a565b612b1191906148cd565b612b1b91906148e4565b670de0b6b3a76400008b60a00151612b3f885f01518e6040015160ff166012612e4a565b612b4991906148cd565b612b5391906148e4565b612b5d919061490e565b6060860181905260408601511115612bd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f76616c75655f6265666f7265203e2076616c75655f616674657200000000000060448201526064016102b7565b50505b5050505050505050565b5f612c3f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661364c9092919063ffffffff16565b905080515f1480612c5f575080806020019051810190612c5f9190614921565b611c7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016102b7565b6107558282604051602401612d01929190614983565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9710a9d00000000000000000000000000000000000000000000000000000000017905261365a565b5f80807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050805f03612dd257838281612dc857612dc861475f565b0492505050612e43565b808411612ddd575f5ffd5b5f848688098519600190810187169687900496828603819004959092119093035f82900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b5f5f82841115612e7a57612e5e83856149a4565b612e6990600a614ad8565b612e7390866148e4565b9050612e9c565b612e8484846149a4565b612e8f90600a614ad8565b612e9990866148cd565b90505b949350505050565b612ed76040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f612f178560200151865f015188610140015161ffff168960c001518a60a001518b61010001515f015161ffff168c60e001516020015161ffff16613663565b9050670de0b6b3a76400008660a0015182612f3291906148cd565b612f3c91906148e4565b60408301819052662386f26fc100001115612f58575050610941565b612f6b816012886040015160ff16612e4a565b9050612f77848261374f565b606083018190525f03612f8b575050610941565b6130296040518061012001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81525090565b866080015173ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613076573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061309a91906142c9565b73ffffffffffffffffffffffffffffffffffffffff9081166020830181905288518216835273b38a90f14b24ae81ec0b8f1373694f5b59811d8a6060840152885190911614613101576130fc846ec097ce7bc90715b34b9f10000000006148e4565b613103565b835b60c08201528651602082015173ffffffffffffffffffffffffffffffffffffffff90811691161461313857866060015161313e565b86604001515b60ff1660e08201528651602082015173ffffffffffffffffffffffffffffffffffffffff90811691161461317657866040015161317c565b86606001515b60ff16816101000181815250506131a283606001518860800151838a6101200151613764565b6060850181905290845260408801516131c0919060ff166012612e4a565b6020840152825160608801516131db919060ff166012612e4a565b80845260c0880151670de0b6b3a7640000916131f791906148cd565b61320191906148e4565b608084015260a08701516020840151670de0b6b3a764000091613223916148cd565b61322d91906148e4565b60a084018190526080840151116132a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f2050726f666974000000000000000000000000000000000000000000000060448201526064016102b7565b50505050505050565b6132dc6040518060c001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f61331c855f0151866020015188610140015161ffff168960a001518a60c001518b60e001515f015161ffff168c61010001516020015161ffff16613663565b9050670de0b6b3a76400008660c001518261333791906148cd565b61334191906148e4565b60408301819052662386f26fc10000111561335d575050610941565b613370816012886060015160ff16612e4a565b905061337c848261374f565b606083018190525f03613390575050610941565b61342e6040518061012001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81525090565b60208088015173ffffffffffffffffffffffffffffffffffffffff90811683526080890151604080517f0dfe168100000000000000000000000000000000000000000000000000000000815290519190921692630dfe168192600480820193918290030181865afa1580156134a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134c991906142c9565b73ffffffffffffffffffffffffffffffffffffffff9081166020830181905273b38a90f14b24ae81ec0b8f1373694f5b59811d8a606084015288519091161461352a57613525846ec097ce7bc90715b34b9f10000000006148e4565b61352c565b835b60c08201528651602082015173ffffffffffffffffffffffffffffffffffffffff908116911614613561578660600151613567565b86604001515b60ff1660e08201528651602082015173ffffffffffffffffffffffffffffffffffffffff90811691161461359f5786604001516135a5565b86606001515b60ff16816101000181815250506135cb83606001518860800151838a6101200151613764565b6060808601829052918552908801516135e9919060ff166012612e4a565b602084015282516040880151613604919060ff166012612e4a565b80845260a0880151670de0b6b3a76400009161362091906148cd565b61362a91906148e4565b608084015260c08701516020840151670de0b6b3a764000091613223916148cd565b6060612e9c84845f8561398a565b6113f981613a9f565b5f670de0b6b3a7640000613677868a6148cd565b61368191906148e4565b9750670de0b6b3a764000061369685896148cd565b6136a091906148e4565b9650826136af886127106148cd565b6136b991906148e4565b9650816136c8896127106148cd565b6136d291906148e4565b97505f6136df888a6148cd565b90505f6136ed8960646148cd565b6136ff6136fa8a856148cd565b613abf565b61370991906149a4565b6137149060646148cd565b905061372088826148e4565b90505f8661373683670de0b6b3a76400006148cd565b61374091906148e4565b9b9a5050505050505050505050565b5f81831061375d5781612e43565b5090919050565b81516040805173ffffffffffffffffffffffffffffffffffffffff90921660208301525f91829182910160405160208183030381529060405290505f855f015173ffffffffffffffffffffffffffffffffffffffff16866020015173ffffffffffffffffffffffffffffffffffffffff16146137e0575f6137e3565b60015b90505f6137fe8760c001518860e00151896101000151613b78565b905061380988613bd0565b5f80600788601081111561381f5761381f6142e4565b036138cb5760608901516040517f24b31a0c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c16916324b31a0c9161388291908f90899089908c90600401614ae3565b60408051808303815f875af115801561389d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138c19190614b3b565b9092509050613955565b8973ffffffffffffffffffffffffffffffffffffffff1663128acb088a60600151868e878a6040518663ffffffff1660e01b8152600401613910959493929190614b5d565b60408051808303815f875af115801561392b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061394f9190614b3b565b90925090505b836139605781613962565b805b61396b90614bb5565b965083613978578061397a565b815b9550505050505094509492505050565b606082471015613a1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016102b7565b5f5f8673ffffffffffffffffffffffffffffffffffffffff168587604051613a44919061446c565b5f6040518083038185875af1925050503d805f8114613a7e576040519150601f19603f3d011682016040523d82523d5f602084013e613a83565b606091505b5091509150613a9487838387613c4e565b979650505050505050565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b60b581710100000000000000000000000000000000008110613ae65760409190911b9060801c5b69010000000000000000008110613b025760209190911b9060401c5b650100000000008110613b1a5760109190911b9060201c5b63010000008110613b305760089190911b9060101c5b62010000010260121c80820401600190811c80830401811c80830401811c80830401811c80830401811c80830401811c80830401901c808204811115613b735781045b919050565b5f78010000000000000000000000000000000000000000000000008183613ba086601261490e565b613baa91906149a4565b613bb590600a614ad8565b90505f613a9487613bc684866148e4565b6136fa91906148cd565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020819052604090205460ff16806107555773ffffffffffffffffffffffffffffffffffffffff82165f90815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555050565b60608315613ce35782515f03613cdc5773ffffffffffffffffffffffffffffffffffffffff85163b613cdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102b7565b5081612e9c565b612e9c8383815115613cf85781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102b79190614beb565b80357fffffffff000000000000000000000000000000000000000000000000000000008116906004841015613d8b577fffffffff00000000000000000000000000000000000000000000000000000000808560040360031b1b82161691505b5092915050565b5f5f85851115613da0575f5ffd5b83861115613dac575f5ffd5b5050820193919092039150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051610180810167ffffffffffffffff81118282101715613e0a57613e0a613db9565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613e5757613e57613db9565b604052919050565b5f5f5f60608486031215613e71575f5ffd5b8335925060208401359150604084013567ffffffffffffffff811115613e95575f5ffd5b8401601f81018613613ea5575f5ffd5b803567ffffffffffffffff811115613ebf57613ebf613db9565b613ef060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613e10565b818152876020838501011115613f04575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b73ffffffffffffffffffffffffffffffffffffffff811681146113f9575f5ffd5b8035613b7381613f23565b5f60208284031215613f5f575f5ffd5b8135612e4381613f23565b5f5f5f5f60608587031215613f7d575f5ffd5b8435935060208501359250604085013567ffffffffffffffff811115613fa1575f5ffd5b8501601f81018713613fb1575f5ffd5b803567ffffffffffffffff811115613fc7575f5ffd5b876020828401011115613fd8575f5ffd5b949793965060200194505050565b803560118110613b73575f5ffd5b5f5f60408385031215614005575f5ffd5b61400e83613fe6565b9150602083013561401e81613f23565b809150509250929050565b60ff811681146113f9575f5ffd5b8035613b7381614029565b61ffff811681146113f9575f5ffd5b8035613b7381614042565b5f6040828403121561406c575f5ffd5b6040805190810167ffffffffffffffff8111828210171561408f5761408f613db9565b60405290508082356140a081614042565b815260208301356140b081614042565b6020919091015292915050565b5f6101c08284031280156140cf575f5ffd5b506140d8613de6565b6140e183613f44565b81526140ef60208401613f44565b602082015261410060408401614037565b604082015261411160608401614037565b606082015261412260808401613f44565b608082015260a0838101359082015260c080840135908201526141488460e0850161405c565b60e082015261415b84610120850161405c565b61010082015261416e6101608401613fe6565b6101208201526141816101808401614051565b6101408201526101a0929092013561016083015250919050565b5f602082840312156141ab575f5ffd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114612e43575f5ffd5b5f602082840312156141ea575f5ffd5b813567ffffffffffffffff811115614200575f5ffd5b8201601f81018413614210575f5ffd5b803567ffffffffffffffff81111561422a5761422a613db9565b8060051b61423a60208201613e10565b91825260208184018101929081019087841115614255575f5ffd5b6020850194505b83851015613a94578435925061427183613f23565b8282526020948501949091019061425c565b5f5f60408385031215614294575f5ffd5b823561400e81613f23565b5f5f604083850312156142b0575f5ffd5b82356142bb81613f23565b946020939093013593505050565b5f602082840312156142d9575f5ffd5b8151612e4381613f23565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b805173ffffffffffffffffffffffffffffffffffffffff1682526020810151614352602084018273ffffffffffffffffffffffffffffffffffffffff169052565b50604081015161437a604084018273ffffffffffffffffffffffffffffffffffffffff169052565b50606081015161438f606084018260ff169052565b5060808101516143a4608084018260ff169052565b5060a08101516143cc60a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060c081015160c083015260e081015160e0830152610100810151614406610100840182805161ffff908116835260209182015116910152565b50610120810151805161ffff90811661014085015260208201511661016084015250610140015161ffff166101809190910152565b6101a0810161197c8284614311565b5f5b8381101561446457818101518382015260200161444c565b50505f910152565b5f825161447d81846020870161444a565b9190910192915050565b6101c081016144968285614311565b8215156101a08301529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051600281900b8114613b73575f5ffd5b80518015158114613b73575f5ffd5b5f5f5f5f5f5f5f60e0888a031215614509575f5ffd5b875161451481613f23565b9650614522602089016144d3565b9550604088015161453281614042565b606089015190955061454381614042565b608089015190945061455481614042565b60a089015190935061456581614029565b915061457360c089016144e4565b905092959891949750929550565b5f5f5f5f5f5f5f60e0888a031215614597575f5ffd5b87516145a281613f23565b96506145b0602089016144d3565b955060408801516145c081614042565b60608901519095506145d181614042565b60808901519094506145e281614042565b60a089015190935063ffffffff81168114614565575f5ffd5b5f5f5f5f6080858703121561460e575f5ffd5b845161461981613f23565b9350614627602086016144d3565b9250614635604086016144d3565b9150614643606086016144e4565b905092959194509250565b5f5f5f5f5f5f60c08789031215614663575f5ffd5b865161466e81613f23565b955061467c602088016144d3565b9450604087015161468c81614042565b606088015190945061469d81614042565b60808801519093506146ae81614042565b91506146bc60a088016144e4565b90509295509295509295565b5f5f5f5f5f5f60c087890312156146dd575f5ffd5b86516146e881613f23565b95506146f6602088016144d3565b9450604087015161470681614042565b606088015190945061469d81614029565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b62ffffff828116828216039081111561197c5761197c614717565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62ffffff8316806147a0576147a061475f565b8062ffffff84160491505092915050565b5f5f5f5f608085870312156147c4575f5ffd5b84516147cf81613f23565b93506147dd602086016144d3565b9250604085015162ffffff81168114614635575f5ffd5b5f5f5f5f5f5f5f60e0888a03121561480a575f5ffd5b875161481581613f23565b9650614823602089016144d3565b9550604088015161483381614042565b606089015190955061484481614042565b608089015190945061455481614029565b80516fffffffffffffffffffffffffffffffff81168114613b73575f5ffd5b5f5f5f60608486031215614886575f5ffd5b61488f84614855565b925061489d60208501614855565b91506148ab60408501614855565b90509250925092565b5f602082840312156148c4575f5ffd5b612e4382614855565b808202811582820484141761197c5761197c614717565b5f826148f2576148f261475f565b500490565b5f60208284031215614907575f5ffd5b5051919050565b8082018082111561197c5761197c614717565b5f60208284031215614931575f5ffd5b612e43826144e4565b5f815180845261495181602086016020860161444a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f614995604083018561493a565b90508260208301529392505050565b8181038181111561197c5761197c614717565b6001815b60018411156149f2578085048111156149d6576149d6614717565b60018416156149e457908102905b60019390931c9280026149bb565b935093915050565b5f82614a085750600161197c565b81614a1457505f61197c565b8160018114614a2a5760028114614a3457614a50565b600191505061197c565b60ff841115614a4557614a45614717565b50506001821b61197c565b5060208310610133831016604e8410600b8410161715614a73575081810a61197c565b614a9e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846149b7565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115614ad057614ad0614717565b029392505050565b5f612e4383836149fa565b73ffffffffffffffffffffffffffffffffffffffff86168152846020820152831515604082015273ffffffffffffffffffffffffffffffffffffffff8316606082015260a060808201525f613a9460a083018461493a565b5f5f60408385031215614b4c575f5ffd5b505080516020909101519092909150565b73ffffffffffffffffffffffffffffffffffffffff86168152841515602082015283604082015273ffffffffffffffffffffffffffffffffffffffff8316606082015260a060808201525f613a9460a083018461493a565b5f7f80000000000000000000000000000000000000000000000000000000000000008203614be557614be5614717565b505f0390565b602081525f612e43602083018461493a56fea26469706673582212209e3ef6b0cb225ca9ab8345b42e04557e3a89511b98fcf1bbf131570380ab33bc64736f6c634300081c0033