60e0604052602c6080818152906200238c60a039600c90620000229082620001e1565b5063661fb9c0600e55636624ffc0600f55636626514060105563662b974060115561119460125560016013553480156200005a575f80fd5b50604080518082018252600d8082526c4c696768744379636c65204f4760981b602080840182905284518086019095529184529083015233915f620000a08382620001e1565b506001620000af8282620001e1565b5050506001600160a01b038116620000e057604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000eb81620000f2565b50620002ad565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200016c57607f821691505b6020821081036200018b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620001dc57805f5260205f20601f840160051c81016020851015620001b85750805b601f840160051c820191505b81811015620001d9575f8155600101620001c4565b50505b505050565b81516001600160401b03811115620001fd57620001fd62000143565b62000215816200020e845462000157565b8462000191565b602080601f8311600181146200024b575f8415620002335750858301515b5f19600386901b1c1916600185901b178555620002a5565b5f85815260208120601f198616915b828110156200027b578886015182559484019460019091019084016200025a565b50858210156200029957878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b6120d180620002bb5f395ff3fe608060405234801561000f575f80fd5b506004361061021e575f3560e01c80634f78da241161012a5780639abc8320116100b4578063d5abeb0111610079578063d5abeb011461048a578063e985e9c514610493578063f2fde38b146104a6578063fddcb5ea146104b9578063ff9ad89e146104d8575f80fd5b80639abc832014610440578063a22cb46514610448578063a6e877211461045b578063b88d4fde14610464578063c87b56dd14610477575f80fd5b8063715018a6116100fa578063715018a6146103f35780637cb64759146103fb5780638da5cb5b1461040e57806393730bbe1461041f57806395d89b4114610438575f80fd5b80634f78da24146103a757806355f804b3146103ba5780636352211e146103cd57806370a08231146103e0575f80fd5b80632d89a869116101ab57806340cb76601161017b57806340cb76601461032457806342842e0e146103375780634376ef131461034a578063447de4be146103535780634f6ccce714610394575f80fd5b80632d89a869146102ec5780632eb4a7ab146102ff5780632f745c5914610308578063329072841461031b575f80fd5b8063095ea7b3116101f1578063095ea7b3146102a15780630baddf5b146102b65780631249c58b146102c957806318160ddd146102d157806323b872dd146102d9575f80fd5b806301ffc9a71461022257806306d586bb1461024a57806306fdde0314610261578063081812fc14610276575b5f80fd5b61023561023036600461189c565b6104e1565b60405190151581526020015b60405180910390f35b61025360135481565b604051908152602001610241565b61026961050b565b6040516102419190611904565b610289610284366004611916565b61059a565b6040516001600160a01b039091168152602001610241565b6102b46102af366004611948565b6105c1565b005b6102356102c43660046119c9565b6105d0565b6102b4610687565b600854610253565b6102b46102e7366004611a33565b61075d565b6102b46102fa366004611a6c565b6107e6565b610253600b5481565b610253610316366004611948565b61098b565b61025360105481565b6102b4610332366004611ac9565b6109ee565b6102b4610345366004611a33565b610a13565b610253600f5481565b610269610361366004611b08565b604080516001600160a01b0393909316602084015261ffff91909116828201528051808303820181526060909201905290565b6102536103a2366004611916565b610a32565b6102536103b5366004611b08565b610a87565b6102b46103c8366004611be0565b610b0a565b6102896103db366004611916565b610b1e565b6102536103ee366004611c25565b610b28565b6102b4610b6d565b6102b4610409366004611916565b610b80565b600a546001600160a01b0316610289565b61025361042d366004611c5c565b805160209091012090565b610269610b8d565b610269610b9c565b6102b4610456366004611c9b565b610c28565b610253600e5481565b6102b4610472366004611cd0565b610c33565b610269610485366004611916565b610c4a565b61025360125481565b6102356104a1366004611d34565b610caf565b6102b46104b4366004611c25565b610cdc565b6102536104c7366004611c25565b600d6020525f908152604090205481565b61025360115481565b5f6001600160e01b0319821663780e9d6360e01b1480610505575061050582610d16565b92915050565b60605f805461051990611d5c565b80601f016020809104026020016040519081016040528092919081815260200182805461054590611d5c565b80156105905780601f1061056757610100808354040283529160200191610590565b820191905f5260205f20905b81548152906001019060200180831161057357829003601f168201915b5050505050905090565b5f6105a482610d65565b505f828152600460205260409020546001600160a01b0316610505565b6105cc828233610d9d565b5050565b5f61067d8383808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250506040516313de368960e21b81526001600160a01b038a16600482015261ffff891660248201528a9250309150634f78da2490604401602060405180830381865afa158015610654573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106789190611d94565b610daa565b9695505050505050565b6010544210156106f05760405162461bcd60e51b815260206004820152602960248201527f546865207075626c6963206d696e74207374616765206861736e277420737461604482015268393a32b2103cb2ba1760b91b60648201526084015b60405180910390fd5b60115442111561074e5760405162461bcd60e51b8152602060048201526024808201527f546865207075626c6963206d696e742073746167652068617320656e646564206044820152633cb2ba1760e11b60648201526084016106e7565b61075a33601354610dbf565b50565b6001600160a01b03821661078657604051633250574960e11b81525f60048201526024016106e7565b5f610792838333610ed3565b9050836001600160a01b0316816001600160a01b0316146107e0576040516364283d7b60e01b81526001600160a01b03808616600483015260248201849052821660448201526064016106e7565b50505050565b600b54604051630baddf5b60e01b81523091630baddf5b9161081391908890889088908890600401611dab565b602060405180830381865afa15801561082e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108529190611e05565b6108ad5760405162461bcd60e51b815260206004820152602660248201527f596f7572206163636f756e74206973206e6f7420696e20746865207768697465604482015265103634b9ba1760d11b60648201526084016106e7565b600e544210156109145760405162461bcd60e51b815260206004820152602c60248201527f5468652077686974656c697374206d696e74207374616765206861736e27742060448201526b39ba30b93a32b2103cb2ba1760a11b60648201526084016106e7565b600f544211156109765760405162461bcd60e51b815260206004820152602760248201527f5468652077686974656c697374206d696e742073746167652068617320656e6460448201526632b2103cb2ba1760c91b60648201526084016106e7565b610984848461ffff16610dbf565b5050505050565b5f61099583610b28565b82106109c65760405163295f44f760e21b81526001600160a01b0384166004820152602481018390526044016106e7565b506001600160a01b03919091165f908152600660209081526040808320938352929052205490565b6109f6610f9e565b600e95909555600f93909355601091909155601155601255601355565b610a2d83838360405180602001604052805f815250610c33565b505050565b5f610a3c60085490565b8210610a645760405163295f44f760e21b81525f6004820152602481018390526044016106e7565b60088281548110610a7757610a77611e20565b905f5260205f2001549050919050565b60405163223ef25f60e11b81526001600160a01b038316600482015261ffff821660248201525f90309063447de4be906044015f60405180830381865afa158015610ad4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610afb9190810190611e34565b80519060200120905092915050565b610b12610f9e565b600c6105cc8282611eea565b5f61050582610d65565b5f6001600160a01b038216610b52576040516322718ad960e21b81525f60048201526024016106e7565b506001600160a01b03165f9081526003602052604090205490565b610b75610f9e565b610b7e5f610fcb565b565b610b88610f9e565b600b55565b60606001805461051990611d5c565b600c8054610ba990611d5c565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd590611d5c565b8015610c205780601f10610bf757610100808354040283529160200191610c20565b820191905f5260205f20905b815481529060010190602001808311610c0357829003601f168201915b505050505081565b6105cc33838361101c565b610c3e84848461075d565b6107e0848484846110ba565b6060610c5582610d65565b505f610c5f6111d9565b90505f815111610c7d5760405180602001604052805f815250610ca8565b80610c87846111e8565b604051602001610c98929190611faa565b6040516020818303038152906040525b9392505050565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b610ce4610f9e565b6001600160a01b038116610d0d57604051631e4fbdf760e01b81525f60048201526024016106e7565b61075a81610fcb565b5f6001600160e01b031982166380ac58cd60e01b1480610d4657506001600160e01b03198216635b5e139f60e01b145b8061050557506301ffc9a760e01b6001600160e01b0319831614610505565b5f818152600260205260408120546001600160a01b03168061050557604051637e27328960e01b8152600481018490526024016106e7565b610a2d8383836001611278565b5f82610db6858461137c565b14949350505050565b5f80610dca60085490565b90506012548110610e1d5760405162461bcd60e51b815260206004820152601a60248201527f416c6c204e4654732068617665206265656e206d696e7465642e00000000000060448201526064016106e7565b6001600160a01b0384165f908152600d60205260409020548311610e835760405162461bcd60e51b815260206004820152601d60248201527f596f752068617665206e6f206d6f7265206d696e74206368616e63652e00000060448201526064016106e7565b6001600160a01b0384165f908152600d60205260408120805491610ea683611ffc565b90915550610ec0905084610ebb836001612014565b6113be565b610ecb816001612014565b949350505050565b5f80610ee08585856113d7565b90506001600160a01b038116610f3c57610f3784600880545f838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b610f5f565b846001600160a01b0316816001600160a01b031614610f5f57610f5f81856114c9565b6001600160a01b038516610f7b57610f7684611556565b610ecb565b846001600160a01b0316816001600160a01b031614610ecb57610ecb85856115fd565b600a546001600160a01b03163314610b7e5760405163118cdaa760e01b81523360048201526024016106e7565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b03821661104e57604051630b61174360e31b81526001600160a01b03831660048201526024016106e7565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156107e057604051630a85bd0160e11b81526001600160a01b0384169063150b7a02906110fc903390889087908790600401612027565b6020604051808303815f875af1925050508015611136575060408051601f3d908101601f1916820190925261113391810190612059565b60015b61119d573d808015611163576040519150601f19603f3d011682016040523d82523d5f602084013e611168565b606091505b5080515f0361119557604051633250574960e11b81526001600160a01b03851660048201526024016106e7565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461098457604051633250574960e11b81526001600160a01b03851660048201526024016106e7565b6060600c805461051990611d5c565b60605f6111f48361164b565b60010190505f8167ffffffffffffffff81111561121357611213611b39565b6040519080825280601f01601f19166020018201604052801561123d576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461124757509392505050565b808061128c57506001600160a01b03821615155b1561134d575f61129b84610d65565b90506001600160a01b038316158015906112c75750826001600160a01b0316816001600160a01b031614155b80156112da57506112d88184610caf565b155b156113035760405163a9fbf51f60e01b81526001600160a01b03841660048201526024016106e7565b811561134b5783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b5f81815b84518110156113b6576113ac8286838151811061139f5761139f611e20565b6020026020010151611722565b9150600101611380565b509392505050565b6105cc828260405180602001604052805f81525061174b565b5f828152600260205260408120546001600160a01b039081169083161561140357611403818486611761565b6001600160a01b0381161561143d5761141e5f855f80611278565b6001600160a01b0381165f90815260036020526040902080545f190190555b6001600160a01b0385161561146b576001600160a01b0385165f908152600360205260409020805460010190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f6114d383610b28565b5f83815260076020526040902054909150808214611524576001600160a01b0384165f9081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b505f9182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008545f9061156790600190612074565b5f838152600960205260408120546008805493945090928490811061158e5761158e611e20565b905f5260205f200154905080600883815481106115ad576115ad611e20565b5f9182526020808320909101929092558281526009909152604080822084905585825281205560088054806115e4576115e4612087565b600190038181905f5260205f20015f9055905550505050565b5f600161160984610b28565b6116139190612074565b6001600160a01b039093165f908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106116895772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106116b5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106116d357662386f26fc10000830492506010015b6305f5e10083106116eb576305f5e100830492506008015b61271083106116ff57612710830492506004015b60648310611711576064830492506002015b600a83106105055760010192915050565b5f81831061173c575f828152602084905260409020610ca8565b505f9182526020526040902090565b61175583836117c5565b610a2d5f8484846110ba565b61176c838383611826565b610a2d576001600160a01b03831661179a57604051637e27328960e01b8152600481018290526024016106e7565b60405163177e802f60e01b81526001600160a01b0383166004820152602481018290526044016106e7565b6001600160a01b0382166117ee57604051633250574960e11b81525f60048201526024016106e7565b5f6117fa83835f610ed3565b90506001600160a01b03811615610a2d576040516339e3563760e11b81525f60048201526024016106e7565b5f6001600160a01b03831615801590610ecb5750826001600160a01b0316846001600160a01b0316148061185f575061185f8484610caf565b80610ecb5750505f908152600460205260409020546001600160a01b03908116911614919050565b6001600160e01b03198116811461075a575f80fd5b5f602082840312156118ac575f80fd5b8135610ca881611887565b5f5b838110156118d15781810151838201526020016118b9565b50505f910152565b5f81518084526118f08160208601602086016118b7565b601f01601f19169290920160200192915050565b602081525f610ca860208301846118d9565b5f60208284031215611926575f80fd5b5035919050565b80356001600160a01b0381168114611943575f80fd5b919050565b5f8060408385031215611959575f80fd5b6119628361192d565b946020939093013593505050565b803561ffff81168114611943575f80fd5b5f8083601f840112611991575f80fd5b50813567ffffffffffffffff8111156119a8575f80fd5b6020830191508360208260051b85010111156119c2575f80fd5b9250929050565b5f805f805f608086880312156119dd575f80fd5b853594506119ed6020870161192d565b93506119fb60408701611970565b9250606086013567ffffffffffffffff811115611a16575f80fd5b611a2288828901611981565b969995985093965092949392505050565b5f805f60608486031215611a45575f80fd5b611a4e8461192d565b9250611a5c6020850161192d565b9150604084013590509250925092565b5f805f8060608587031215611a7f575f80fd5b611a888561192d565b9350611a9660208601611970565b9250604085013567ffffffffffffffff811115611ab1575f80fd5b611abd87828801611981565b95989497509550505050565b5f805f805f8060c08789031215611ade575f80fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b5f8060408385031215611b19575f80fd5b611b228361192d565b9150611b3060208401611970565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611b7657611b76611b39565b604052919050565b5f67ffffffffffffffff821115611b9757611b97611b39565b50601f01601f191660200190565b5f611bb7611bb284611b7e565b611b4d565b9050828152838383011115611bca575f80fd5b828260208301375f602084830101529392505050565b5f60208284031215611bf0575f80fd5b813567ffffffffffffffff811115611c06575f80fd5b8201601f81018413611c16575f80fd5b610ecb84823560208401611ba5565b5f60208284031215611c35575f80fd5b610ca88261192d565b5f82601f830112611c4d575f80fd5b610ca883833560208501611ba5565b5f60208284031215611c6c575f80fd5b813567ffffffffffffffff811115611c82575f80fd5b610ecb84828501611c3e565b801515811461075a575f80fd5b5f8060408385031215611cac575f80fd5b611cb58361192d565b91506020830135611cc581611c8e565b809150509250929050565b5f805f8060808587031215611ce3575f80fd5b611cec8561192d565b9350611cfa6020860161192d565b925060408501359150606085013567ffffffffffffffff811115611d1c575f80fd5b611d2887828801611c3e565b91505092959194509250565b5f8060408385031215611d45575f80fd5b611d4e8361192d565b9150611b306020840161192d565b600181811c90821680611d7057607f821691505b602082108103611d8e57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215611da4575f80fd5b5051919050565b8581526001600160a01b038516602082015261ffff8416604082015260806060820181905281018290525f6001600160fb1b03831115611de9575f80fd5b8260051b808560a08501379190910160a0019695505050505050565b5f60208284031215611e15575f80fd5b8151610ca881611c8e565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611e44575f80fd5b815167ffffffffffffffff811115611e5a575f80fd5b8201601f81018413611e6a575f80fd5b8051611e78611bb282611b7e565b818152856020838501011115611e8c575f80fd5b611e9d8260208301602086016118b7565b95945050505050565b601f821115610a2d57805f5260205f20601f840160051c81016020851015611ecb5750805b601f840160051c820191505b81811015610984575f8155600101611ed7565b815167ffffffffffffffff811115611f0457611f04611b39565b611f1881611f128454611d5c565b84611ea6565b602080601f831160018114611f4b575f8415611f345750858301515b5f19600386901b1c1916600185901b178555611fa2565b5f85815260208120601f198616915b82811015611f7957888601518255948401946001909101908401611f5a565b5085821015611f9657878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f8351611fbb8184602088016118b7565b835190830190611fcf8183602088016118b7565b64173539b7b760d91b9101908152600501949350505050565b634e487b7160e01b5f52601160045260245ffd5b5f6001820161200d5761200d611fe8565b5060010190565b8082018082111561050557610505611fe8565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061067d908301846118d9565b5f60208284031215612069575f80fd5b8151610ca881611887565b8181038181111561050557610505611fe8565b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220c5fac3c22ffe15fffdd063669fd337ec6aa0899c8be58a7c52cdac972ab9bce064736f6c6343000816003368747470733a2f2f6c696768746379636c652e636974792f4f472d4e46542f6e66742f6d657461646174612f